2017-02-24 1 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"에서, 내 넥서스 5 배와 넥서스 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 컨텍스트와 함께 만들고 다른 프레임과 함께 사용한다.

관련 문제