2013-11-20 36 views
0

我目前正在Android應用程序上編程。解決「程序對象不完整」。 opengl錯誤

這裏是我的代碼:

program = GLES20.glCreateProgram(); 

System.out.println("Program: " + program); 

GLES20.glAttachShader(program, vertexShader); 
CustomRenderer.checkGlError("AttachingVertex"); 

GLES20.glAttachShader(program, fragmentShader); 
CustomRenderer.checkGlError("AttachingFragment"); 

GLES20.glLinkProgram(program); 
CustomRenderer.checkGlError("LinkProgram"); 
System.out.println("Is Program: " + GLES20.glIsProgram(program)); 

GLES20.glValidateProgram(program); 
System.out.println("Error log: " + GLES20.glGetProgramInfoLog(program)); 


GLES20.glUseProgram(program); 
CustomRenderer.checkGlError("UseProgram"); 

這是輸出:

11-20 14:02:01.442: I/System.out(6370): Vertex: 1 
11-20 14:02:01.442: I/System.out(6370): Is Shader: true 
11-20 14:02:01.447: I/System.out(6370): Fragment: 2 
11-20 14:02:01.447: I/System.out(6370): Is Shader: true 
11-20 14:02:01.447: I/System.out(6370): Program: 3 
11-20 14:02:01.447: I/System.out(6370): Is Program: true 
11-20 14:02:01.447: I/System.out(6370): Error log: The program object is incomplete. 
11-20 14:02:01.447: I/System.out(6370): UseProgram: glError 1282 

您還可以看到其他檢查我爲着色器,和它們似乎都編譯。

回答

0

這個錯誤信息的答案是着色器做的不是編譯!儘管'是'着色器並且有一個id,但他們沒有編譯。

檢查使用GLES20.glGetShaderInfoLog方法編譯的着色器。這會告訴你什麼是錯的,你將不得不解決這個問題。

+1

問題的一部分是你認爲'glIs ___(...)'函數告訴你任何有關OpenGL對象的有效性。情況並非如此,這只是告訴你名稱('GLuint'句柄)是否與該類型的對象相關聯。這個關聯發生在你第一次將一個名字綁定到某個東西上(例如,'glGenTextures(...)'將會返回一個名字,但是這個名字實際上並不是一個紋理,除非你調用像'glBindTexture(GL_TEXTURE_2D,name)') 。儘管如此,即使你從來沒有對紋理進行任何處理,glIsTexture(...)也會返回GL_TRUE,除了僅僅綁定一次。 –

相關問題