我刚刚从AMD gpu切换到Nvidia GPU(331.82 windows驱动程序),我对使用glGetInternalformativ
时获得的结果感到有些惊讶。对于初学者,当我查询GL_TEXTURE_IMAGE_FORMAT
的纹理格式时,大多数似乎都返回0.一些例子是GL_RGB8
,GL_SRGB8
,GL_SRGB8_ALPHA8
,GL_RGB32F
, GL_COMPRESSED_SIGNED_RG_RGTC2
。返回0以外的一些示例包括GL_RGBA8
,GL_R32UI
,GL_RGB9_E5
,GL_RGB10_A2
,GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
。这是一个错误吗?
其他一些对我来说很奇怪的是,在检查GL_TEXTURE_IMAGE_TYPE
格式时GL_RGB8
,GL_SRGB8
和GL_SRGB8_ALPHA8
都返回GL_UNSIGNED_INT_8_8_8_8
,但{{1} }}返回GL_RBGA8
。
根据要求,我正在使用的代码:
GL_UNSIGNED_INT_8_8_8_8_REV
void print_tex_format_info(GLenum internalformat)
{
GLuint pformat, format, type;
glGetInternalformativ(GL_TEXTURE_2D, internalformat, GL_INTERNALFORMAT_PREFERRED, 1, &pformat);
glGetInternalformativ(GL_TEXTURE_2D, internalformat, GL_TEXTURE_IMAGE_FORMAT, 1, &format);
glGetInternalformativ(GL_TEXTURE_2D, internalformat, GL_TEXTURE_IMAGE_TYPE, 1, &type);
printf("IF [%s]\nPF [%s]\nXF [%s]\nTP [%s]\n\n",
ogl_EnumToString(internalformat),
ogl_EnumToString(pformat),
ogl_EnumToString(format),
ogl_EnumToString(type)
);
}
print_tex_format_info(GL_RGB8);
print_tex_format_info(GL_RGBA8);
print_tex_format_info(GL_SRGB8);
etc
使用巨型开关将GLenum转换为等效字符串。它返回ogl_EnumToString
,它也与GL_ZERO
相同。默认情况不是0,因此GL_NONE
不能识别枚举或其他任何内容。