2014-01-15 34 views
1

我上實現渲染到紋理在Android 4.3以上版本(OpenGLES 2.0)負載統一矩陣1104 GL_Invalid_Operation的Android 2.0 OpenGLES

我收到以下錯誤在我DrawFrame()方法工作:

01-15 13:40:07.545: W/Adreno-ES20(23709): <__load_uniform_matrix:1104>: GL_INVALID_OPERATION 
01-15 13:40:07.545: E/com.hpp.STextureRender(23709): glDrawArrays: glError 1282 
01-15 13:40:07.545: D/io.hpp.CaptureManager(23709): Error encountered in drawFrame = glDrawArrays: glError 1282 
01-15 13:40:07.545: W/System.err(23709): java.lang.RuntimeException: glDrawArrays: glError 1282 
01-15 13:40:07.545: W/System.err(23709): at com.hpp.openGL.STextureRender.checkGlError(STextureRender.java:524) 
01-15 13:40:07.545: W/System.err(23709): at com.hpp.openGL.STextureRender.drawFrame(STextureRender.java:316) 
01-15 13:40:07.545: W/System.err(23709): at com.harmonicprocesses.penelopefree.openGL.MyGLRenderer.drawFrame(MyGLRenderer.java:286) 
01-15 13:40:07.545: W/System.err(23709): at com.harmonicprocesses.penelopefree.camera.CaptureManager.drawFrame(CaptureManager.java:446) 
01-15 13:40:07.545: W/System.err(23709): at com.harmonicprocesses.penelopefree.camera.CaptureManager.access$7(CaptureManager.java:444) 
01-15 13:40:07.555: W/System.err(23709): at com.harmonicprocesses.penelopefree.camera.CaptureManager$6.run(CaptureManager.java:278) 
01-15 13:40:07.555: W/System.err(23709): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1463) 
01-15 13:40:07.555: W/System.err(23709): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

莫非這個問題從莖設立EGL14.eglChooseConfig(mEGLDisplay, configsAttribs, 0, configs, 0, configs.length, numConfigs, 0);

private int[] version, configsAttribs = { 
     EGL14.EGL_RED_SIZE, 8, 
     EGL14.EGL_GREEN_SIZE, 8, 
     EGL14.EGL_BLUE_SIZE, 8, 
     EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT, 
     EGL_RECORDABLE_ANDROID, 1, 
     EGL14.EGL_NONE 

但使用以下的紋理連接到FBO

// generate the textures 
    GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, rain.width, rain.height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_SHORT_4_4_4_4, juliaTexBuff); 

請注意RGBA4444與EGL中的RGBA8888的區別嗎?

+0

不,那不可能是你的問題。 RGBA4444是OpenGL ES 2.0中唯一能夠保證***顏色的RGBA格式。如果您使用的是FBO,那麼您可以使用最安全的RGBA格式,並且您需要將內部格式與GLES中的像素傳輸格式相匹配。您的默認幀緩衝區的像素格式與FBO的格式無關。如果你擔心你的FBO,那麼調用'glCheckFramebufferStatus(...)';問題是,如果這是你的問題,一個兼容的GL實現會生成'GL_INVALID_FRAMEBUFFER_OPERATION'而不是'GL_INVALID_OPERATION'。 –

+0

感謝您的理解。我不認爲這是問題,但如果你看看我的其他[問題](http://stackoverflow.com/questions/21146060/render-buffer-generating-gl-invalid-operation-error-android-opengl -es-2-0)我認爲這可能是問題所在。基本上當我在'glUseProgram'前面調用'glBindFrameBuffer'時,我得到這個錯誤。在任何情況下,我都會在連接到FBO的紋理上附加'intbuffer'的全零。但是,當我寫出來顯示它顯示罰款。 – HPP

回答

3

問題是在調用glUseProgram之前加載一個統一的變量。如果我將該調用放在包含glGetUniform4fv()的塊之後,它顯然會失敗,因爲它不知道制服的位置,因爲程序已加載。