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



映射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);

由于缓冲区是用glMapBufferRange()映射的,所以在第二次glReadPixel调用中预期错误是否正确?

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

我不确定我是否理解这个问题。映射缓冲区意味着您可以通过指针"直接"访问它的内容。这与glBufferSubDataglGetBufferSubData相反。

而且,除非您使用的是OpenGL的高级版本,否则在映射缓冲区时不能以任何方式使用缓冲区。这包括通过PBO读取进行读取。

最新更新