我正在使用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。
答案 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
但是他们应该做同样的事情。