2013-08-29 3 views
0

PBO가 매핑 될 때 glReadPixels에 대한 INVALID_OPERATION 오류를 테스트해야합니다. 그러나 버퍼 매핑 된 것을 얻지 못하는 것은 정확히 의미합니다. 코드 부분 따라 : 버퍼가 glMapBufferRange 매핑 될 때버퍼 매핑은 PBO의 의미는 무엇입니까?

glGenBuffers(1, iBufferObj); 

    // Bind the buffer 
    glBindBuffer(GL_PIXEL_PACK_BUFFER, *iBufferObj); 
    glBufferData(GL_PIXEL_PACK_BUFFER, iSize, 0, GL_STREAM_READ); // iSize is my framebuffer size 
    glReadPixels(0, 0, iSurfaceWidth, iSurfaceHeight, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
    ptr = (GLuint*)glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, iSize, GL_MAP_READ_BIT); 
    glReadPixels(0, 0, iSurfaceWidth, iSurfaceHeight, GL_RGBA, GL_UNSIGNED_BYTE, cBuff); // cBuff client buffer container 
    glUnmapBuffer(GL_PIXEL_PACK_BUFFER); 

는, 제 glReadPixel 호에 오류가 기대 맞()?

매핑 된 버퍼의 개념을 이해하는 데 도움이 될까요?

답변

2

나는이 질문을 이해하고 있는지 잘 모르겠다. Mapping a buffer은 포인터를 통해 "직접"내용에 액세스 할 수 있음을 의미합니다. 이는 glBufferSubData 또는 glGetBufferSubData과 반대입니다.

really advanced version of OpenGL을 사용하지 않는 한 버퍼가 매핑되는 동안 버퍼를 사용할 수 없습니다. 여기에는 PBO 읽기를 통해 읽는 것도 포함됩니다.

+1

그래서 우리가 glMapBufferRange()를 사용할 때, 그것은 버퍼가 매핑된다는 것을 의미합니다. "당신은 어떤 식 으로든 버퍼를 사용할 수 없습니다."라는 말은 glMapBufferRange() 후에 glReadPixels를 호출하면 opengles 3 사양에 따라 일부 오류 (GL_INVALID_OPERATION)가 생성되어야한다는 것입니다. "0이 아닌 버퍼 객체 이름이 있으면 GL_INVALID_OPERATION이 생성됩니다. GL_PIXEL_PACK_BUFFER 대상에 바인딩되고 버퍼 개체의 데이터 저장소가 현재 매핑됩니다. " – user1896853