2014-10-20 44 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