aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2013-03-09 03:41:16 +0100
committerSven Gothel <[email protected]>2013-03-09 03:41:16 +0100
commitb29f221c903aefdf99af8e8a8544b2223036454f (patch)
tree5ef6db64c72ffdc8f852e4d79c6333f9075d350a /src
parentd143475e995e473c142fd34be2af6521246f014a (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.java34
-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());
}
}