2014-03-28 158 views
1

我试图读取framebuffer异步但glReadPixels()生成一个INVALID_OPERATION错误。LWJGL使用PBO读取像素失败

我读过可能导致这个错误,但我没有找到我的代码中的任何问题:

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

回答

1

你没有正确地创建一个真正的像素缓冲区对象。你所做的只是创建一个名为的名字。您必须致电glBufferData()才能创建实际的数据存储。使用NULL作为数据指针来创建单位化缓冲区。