2017-02-24 115 views
0

我想在Android上用OpenglES,MediaCodec,SurfaceTexture和其他一些东西做一些视频事情。首先,我将视频中的帧解码为GL_TEXTURE_EXTERNAL_OES纹理。然后我把它渲染到framebuffer。下面是代码:Android glClear cause glError 1286

checkGlError("before renderTexture"); 

    GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mCameraFbo.frameId()); 
    checkGlError("renderTexture 1"); 

    GLES20.glViewport(0, 0, mInputImageWidth, mInputImageHeight); 
    checkGlError("renderTexture 2"); 

    GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 
    checkGlError("renderTexture 3"); 

    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); 
    checkGlError("renderTexture 4"); 

    GLES20.glUseProgram(mProgram); 

    if (texid != OpenGlUtils.NO_TEXTURE) { 
     GLES20.glActiveTexture(GLES20.GL_TEXTURE1); 
     GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, texid); 
     GLES20.glUniform1i(GLES20.glGetUniformLocation(mProgram, "inputImageTexture"), 1); 
    } 

    mTriangleVertices.position(0); 
    GLES20.glEnableVertexAttribArray(maPositionHandle); 
    GLES20.glVertexAttribPointer(maPositionHandle, 2, GLES20.GL_FLOAT, false, 0, mTriangleVertices); 

    mGLTextureBuffer.position(0); 
    GLES20.glEnableVertexAttribArray(maTextureHandle); 
    GLES20.glVertexAttribPointer(maTextureHandle, 2, GLES20.GL_FLOAT, false, 0, mGLTextureBuffer); 

    GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); 

    GLES20.glDisableVertexAttribArray(maPositionHandle); 
    GLES20.glDisableVertexAttribArray(maTextureHandle); 
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); 
    GLES20.glUseProgram(0); 

崩溃在我的Nexus 5X和Nexus 6P,在这条线“GLES20.glClear”,与glError 1286,但它在其他较旧的设备,如Nexus 5和小蜜就好了注意。

我检查了“glCheckFramebufferStatus”的framebuffer状态,我很确定它没问题。

设备信息:

Nexus 5X, Android7.1.1 

GPU信息:

vendor : Qualcomm 

renderer: Adreno (TM) 418 

version : OpenGL ES 3.2 [email protected] ([email protected]) 

任何人有这个想法?提前致谢。

回答

0

找出为什么......我用EGL上下文创建帧缓冲区,将其与另一个帧一起使用,

相关问题