我试图异步地从框架缓冲区读取数据,但是glReadPixels()会生成一个INVALID_OPERATION错误。
我已经阅读了可能导致此错误的原因,但在代码中没有发现任何问题:
int PBOHandle = glGenBuffers(); // PBOHandle != 0
int Width = Display.getDisplayMode().getWidth(); // 800
int Height = Display.getDisplayMode().getHeight();// 600
glReadBuffer(GL_FRONT);
glBindBuffer(GL_PIXEL_PACK_BUFFER, PBOHandle);
glReadPixels(0, 0, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, 0);
// GL_INVALID_OPERATION right here
glBindBuffer(GL_PIXEL_PACK_BUFFER, PBOHandle);
ByteBuffer Buffer = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_WRITE, null);
/* stuff */
glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); 发布于 2014-03-28 19:46:14
您没有正确地创建真正的像素缓冲区对象。你所做的只是为其中一个创造了一个名字。您必须调用glBufferData()来创建实际的数据存储。使用NULL作为数据指针来创建一个统一的缓冲区。
https://stackoverflow.com/questions/22720029
复制相似问题