0

映射 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 调用中预期错误是否正确?

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

4

1 回答 1

2

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

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

于 2013-08-29T11:49:44.717 回答