diff --git a/engine/src/jogl/com/jme3/renderer/jogl/JoglRenderer.java b/engine/src/jogl/com/jme3/renderer/jogl/JoglRenderer.java index b66fa861e..55ebdb243 100644 --- a/engine/src/jogl/com/jme3/renderer/jogl/JoglRenderer.java +++ b/engine/src/jogl/com/jme3/renderer/jogl/JoglRenderer.java @@ -407,10 +407,10 @@ public class JoglRenderer implements Renderer { lastFb = null; GL gl = GLContext.getCurrentGL(); - gl.glGetIntegerv(GL2.GL_DRAW_BUFFER, intBuf16); - initialDrawBuf = intBuf16.get(0); - gl.glGetIntegerv(GL2.GL_READ_BUFFER, intBuf16); - initialReadBuf = intBuf16.get(0); + gl.glGetIntegerv(GL2.GL_DRAW_BUFFER, intBuf1); + initialDrawBuf = intBuf1.get(0); + gl.glGetIntegerv(GL2.GL_READ_BUFFER, intBuf1); + initialReadBuf = intBuf1.get(0); } public void resetGLObjects() { @@ -1687,11 +1687,24 @@ public class JoglRenderer implements Renderer { } public void readFrameBuffer(FrameBuffer fb, ByteBuffer byteBuf) { + GL gl = GLContext.getCurrentGL(); if (fb != null) { - return; + RenderBuffer rb = fb.getColorBuffer(); + if (rb == null) { + throw new IllegalArgumentException("Specified framebuffer" + + " does not have a colorbuffer"); + } + + setFrameBuffer(fb); + if (context.boundReadBuf != rb.getSlot()) { + gl.getGL2().glReadBuffer(GL.GL_COLOR_ATTACHMENT0 + rb.getSlot()); + context.boundReadBuf = rb.getSlot(); + } + } else { + setFrameBuffer(null); } - GL gl = GLContext.getCurrentGL(); - gl.glReadPixels(vpX, vpY, vpW, vpH, GL2GL3.GL_BGRA, GL.GL_UNSIGNED_BYTE, byteBuf); + + gl.glReadPixels(vpX, vpY, vpW, vpH, /*GL.GL_RGBA*/ GL.GL_BGRA, GL.GL_UNSIGNED_BYTE, byteBuf); } private void deleteRenderBuffer(FrameBuffer fb, RenderBuffer rb) {