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.这样,程序不起作用(着色器不起作用,但在着色器编译中我没有遇到任何错误)。
我该怎么办?
我这样做,它适用于nexus,windows,raspberry和debian linux(是一个多平台项目)。但是,它不适用于LG7,唯一的区别是那些ID,所以我认为这是关于他们的......任何线索? – 2014-10-20 09:41:57
这些ID几乎肯定不是你的问题。每次调用后检查着色器编译和链接日志,以及“glGetError”的结果。如果看起来一切正常,尝试剥下着色器,看看着色器编译器是否正在默默打破你;并非所有的OpenGL驱动程序都擅长生成有用的错误消息。 – Thomas 2014-10-20 13:56:45
每个GLES实现在它所能接受的着色器方面稍有不同,因此着色器无法在一台设备上正常工作,并在另一台设备上完全失败。请记住'glCompileShader()'不会*设置'glGetError()'的值;你必须检查函数返回值,然后使用'glGetShaderInfoLog()'来查看问题。 – fadden 2014-10-20 15:26:41