2017-03-31 2 views
2

GLES2를 사용하여 라스베리 파이 3에서 실행되는 OpenGL 프레임 워크를 얻으려고합니다. 핵심 프로필에 , 나는이 수행 GLES2에서 glFramebufferRenderbuffer의 가능한 사용법은 무엇입니까?

glGenRenderbuffers (1, &ColorBufferGLID); 
    glBindRenderbuffer (GL_RENDERBUFFER, ColorBufferGLID); 
    glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA, Dimensions.x, Dimensions.y); 
    glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, ColorBufferGLID); 

    glGenRenderbuffers (1, &DepthBufferGLID); 
    glBindRenderbuffer (GL_RENDERBUFFER, DepthBufferGLID); 
    glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT32F, Dimensions.x, Dimensions.y); 
    glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, DepthBufferGLID); 

    glBindFramebuffer ( GL_READ_FRAMEBUFFER, OpenGLID); 
    glBindFramebuffer (GL_DRAW_FRAMEBUFFER, 0); 
    glBlitFramebuffer (In_LowerLeft.x, In_LowerLeft.y, In_UpperRight.x, In_UpperRight.y, 
        In_LowerLeft.x, In_LowerLeft.y, In_UpperRight.x, In_UpperRight.y, 
        GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, 
        GL_NEAREST); 

그리고 GLES2에서, 나는 동일한 기능을 수행하지만, 다른 열거와

하지만, 나중에는 더 glBlitFramebuffer 없다를, 그래서 그것을 표시 할 수 없습니다. glFramebufferTexture2D를 사용하여 renderbuffer 대신에 텍스처를 사용하여 동일한 작업을 수행 할 수 있다는 것을 알고 있지만 화면 크기의 쿼드를 그려서 표시해야합니다.

렌더링 버퍼에서 블리트하거나 읽을 수없는 경우 그 점은 무엇입니까? 어떻게 사용할 수 있습니까? 이 코드를 GLES2에 어떻게 적용 할 수 있습니까?

는 OpenGL 위키에 Renderbuffer Objects에 대한 문서에서 언급 한 바와 같이

답변

0

,

renderbuffer 객체를 사용하는 유일한 방법은 프레임 버퍼 개체에 첨부하는 것입니다. 해당 FBO를 컨텍스트에 바인딩하고 버퍼를 적절히 설정하면 픽셀 전송 작업을 사용하여 읽고 쓸 수 있습니다.

그래서, 당신은 읽기/그것 (예. glReadPixels/glDrawPixels)로/쓰기 픽셀 전송 작업을 사용할 수 있습니다. 버퍼에 직접 액세스 할 필요는 없지만 렌더링 할 때 필요하면 유용합니다. 예를 들어, 오프 스크린 타겟을 렌더링하는 데 사용되는 깊이 버퍼이지만 직접 샘플링되지는 않습니다.

코드를 이식하는 방법에 대한 질문은 glBlitFramebuffer을 OpenGL ES 3.0에서 사용할 수 있습니다. OpenGL 2.0을 목표로해야한다면 스크린 크기의 쿼드를 그리는 것이 합당한 해결책입니다. 가능하면 모든 데이터를 시스템 메모리에 다운로드해야하므로 매우 느릴 것이므로 glReadPixelsglDrawPixels을 사용하지 않는 것이 좋습니다.

관련 문제