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])
誰もがこのことについて考えを持っていますか?前もって感謝します。