2012-01-08 94 views
1

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

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); 

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

+0

这主要是一种猜测,但在这种情况下,如果我正确读取它,违反规范,这可能意味着设备不支持任何二进制着色器格式(如果GL_NUM_SHADER_BINARY_FORMATS == 0,则'假设'没有人会调用GL_SHADER_BINARY_FORMATS) 。 – harism 2012-01-08 20:09:39

+0

谢谢,这似乎是合理的。我会看看零是否是返回值,并且看看是否跳过这部分将在稍后导致任何其他问题。 – paulscode 2012-01-08 21:39:50

+0

原来GL_NUM_SHADER_BINARY_FORMATS == 1(在上面的代码示例中nFormats变成了2,因为“hasCompiler”为true)。但是,GL_SHADER_BINARY_FORMATS的glGetIntegerv仍然会导致GL_INVALID_ENUM。当问题发生时,我通过告诉代码中存在零着色器二进制格式来解决这个问题,但是我仍然想知道为什么会发生这种情况。尽管非常感谢您的提示,但如果您没有提出建议,可能需要更长的时间才能提出解决方法! – paulscode 2012-01-09 03:04:10

回答

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 

但是他们应该差不多这样做。

+0

感谢您花时间回答!有没有链接到一个这样的例子?我很抱歉,我是GL新手,你的一些答案在我头上(特别是,如何“使用GL_ARB_get_program_binary”,放置这些#define以及第一篇文章中的代码中的其他内容是否需要更改。此外,这些更改是否会对那些正确支持“GL_ARB_ES2_compatibility扩展”的系统产生影响?(使用此应用程序的应用程序将在Android Market上分发给许多设备,其中大多数设备没有上述问题) – paulscode 2012-01-24 14:15:35

+0

只需尝试交换“SHADER”作为“PROGRAM”,看看它有什么... – 2012-01-24 16:44:18

+0

好吧,gotchya现在(对不起)。我会给它一个看看它是否有效(如果使用它对其他有负面影响设备)。 – paulscode 2012-01-25 23:24:03

相关问题