Android glClear 导致 glError 1286

Posted

技术标签:

【中文标题】Android glClear 导致 glError 1286【英文标题】:Android glClear cause glError 1286 【发布时间】:2017-02-24 08:02:32 【问题描述】:

我正在尝试使用 OpenglES、MediaCodec、SurfaceTexture 和其他一些东西在 android 上做一些视频事情。首先,我将视频中的帧解码为 GL_TEXTURE_EXTERNAL_OES 纹理。然后我将它渲染到帧缓冲区。代码如下:

    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 和小米 Note。

我已经用“glCheckFramebufferStatus”检查了帧缓冲状态,我很确定它没问题。

设备信息:

Nexus 5X, Android7.1.1

GPU 信息:

vendor  : Qualcomm

renderer: Adreno (TM) 418

version : OpenGL ES 3.2 V@145.0 (GIT@If5818605d9)

有人知道这个吗?提前致谢。

【问题讨论】:

【参考方案1】:

找出原因...我使用 EGL 上下文创建帧缓冲区,并与另一个上下文一起使用,

【讨论】:

以上是关于Android glClear 导致 glError 1286的主要内容,如果未能解决你的问题,请参考以下文章

glClear()不服从剪刀区域[关闭]

学习OpenGL时找不到glClear

来自 glClear() 的 OpenGL 帧缓冲区错误

glClear 失败并显示 GL_FRAMEBUFFER_UNDEFINED

OpenGL|ES 2.0 glClear 命令冻结直到窗口状态改变

glclear 和 GL_COLOR_BUFFER_BIT 有问题