获取真实的OpenGL纹理格式

问题描述 投票:0回答:1

在我的应用程序中,我需要每帧更新纹理,为了快速完成此操作,我使用 CUDA,也是因为我的初始数据是 24 位 BGR。 所以我用这种方式创建纹理:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, DimY, DimX, 0, GL_BGR, GL_UNSIGNED_BYTE, NULL);

我使用

cudaGraphicsGLRegisterImage
cudaGraphicsMapResources
cudaGraphicsSubResourceGetMappedArray
来做
cudaMemcpy2DToArrayAsync
,但我在我的电脑上看到它效果不佳,因为纹理实际上是 BGRX8,所以我创建了一个 cuda 内核来转换24 位 BRG 至 32 RGB。我现在想做的是让它通用检查纹理的真实格式,但是我没有找到方法。 有没有办法获得纹理的真实格式?或者 cuda 数组的?

opengl cuda nvidia
1个回答
1
投票

获取纹理对象的有效目标(如果目标未知)

glGetTextureParameteriv(
    texture,
    GL_TEXTURE_TARGET,
    &target
);

获取特定关卡的内部格式

glGetTextureLevelParameteriv(
    texture,
    mipmaplevel, //e.g. 0
    GL_TEXTURE_INTERNAL_FORMAT
    &format
);

我特意使用了命名函数,这需要 OpenGL 4.5 版本。但也有

glGetTexParameteriv
glGetTexLevelParameteriv
(OpenGL 2+)。

© www.soinside.com 2019 - 2024. All rights reserved.