diff options
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl/util/TileRenderer.java')
-rw-r--r-- | src/jogl/classes/com/jogamp/opengl/util/TileRenderer.java | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/TileRenderer.java b/src/jogl/classes/com/jogamp/opengl/util/TileRenderer.java index 695e2d93d..46a1e2452 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/TileRenderer.java +++ b/src/jogl/classes/com/jogamp/opengl/util/TileRenderer.java @@ -37,7 +37,9 @@ package com.jogamp.opengl.util; import javax.media.nativewindow.util.Dimension; +import javax.media.opengl.GL; import javax.media.opengl.GL2ES3; +import javax.media.opengl.GLException; import com.jogamp.opengl.util.GLPixelBuffer.GLPixelAttributes; @@ -248,10 +250,11 @@ public class TileRenderer extends TileRendererBase { } @Override - public final void beginTile( GL2ES3 gl ) throws IllegalStateException { + public final void beginTile( GL gl ) throws IllegalStateException, GLException { if( 0 >= imageSize.getWidth() || 0 >= imageSize.getHeight() ) { throw new IllegalStateException("Image size has not been set"); } + validateGL(gl); if (currentTile <= 0) { setup(); } @@ -311,19 +314,28 @@ public class TileRenderer extends TileRendererBase { } @Override - public void endTile( GL2ES3 gl ) throws IllegalStateException { + public void endTile( GL gl ) throws IllegalStateException, GLException { if( !beginCalled ) { throw new IllegalStateException("beginTile(..) has not been called"); } + validateGL(gl); // be sure OpenGL rendering is finished gl.glFlush(); // save current glPixelStore values psm.save(gl); - + psm.setPackAlignment(gl, 1); + final GL2ES3 gl2es3; + if( gl.isGL2ES3() ) { + gl2es3 = gl.getGL2ES3(); + gl2es3.glReadBuffer(gl2es3.getDefaultReadBuffer()); + } else { + gl2es3 = null; + } + final int tmp[] = new int[1]; - + if( tileBuffer != null ) { final GLPixelAttributes pixelAttribs = tileBuffer.pixelAttributes; final int srcX = tileBorder; @@ -351,8 +363,7 @@ public class TileRenderer extends TileRendererBase { /* setup pixel store for glReadPixels */ final int rowLength = imageSize.getWidth(); - psm.setPackRowLength(gl, rowLength); - psm.setPackAlignment(gl, 1); + psm.setPackRowLength(gl2es3, rowLength); /* read the tile into the final image */ final int readPixelSize = GLBuffers.sizeof(gl, tmp, pixelAttribs.bytesPerPixel, srcWidth, srcHeight, 1, true); |