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])
任何人有這個想法?提前致謝。