为什么GL_NUM_SHADER_BINARY_FORMATS的glGetIntegerv会生成GL_INVALID_ENUM?

时间:2012-01-08 19:44:18

标签: android enums android-ndk sdl opengl-es-2.0

我正在使用SDL 1.3的官方Android端口,并使用它来设置GLES2渲染器。它适用于大多数设备,但对于一个用户,它不起作用。日志输出显示以下错误:

error  of type 0x500 glGetIntegerv

我查了一下0x500,它指的是GL_INVALID_ENUM。我已经跟踪了SDL库中以下代码出现问题的位置:(完整的源代码非常大,我删除了日志记录和基本的错误检查行,所以如果我这里没有包含足够的信息,请告诉我)

glGetIntegerv( GL_NUM_SHADER_BINARY_FORMATS, &nFormats );
glGetBooleanv( GL_SHADER_COMPILER, &hasCompiler );
if( hasCompiler )
    ++nFormats;
rdata->shader_formats = (GLenum *) SDL_calloc( nFormats, sizeof( GLenum ) );
rdata->shader_format_count = nFormats;
glGetIntegerv( GL_SHADER_BINARY_FORMATS, (GLint *) rdata->shader_formats );

紧接在最后一行(GL_SHADER_BINARY_FORMATS的glGetIntegerv)之后,glGetError()返回GL_INVALID_ENUM。

1 个答案:

答案 0 :(得分:1)

问题是您的系统未正确支持GL_ARB_ES2_compatibility扩展程序。

GL_INVALID_ENUM表示它不知道GL_NUM_SHADER_BINARY_FORMATS和GL_SHADER_BINARY_FORMATS枚举,它们是所述扩展名的一部分。

相比之下,GL_SHADER_COMPILER被认可,这很奇怪。

您可以尝试使用GL_ARB_get_program_binary并改为使用这两个:

#define GL_NUM_PROGRAM_BINARY_FORMATS                                0x87fe
#define GL_PROGRAM_BINARY_FORMATS                                    0x87ff

请注意,这些不同于:

#define GL_SHADER_BINARY_FORMATS                                     0x8df8
#define GL_NUM_SHADER_BINARY_FORMATS                                 0x8df9

但是他们应该做同样的事情。