当映射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()映射的?
您能帮助理解映射缓冲区的概念吗?
答案 0 :(得分:2)
我不确定我理解这个问题。 Mapping a buffer表示您可以通过指针“直接”访问其内容。这与glBufferSubData
或glGetBufferSubData
相反。
并且,除非您使用really advanced version of OpenGL,否则在映射时不能以任何方式使用缓冲区。这包括通过PBO阅读进行阅读。