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
您還可以看到其他檢查我爲着色器,和它們似乎都編譯。
問題的一部分是你認爲'glIs ___(...)'函數告訴你任何有關OpenGL對象的有效性。情況並非如此,這只是告訴你名稱('GLuint'句柄)是否與該類型的對象相關聯。這個關聯發生在你第一次將一個名字綁定到某個東西上(例如,'glGenTextures(...)'將會返回一個名字,但是這個名字實際上並不是一個紋理,除非你調用像'glBindTexture(GL_TEXTURE_2D,name)') 。儘管如此,即使你從來沒有對紋理進行任何處理,glIsTexture(...)也會返回GL_TRUE,除了僅僅綁定一次。 –