Ich versuche das gerenderte Bild in einem PBO mit glReadPixels zu speichern und übertrage danach die Pixel in mein ByteBuffer Objekt mit glMapBuffer.glReadPixels schlägt beim Schreiben in PBO fehl
Aber nachdem update() abgeschlossen ist, enthält der Puffer nur die Dummy-Daten, die ich übergeben habe, wenn ich glBufferData (...) aufruft. Also gehe ich davon aus, dass glReadPixels die Daten nicht in das PBO laden kann. Ich bekomme den Fehler 1282 (INVALID_OPERATION) auch nach glReadPixels (...).
Wenn ich versuche, die Pixel direkt in den Puffer zu lesen, funktioniert es wie erwartet (obwohl der Fehler weiterhin auftritt). Aber aus Gründen der Performance möchte ich später glMapBuffer (...) zuerst und glReadPixels (...) danach aufrufen, damit ich die Datenverarbeitung ein wenig parallellieren kann.
public ModelObserver() {
buffer = BufferUtils.createByteBuffer(Display.getWidth() * Display.getHeight() * 4);
for (int i = 0; i < Display.getWidth() * Display.getHeight(); i++) {
buffer.put(new byte[] { 0, 127, 0, 0 });
}
buffer.flip();
pixelData = GL15.glGenBuffers();
glBindBuffer(GL_PIXEL_PACK_BUFFER, pixelData);
glBufferData(GL_PIXEL_PACK_BUFFER, buffer, GL_DYNAMIC_READ);
}
public void update() {
glReadBuffer(GL_FRONT);
glBindBuffer(GL_PIXEL_PACK_BUFFER, pixelData);
glReadPixels(0, 0, Display.getWidth(), Display.getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, 0);
System.out.println(glGetError());
glBindBuffer(GL_PIXEL_PACK_BUFFER, pixelData);
glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_WRITE, buffer);
glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
}