diff options
author | Sven Gothel <[email protected]> | 2013-03-09 03:41:16 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-03-09 03:41:16 +0100 |
commit | b29f221c903aefdf99af8e8a8544b2223036454f (patch) | |
tree | 5ef6db64c72ffdc8f852e4d79c6333f9075d350a /src | |
parent | d143475e995e473c142fd34be2af6521246f014a (diff) |
Fix buggy unit test for Bug 694: The unpack alignment has to be considered!
Diffstat (limited to 'src')
-rw-r--r-- | src/jogl/classes/com/jogamp/opengl/util/GLPixelStorageModes.java | 34 | ||||
-rw-r--r-- | src/test/com/jogamp/opengl/test/junit/jogl/glu/TestBug694ScaleImageUnpackBufferSizeAWT.java (renamed from src/test/com/jogamp/opengl/test/junit/jogl/glu/TestBug694AWT.java) | 58 |
2 files changed, 74 insertions, 18 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/GLPixelStorageModes.java b/src/jogl/classes/com/jogamp/opengl/util/GLPixelStorageModes.java index 05eb67269..fab80b109 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/GLPixelStorageModes.java +++ b/src/jogl/classes/com/jogamp/opengl/util/GLPixelStorageModes.java @@ -43,32 +43,56 @@ public class GLPixelStorageModes { private int[] savedAlignment = new int[2]; private boolean saved = false; + /** Create instance w/o {@link #save(GL)} */ + public GLPixelStorageModes() {} + + /** Create instance w/ {@link #save(GL)} */ + public GLPixelStorageModes(GL gl) { save(gl); } + /** - * Sets the {@link GL2ES2.GL_PACK_ALIGNMENT}. Saves the pixel storage modes if not saved yet. + * Sets the {@link GL2ES2.GL_PACK_ALIGNMENT}. + * <p> + * Saves the pixel storage modes if not saved yet. + * </p> */ public final void setPackAlignment(GL gl, int packAlignment) { - if(!saved) { save(gl); } + save(gl); gl.glPixelStorei(GL2ES2.GL_PACK_ALIGNMENT, packAlignment); } /** - * Sets the {@link GL2ES2.GL_UNPACK_ALIGNMENT}. Saves the pixel storage modes if not saved yet. + * Sets the {@link GL2ES2.GL_UNPACK_ALIGNMENT}. + * <p> + * Saves the pixel storage modes if not saved yet. + * </p> */ public final void setUnpackAlignment(GL gl, int unpackAlignment) { - if(!saved) { save(gl); } + save(gl); gl.glPixelStorei(GL2ES2.GL_UNPACK_ALIGNMENT, unpackAlignment); } /** * Sets the {@link GL2ES2.GL_PACK_ALIGNMENT} and {@link GL2ES2.GL_UNPACK_ALIGNMENT}. + * <p> * Saves the pixel storage modes if not saved yet. + * </p> */ public final void setAlignment(GL gl, int packAlignment, int unpackAlignment) { setPackAlignment(gl, packAlignment); setUnpackAlignment(gl, unpackAlignment); } - private final void save(GL gl) { + /** + * Save the pixel storage mode, if not saved yet. + * <p> + * Restore via {@link #restore(GL)} + * </p> + */ + public final void save(GL gl) { + if(saved) { + return; + } + if(gl.isGL2GL3()) { if(gl.isGL2()) { gl.getGL2().glPushClientAttrib(GL2.GL_CLIENT_PIXEL_STORE_BIT); diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/glu/TestBug694AWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/glu/TestBug694ScaleImageUnpackBufferSizeAWT.java index e6eabd3d8..d3bcce116 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/glu/TestBug694AWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/glu/TestBug694ScaleImageUnpackBufferSizeAWT.java @@ -44,12 +44,14 @@ import org.junit.Test; import com.jogamp.common.nio.Buffers; import com.jogamp.opengl.test.junit.util.UITestCase; +import com.jogamp.opengl.util.GLBuffers; +import com.jogamp.opengl.util.GLPixelStorageModes; /** - * - * @author Julien Gouesse + * Demonstrates how to use {@link GLBuffers#sizeof(GL, int[], int, int, int, int, int, boolean)} + * to determine the unpack buffer size for {@link GLU#gluScaleImage(int, int, int, int, java.nio.Buffer, int, int, int, java.nio.Buffer)}. */ -public class TestBug694AWT extends UITestCase implements GLEventListener { +public class TestBug694ScaleImageUnpackBufferSizeAWT extends UITestCase implements GLEventListener { /* @Override */ public void init(GLAutoDrawable drawable) { @@ -57,21 +59,51 @@ public class TestBug694AWT extends UITestCase implements GLEventListener { /* @Override */ public void display(GLAutoDrawable drawable) { - int widthin = 213; - int heightin = 213; + if( !testDone ) { + testDone = true; + + final GL gl = drawable.getGL(); + GLU glu = GLU.createGLU(gl); + testGLUScaleImage(gl, glu, 0); // default 4 + testGLUScaleImage(gl, glu, 1); + testGLUScaleImage(gl, glu, 4); + testGLUScaleImage(gl, glu, 8); + glu.destroy(); + } + } + + boolean testDone = false; + + private void testGLUScaleImage(GL gl, GLU glu, int unpackAlignment) { + final GLPixelStorageModes psm = new GLPixelStorageModes(gl); + if(0 < unpackAlignment) { + psm.setUnpackAlignment(gl, unpackAlignment); + } + + final int widthin = 213; + final int heightin = 213; - int widthout = 256; - int heightout = 256; + final int widthout = 256; + final int heightout = 256; - int textureInLength = 45369; - int textureOutLength = 66560; + final int glFormat = GL.GL_LUMINANCE; + final int glType = GL.GL_UNSIGNED_BYTE; + final int tmp[] = new int[1]; + + final int unpackSizeInLen = GLBuffers.sizeof(gl, tmp, glFormat, glType, widthin, heightin, 1, false); + final int unpackSizeOutLen = GLBuffers.sizeof(gl, tmp, glFormat, glType, widthout, heightout, 1, false); + + System.err.println("Unpack-Alignment "+unpackAlignment+": in-size "+unpackSizeInLen); + System.err.println("Unpack-Alignment "+unpackAlignment+": out-size "+unpackSizeOutLen); + + ByteBuffer bufferIn = Buffers.newDirectByteBuffer(unpackSizeInLen); + ByteBuffer bufferOut = Buffers.newDirectByteBuffer(unpackSizeOutLen); - ByteBuffer bufferIn = Buffers.newDirectByteBuffer(textureInLength); - ByteBuffer bufferOut = Buffers.newDirectByteBuffer(textureOutLength); - GLU glu = GLU.createGLU(drawable.getGL()); glu.gluScaleImage( GL.GL_LUMINANCE, widthin, heightin, GL.GL_UNSIGNED_BYTE, bufferIn, widthout, heightout, GL.GL_UNSIGNED_BYTE, bufferOut ); + + psm.restore(gl); } /* @Override */ @@ -123,6 +155,6 @@ public class TestBug694AWT extends UITestCase implements GLEventListener { } public static void main(String args[]) { - org.junit.runner.JUnitCore.main(TestBug694AWT.class.getName()); + org.junit.runner.JUnitCore.main(TestBug694ScaleImageUnpackBufferSizeAWT.class.getName()); } } |