2017-02-24 22 views
0

私は、OpenGLES、MediaCodec、SurfaceTextureなどの他のものを使ってAndroidでいくつかのビデオをやろうとしています。まず、ビデオのフレームをGL_TEXTURE_EXTERNAL_OESテクスチャとしてデコードします。次に、これをフレームバッファにレンダリングします。ここでは、コードは次のとおりです。Android glClear原因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); 

それはglError 1286で、このライン「GLES20.glClear」で、私のネクサス5Xとネクサス6Pにクラッシュするが、それは、そのようなネクサス5と小米科技などの他の古いデバイス、上だけで結構です注意。

"glCheckFramebufferStatus"でフレームバッファの状態を確認しましたが、これは問題ありません。

デバイス情報:

Nexus 5X, Android7.1.1 

GPU情報:

vendor : Qualcomm 

renderer: Adreno (TM) 418 

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

誰もがこのことについて考えを持っていますか?前もって感謝します。

答えて

0

私はフレームバッファをEGLコンテキストで作成し、別のフレームワークで使用します。

関連する問題