2016-09-26 4 views
8

많은 사람들이 사용하는 Android 게임을 개발했습니다. 100-200 명의 사용자 중 한 명은 예외가 있습니다. AndEngine RenderTexture 예외 : GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

나는 내가 그것을 초기화 할 때 다음과 같은 예외가 던져 RenderTexture를 사용

Fatal Exception: org.andengine.opengl.exception.RenderTextureInitializationException 
org.andengine.opengl.exception.GLFrameBufferException: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 

그것은 모든 장치의 99 %에서 작동합니다.

업데이트

충돌 지금까지 일어난 전화의 목록 ... 그것은 뭔가처럼 보인다

public void init(final GLState pGLState) throws GLFrameBufferException, GLException { 
    this.savePreviousFramebufferObjectID(pGLState); 

    try { 
     this.loadToHardware(pGLState); 
    } catch (final IOException e) { 
     /* Can not happen. */ 
    } 

    /* The texture to render to must not be bound. */ 
    pGLState.bindTexture(0); 

    /* Generate FBO. */ 
    this.mFramebufferObjectID = pGLState.generateFramebuffer(); 
    pGLState.bindFramebuffer(this.mFramebufferObjectID); 

    /* Attach texture to FBO. */ 
    GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, this.mHardwareTextureID, 0); 

    try { 
     pGLState.checkFramebufferStatus(); 
    } catch (final GLException e) { 
     this.destroy(pGLState); 

     throw new RenderTextureInitializationException(e); 
    } finally { 
     this.restorePreviousFramebufferObjectID(pGLState); 
    } 

    this.mInitialized = true; 
} 

는 프레임 버퍼-상태에 문제가 있습니다 : 초기화-방법은 다음과 같습니다 :

Sony - Sony Tablet S 
TCT - ALCATEL ONE TOUCH 5020A 
TCT - ALCATEL ONE TOUCH 6030N 
VNPT Technology - VNPT Technology Smart Box 
Q-Smart - S32 
LGE - LG-E465g 
LGE - LG-D682TR 
LGE - LG-E451g 
LGE - LG-D686 
LGE - LG-E470f 
HUAWEI - MediaPad 7 Youth 
unknown - Bliss Pad B9712KB 
samsung - GT-P5110 
samsung - GT-I9505 
samsung - Galaxy Nexus 
samsung - GT-P3110 
samsung - GT-P5100 
samsung - GT-P3100 
samsung - GT-I9105P 
samsung - GT-I9082 
samsung - GT-I9082L 
samsung - GT-I9152 
samsung - GT-P3113 
E1A - E1A 
LNV - LN1107 
motorola - XT920 
motorola - XT915 
asus - ME172V 

답변

0

링크 된 코드에 따르면 RGBA8888 텍스처로 렌더링하려는 것처럼 보입니다. 이것은 대부분의 장치가 16 비트 디스플레이를 사용하던 때로 거슬러 올라 가기 때문에 OpenGL ES 2.0 장치에서 항상 사용 가능한 것은 아닙니다.

의 OpenGL ES 2.x에서의 유일한 필수 형식

RGBA8 대상이 확장하는 경우에만 사용할 수 있습니다 ... 당신이 점점 오류 코드 아래의 사양에 설명되어 있습니다 노출 :

... 일부 사용자가이 확장 프로그램을 사용하지 않는 GPU가있는 구형 장치를 사용하는 것과 같습니다.

을 ... 및 OES_rgb_rgba8 값리스트에 존재하는지 확인하십시오 확장 GL_EXTENSIONS으로 사용 glGetString (아래 참조) 지원되는지 확인한다. 그렇지 않은 경우 RGB565 또는 RGB5_A1과 같은 필수 ES2.x 형식 세트의 다른 항목으로 되돌아가는 것이 유일한 옵션입니다.

+0

답변 해 주셔서 감사합니다. 대단히 감사합니다. 예, RGBA8888 텍스처로 렌더링하려고합니다. 나는 그것에 Sprite/Textures를 렌더링합니다 (TextureOptions.BILINEAR_PREMULTIPLYALPHA) - 그들은 "stamps"의 역할을합니다. 무엇을 바꿀 수 있습니까? 대안을 알고 있습니까? 감사합니다. 좋은 하루 되세요! – sjkm

+0

확장자를 사용할 수있는 경우에만 RGBA8로 렌더링하고 그렇지 않은 경우에는 RGB565 또는 RGB5_A1로 되돌립니다. 알맞은 알파 채널이 없으면 스프라이트가 무엇을하는지에 따라 다소 아플 수도 있지만 장치가 RGBA8을 지원하지 않는다면 선택의 여지가 많지 않을 것이라고 생각합니다. – solidpixel

+0

감사합니다! 이렇게 요약 : 게임은 실제로 실행 가능하지 않습니까? RGBA8000이 지원되는지 어떻게 확인할 수 있습니까? 장치를 지원하지 않는 장치 (예 : Manifest를 통해)를 제외 할 수 있는지 알고 있습니까? 이 장치가 특정 문제라고 말할 수 있습니까? (문제가있는 장치를 제외하면 응용 프로그램을 다운로드하면 문제가 "해결"될 것입니다)? 그 많은 질문으로 당신을 넘치게 해줘서 죄송합니다 :)! 정말 고맙습니다. – sjkm