缓冲区映射对PBO意味着什么?

时间:2013-08-29 11:20:24

标签: opengl opengl-3

当映射PBO时,我需要测试glReadPixels的INVALID_OPERATION错误。但是没有得到缓冲区映射意味着什么。 遵循代码部分:

    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调用上遇到错误是否正确,因为缓冲区是使用glMapBufferRange()映射的?

您能帮助理解映射缓冲区的概念吗?

1 个答案:

答案 0 :(得分:2)

我不确定我理解这个问题。 Mapping a buffer表示您可以通过指针“直接”访问其内容。这与glBufferSubDataglGetBufferSubData相反。

并且,除非您使用really advanced version of OpenGL,否则在映射时不能以任何方式使用缓冲区。这包括通过PBO阅读进行阅读。