2014-10-20 123 views
0

当使用C++(NDK)编程opengl es 2.0时,我遇到了奇怪的兼容性问题。 当我在Nexus5上运行代码并且它工作得很好时,当我创建着色器程序时,glCreateProgram返回正确的ID(前3个程序为3,6和9)。glCreateProgram在LG7上返回奇怪的ID?

但是,当我在LG7上运行相同的代码时,glCreateProgram返回相同的数字,其中(7 * x * 10000)的使用使得第一个着色器210003,420006和630009.这样,程序不起作用(着色器不起作用,但在着色器编译中我没有遇到任何错误)。

我该怎么办?

回答

0

glCreateProgram返回的标识符是实现定义的。你不应该依赖任何特定的价值被返回。从doc

glCreateProgram创建一个空的程序对象,并返回由它可以被引用的非零值。

因此,请记录返回的值,并在后续代码中使用它来引用着色器。

+0

我这样做,它适用于nexus,windows,raspberry和debian linux(是一个多平台项目)。但是,它不适用于LG7,唯一的区别是那些ID,所以我认为这是关于他们的......任何线索? – 2014-10-20 09:41:57

+1

这些ID几乎肯定不是你的问题。每次调用后检查着色器编译和链接日志,以及“glGetError”的结果。如果看起来一切正常,尝试剥下着色器,看看着色器编译器是否正在默默打破你;并非所有的OpenGL驱动程序都擅长生成有用的错误消息。 – Thomas 2014-10-20 13:56:45

+0

每个GLES实现在它所能接受的着色器方面稍有不同,因此着色器无法在一台设备上正常工作,并在另一台设备上完全失败。请记住'glCompileShader()'不会*设置'glGetError()'的值;你必须检查函数返回值,然后使用'glGetShaderInfoLog()'来查看问题。 – fadden 2014-10-20 15:26:41