Android 为什么glGetIntegerv for GL_NUM_SHADER_BINARY_格式生成GL_INVALID_ENUM?

Android 为什么glGetIntegerv for GL_NUM_SHADER_BINARY_格式生成GL_INVALID_ENUM?,android,enums,android-ndk,sdl,opengl-es-2.0,Android,Enums,Android Ndk,Sdl,Opengl Es 2.0,我正在使用SDL1.3的官方Android端口,并使用它来设置GLES2渲染器。它适用于大多数设备,但对于一个用户,它不起作用。日志输出显示以下错误: error of type 0x500 glGetIntegerv 我查了0x500,它指的是GL_INVALID_ENUM。我已经找到了SDL库中以下代码出现问题的地方:(完整的源代码相当大,我删掉了日志记录和基本的错误检查行,因此如果我没有在这里包含足够的信息,请告诉我) 紧接着最后一行(glGetIntegerv用于GL_着色器\u二进

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

error  of type 0x500 glGetIntegerv
我查了0x500,它指的是GL_INVALID_ENUM。我已经找到了SDL库中以下代码出现问题的地方:(完整的源代码相当大,我删掉了日志记录和基本的错误检查行,因此如果我没有在这里包含足够的信息,请告诉我)


紧接着最后一行(glGetIntegerv用于GL_着色器\u二进制\u格式),glGetError()返回GL_无效\u枚举。

问题是您的系统不正确支持GL_ARB\u ES2\u兼容性扩展

GL_INVALID_ENUM表示它不知道GL_NUM_SHADER_BINARY_格式和GL_SHADER_BINARY_格式ENUM,它们是所述扩展的一部分

相反,GL_着色器_编译器被识别,这很奇怪

您可以尝试使用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

但是他们应该做得差不多。

这主要是一个猜测,但在这种情况下,如果我读对了规范,这可能意味着设备不支持任何二进制着色器格式(并且“假设”如果GL\u NUM\u shader\u binary\u formats==0,没有人会调用GL\u shader\u binary\u formats)。谢谢,这似乎是合理的。我将查看返回值是否为零,并查看跳过此部分是否会在以后导致任何其他问题。结果是GL_NUM_SHADER_BINARY_FORMATS==1(在上面的代码示例中,由于“hasCompiler”为true,所以nFormats变为2)。但是,glGetIntegerv for GL_SHADER_BINARY_格式仍然会导致GL_无效_枚举。我已经解决了这个问题,当问题发生时,我告诉代码有零着色器二进制格式,但我仍然想弄清楚为什么会发生这种情况。不过,非常感谢你的建议——如果不是你建议的话,我可能需要更长的时间才能想出解决办法!感谢您抽出时间回答!是否有一个链接指向这样做的示例?很抱歉,我是GL的新手,您的一些回答超出了我的理解范围(特别是,如何“使用GL#u ARB#u get#u program#u binary”,将这些#定义放在何处,以及我第一篇文章中的代码中是否有其他内容需要更改。此外,这些更改是否会对正确支持“GL#ARB#u ES2#兼容性扩展”的系统产生任何影响?(使用此功能的应用程序在Android市场上被分发到许多设备上,其中大多数设备都没有上述问题)好的,gotchya现在(对此表示抱歉)。我将试一试,看看它是否有效(以及使用它对其他设备是否有任何负面影响)。
#define GL_SHADER_BINARY_FORMATS                                     0x8df8
#define GL_NUM_SHADER_BINARY_FORMATS                                 0x8df9