From 741bc48237fb1735bab09843ebf09feba200bd81 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Mon, 25 Jun 2012 06:41:57 +0200 Subject: Tests [Multisample, Offscreen, ..]: Add Snapshots and store them in current directory instead of tempdir, so they get archived (CI/jenkins). Multisample/TestGLReadBufferUtilTextureIOWrite01NEWT: Add offscreen test --- .../junit/jogl/caps/TestMultisampleES1AWT.java | 51 +++++++++---- .../junit/jogl/caps/TestMultisampleES1NEWT.java | 87 ++++++++++++++++++---- .../test/junit/jogl/demos/es2/RedSquareES2.java | 2 +- .../test/junit/jogl/offscreen/Surface2File.java | 25 +++++-- .../offscreen/TestOffscreen01GLPBufferNEWT.java | 14 +--- .../jogl/offscreen/TestOffscreen02BitmapNEWT.java | 13 +--- .../test/junit/jogl/offscreen/WindowUtilNEWT.java | 31 ++++---- .../TestGLReadBufferUtilTextureIOWrite01NEWT.java | 42 ++++++++--- .../TestGLReadBufferUtilTextureIOWrite02NEWT.java | 25 ++++--- 9 files changed, 195 insertions(+), 95 deletions(-) (limited to 'src/test') diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1AWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1AWT.java index 517d12578..4b0caf898 100755 --- a/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1AWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1AWT.java @@ -40,23 +40,28 @@ package com.jogamp.opengl.test.junit.jogl.caps; +import java.io.File; import java.lang.reflect.InvocationTargetException; import java.awt.BorderLayout; import java.awt.Frame; +import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLCapabilitiesChooser; +import javax.media.opengl.GLCapabilitiesImmutable; +import javax.media.opengl.GLEventListener; import javax.media.opengl.GLProfile; import javax.media.opengl.awt.GLCanvas; import com.jogamp.opengl.test.junit.util.MiscUtils; import com.jogamp.opengl.test.junit.util.UITestCase; +import com.jogamp.opengl.util.GLReadBufferUtil; import org.junit.Test; public class TestMultisampleES1AWT extends UITestCase { - static long durationPerTest = 250; // ms + static long durationPerTest = 60; // ms private GLCanvas canvas; public static void main(String[] args) { @@ -70,33 +75,54 @@ public class TestMultisampleES1AWT extends UITestCase { org.junit.runner.JUnitCore.main(tstname); } + protected void snapshot(GLAutoDrawable drawable, boolean alpha, boolean flip, String filename) { + GLReadBufferUtil screenshot = new GLReadBufferUtil(alpha, false); + if(screenshot.readPixels(drawable.getGL(), drawable, flip)) { + screenshot.write(new File(filename)); + } + } + + @Test + public void testOnscreenMultiSampleAA0() throws InterruptedException, InvocationTargetException { + testMultiSampleAAImpl(0); + } + @Test - public void testMultiSampleAA4() throws InterruptedException, InvocationTargetException { + public void testOnscreenMultiSampleAA4() throws InterruptedException, InvocationTargetException { testMultiSampleAAImpl(4); } @Test - public void testMultiSampleNone() throws InterruptedException, InvocationTargetException { - testMultiSampleAAImpl(0); + public void testOnscreenMultiSampleAA8() throws InterruptedException, InvocationTargetException { + testMultiSampleAAImpl(8); } - private void testMultiSampleAAImpl(int samples) throws InterruptedException, InvocationTargetException { + private void testMultiSampleAAImpl(int reqSamples) throws InterruptedException, InvocationTargetException { GLProfile glp = GLProfile.getMaxFixedFunc(true); GLCapabilities caps = new GLCapabilities(glp); GLCapabilitiesChooser chooser = new MultisampleChooser01(); - if(samples>0) { + if(reqSamples>0) { caps.setSampleBuffers(true); - caps.setNumSamples(samples); - // turns out we need to have alpha, - // otherwise no AA will be visible. - caps.setAlphaBits(1); + caps.setNumSamples(reqSamples); } canvas = new GLCanvas(caps, chooser, null, null); - canvas.addGLEventListener(new MultisampleDemoES1(samples>0?true:false)); + canvas.addGLEventListener(new MultisampleDemoES1(reqSamples>0?true:false)); + canvas.addGLEventListener(new GLEventListener() { + public void init(GLAutoDrawable drawable) {} + public void dispose(GLAutoDrawable drawable) {} + public void display(GLAutoDrawable drawable) { + final GLCapabilitiesImmutable caps = drawable.getChosenGLCapabilities(); + final String pfmt = caps.getAlphaBits() > 0 ? "rgba" : "rgb_"; + final String aaext = caps.getSampleExtension(); + final int samples = caps.getSampleBuffers() ? caps.getNumSamples() : 0 ; + snapshot(drawable, false, false, getSimpleTestName(".")+"-F_rgb_-I_"+pfmt+"-S"+samples+"-"+aaext+"-"+drawable.getGLProfile().getName()+".png"); + } + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { } + }); - final Frame frame = new Frame("Multi Samples "+samples); + final Frame frame = new Frame("Multi Samples "+reqSamples); frame.setLayout(new BorderLayout()); canvas.setSize(512, 512); frame.add(canvas, BorderLayout.CENTER); @@ -105,7 +131,6 @@ public class TestMultisampleES1AWT extends UITestCase { javax.swing.SwingUtilities.invokeAndWait(new Runnable() { public void run() { frame.setVisible(true); - frame.setLocation(0, 0); canvas.requestFocus(); canvas.display(); }}); diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1NEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1NEWT.java index cdfeb2bad..2e47b6841 100755 --- a/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1NEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1NEWT.java @@ -40,17 +40,24 @@ package com.jogamp.opengl.test.junit.jogl.caps; +import java.io.File; + +import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLCapabilitiesChooser; +import javax.media.opengl.GLCapabilitiesImmutable; +import javax.media.opengl.GLEventListener; import javax.media.opengl.GLProfile; import org.junit.Test; import com.jogamp.newt.opengl.GLWindow; import com.jogamp.opengl.test.junit.util.MiscUtils; +import com.jogamp.opengl.test.junit.util.UITestCase; +import com.jogamp.opengl.util.GLReadBufferUtil; -public class TestMultisampleES1NEWT { - static long durationPerTest = 500; // ms +public class TestMultisampleES1NEWT extends UITestCase { + static long durationPerTest = 60; // ms private GLWindow window; public static void main(String[] args) { @@ -64,36 +71,84 @@ public class TestMultisampleES1NEWT { org.junit.runner.JUnitCore.main(tstname); } + protected void snapshot(GLAutoDrawable drawable, boolean alpha, boolean flip, String filename) { + GLReadBufferUtil screenshot = new GLReadBufferUtil(alpha, false); + if(screenshot.readPixels(drawable.getGL(), drawable, flip)) { + screenshot.write(new File(filename)); + } + } + + @Test + public void testOnscreenMultiSampleAA0() throws InterruptedException { + testMultiSampleAAImpl(true, 0); + } + + @Test + public void testOnscreenMultiSampleAA2() throws InterruptedException { + testMultiSampleAAImpl(true, 2); + } + + @Test + public void testOnscreenMultiSampleAA4() throws InterruptedException { + testMultiSampleAAImpl(true, 4); + } + @Test - public void testMultiSampleAA4() throws InterruptedException { - testMultiSampleAAImpl(4); + public void testOnscreenMultiSampleAA8() throws InterruptedException { + testMultiSampleAAImpl(true, 8); } - // @Test - public void testMultiSampleNone() throws InterruptedException { - testMultiSampleAAImpl(0); + @Test + public void testOffscreenMultiSampleAA0() throws InterruptedException { + testMultiSampleAAImpl(false, 0); } - private void testMultiSampleAAImpl(int samples) throws InterruptedException { + @Test + public void testOffscreenMultiSampleAA2() throws InterruptedException { + testMultiSampleAAImpl(false, 2); + } + + @Test + public void testOffscreenMultiSampleAA4() throws InterruptedException { + testMultiSampleAAImpl(false, 4); + } + + @Test + public void testOffsreenMultiSampleAA8() throws InterruptedException { + testMultiSampleAAImpl(false, 8); + } + + private void testMultiSampleAAImpl(boolean onscreen, int reqSamples) throws InterruptedException { GLProfile glp = GLProfile.getMaxFixedFunc(true); GLCapabilities caps = new GLCapabilities(glp); GLCapabilitiesChooser chooser = new MultisampleChooser01(); - if(samples>0) { + if(!onscreen) { + caps.setOnscreen(onscreen); + caps.setPBuffer(true); + } + if(reqSamples>0) { caps.setSampleBuffers(true); - caps.setNumSamples(4); + caps.setNumSamples(reqSamples); } - // turns out we need to have alpha, - // otherwise no AA will be visible. - // This is done implicit now .. - // caps.setAlphaBits(1); window = GLWindow.create(caps); window.setCapabilitiesChooser(chooser); - window.addGLEventListener(new MultisampleDemoES1(samples>0?true:false)); + window.addGLEventListener(new MultisampleDemoES1(reqSamples>0?true:false)); + window.addGLEventListener(new GLEventListener() { + public void init(GLAutoDrawable drawable) {} + public void dispose(GLAutoDrawable drawable) {} + public void display(GLAutoDrawable drawable) { + final GLCapabilitiesImmutable caps = drawable.getChosenGLCapabilities(); + final String pfmt = caps.getAlphaBits() > 0 ? "rgba" : "rgb_"; + final String aaext = caps.getSampleExtension(); + final int samples = caps.getSampleBuffers() ? caps.getNumSamples() : 0 ; + snapshot(drawable, false, false, getSimpleTestName(".")+"-F_rgb_-I_"+pfmt+"-S"+samples+"-"+aaext+"-"+drawable.getGLProfile().getName()+".png"); + } + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { } + }); window.setSize(512, 512); window.setVisible(true); - window.setPosition(0, 0); window.requestFocus(); Thread.sleep(durationPerTest); diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RedSquareES2.java b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RedSquareES2.java index 620267125..eceaa0637 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RedSquareES2.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RedSquareES2.java @@ -118,7 +118,7 @@ public class RedSquareES2 implements GLEventListener { colors.enableBuffer(gl, false); // OpenGL Render Settings - gl.glClearColor(0, 0, 0, 1); + gl.glClearColor(0, 0, 0, 0); gl.glEnable(GL2ES2.GL_DEPTH_TEST); st.useProgram(gl, false); diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/Surface2File.java b/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/Surface2File.java index d1297e034..b046df6af 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/Surface2File.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/Surface2File.java @@ -34,14 +34,24 @@ import com.jogamp.opengl.util.GLReadBufferUtil; import java.io.File; import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; import javax.media.nativewindow.*; public class Surface2File implements SurfaceUpdatedListener { - GLReadBufferUtil readBufferUtil = new GLReadBufferUtil(false, false); + final String filename; + final boolean alpha; + final GLReadBufferUtil readBufferUtil; int shotNum = 0; + public Surface2File(String filename, boolean alpha) { + this.filename = filename; + this.alpha = alpha; + this.readBufferUtil = new GLReadBufferUtil(alpha, false); + } + public void dispose(GL gl) { readBufferUtil.dispose(gl); } @@ -57,7 +67,7 @@ public class Surface2File implements SurfaceUpdatedListener { if(readBufferUtil.readPixels(gl, drawable, false)) { gl.glFinish(); try { - surface2File("shot"); + surface2File(); } catch (IOException ex) { throw new RuntimeException("can not write survace to file", ex); } @@ -66,14 +76,17 @@ public class Surface2File implements SurfaceUpdatedListener { } } - public void surface2File(String basename) throws IOException { + public void surface2File() throws IOException { if (!readBufferUtil.isValid()) { return; } - - File file = File.createTempFile(basename + shotNum + "-", ".tga"); + final StringWriter sw = new StringWriter(); + { + final String pfmt = alpha ? "rgba" : "rgb_" ; + new PrintWriter(sw).printf("%s-I_%s-%04d.png", filename, pfmt, shotNum); + } + File file = new File(sw.toString()); readBufferUtil.write(file); - System.err.println("Wrote: " + file.getAbsolutePath() + ", ..."); shotNum++; } } diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen01GLPBufferNEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen01GLPBufferNEWT.java index 3f1fd144f..2ed471436 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen01GLPBufferNEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen01GLPBufferNEWT.java @@ -32,8 +32,6 @@ import com.jogamp.newt.Display; import com.jogamp.newt.NewtFactory; import com.jogamp.newt.Screen; import com.jogamp.newt.Window; -import com.jogamp.newt.event.MouseListener; -import com.jogamp.newt.event.WindowListener; import com.jogamp.newt.opengl.GLWindow; import org.junit.AfterClass; import org.junit.Assert; @@ -42,7 +40,6 @@ import org.junit.BeforeClass; import org.junit.Test; import javax.media.opengl.*; -import javax.media.nativewindow.*; import com.jogamp.opengl.test.junit.util.UITestCase; import com.jogamp.opengl.test.junit.jogl.demos.es2.RedSquareES2; @@ -72,6 +69,7 @@ public class TestOffscreen01GLPBufferNEWT extends UITestCase { public void init() { capsDefault = new GLCapabilities(glpDefault); Assert.assertNotNull(capsDefault); + capsDefault.setAlphaBits(1); // req. alpha channel } private void do01OffscreenWindowPBuffer(GLCapabilities caps) { @@ -280,14 +278,8 @@ public class TestOffscreen01GLPBufferNEWT extends UITestCase { Assert.assertNotNull(glWindow); glWindow.setVisible(true); - WindowListener wl=null; - MouseListener ml=null; - SurfaceUpdatedListener ul=null; - - GLEventListener demo = new RedSquareES2(); - Assert.assertNotNull(demo); - - WindowUtilNEWT.run(glWindow, demo, null, wl, ml, ul, 2, true /*snapshot*/, false /*debug*/); + WindowUtilNEWT.run(getSimpleTestName("."), glWindow, new RedSquareES2(), null, null, null, null, + 2 /* frames */, true /*snapshot*/, false /*debug*/); if(null!=glWindow) { glWindow.destroy(); diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen02BitmapNEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen02BitmapNEWT.java index 7898ddad9..0701d883c 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen02BitmapNEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen02BitmapNEWT.java @@ -33,14 +33,11 @@ import com.jogamp.newt.Display; import com.jogamp.newt.NewtFactory; import com.jogamp.newt.Screen; import com.jogamp.newt.Window; -import com.jogamp.newt.event.MouseListener; -import com.jogamp.newt.event.WindowListener; import com.jogamp.newt.opengl.GLWindow; import org.junit.Assert; import org.junit.Test; import javax.media.opengl.*; -import javax.media.nativewindow.*; import com.jogamp.opengl.test.junit.util.UITestCase; import com.jogamp.opengl.test.junit.jogl.demos.es1.RedSquareES1; @@ -119,14 +116,8 @@ public class TestOffscreen02BitmapNEWT extends UITestCase { Assert.assertNotNull(glWindow); glWindow.setVisible(true); - WindowListener wl=null; - MouseListener ml=null; - SurfaceUpdatedListener ul=null; - - GLEventListener demo = new RedSquareES1(); - Assert.assertNotNull(demo); - - WindowUtilNEWT.run(glWindow, demo, null, wl, ml, ul, 2, true /*snapshot*/, false /*debug*/); + WindowUtilNEWT.run(getSimpleTestName("."), glWindow, new RedSquareES1(), null, null, null, null, + 2 /* frames */, true /*snapshot*/, false /*debug*/); if(null!=glWindow) { glWindow.destroy(); diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/WindowUtilNEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/WindowUtilNEWT.java index 1d1ee1e0c..efca752a1 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/WindowUtilNEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/WindowUtilNEWT.java @@ -60,8 +60,8 @@ public class WindowUtilNEWT { } } - public static void run(GLWindow windowOffScreen, GLEventListener demo, - GLWindow windowOnScreen, WindowListener wl, MouseListener ml, + public static void run(String testName, GLWindow windowOffScreen, GLEventListener demo, + GLWindow windowOnScreenBlit, WindowListener wl, MouseListener ml, SurfaceUpdatedListener ul, int frames, boolean snapshot, boolean debug) { Assert.assertNotNull(windowOffScreen); Assert.assertNotNull(demo); @@ -69,35 +69,34 @@ public class WindowUtilNEWT { setDemoFields(demo, windowOffScreen, windowOffScreen, debug); windowOffScreen.addGLEventListener(demo); - if ( null != windowOnScreen ) { + if ( null != windowOnScreenBlit ) { if(null!=wl) { - windowOnScreen.addWindowListener(wl); + windowOnScreenBlit.addWindowListener(wl); } if(null!=ml) { - windowOnScreen.addMouseListener(ml); + windowOnScreenBlit.addMouseListener(ml); } - windowOnScreen.setVisible(true); + windowOnScreenBlit.setVisible(true); } GLDrawable readDrawable = windowOffScreen.getContext().getGLDrawable() ; - - if ( null == windowOnScreen ) { - if(snapshot) { - Surface2File s2f = new Surface2File(); - windowOffScreen.addSurfaceUpdatedListener(s2f); - } - } else { + if ( null != windowOnScreenBlit ) { ReadBuffer2Screen readDemo = new ReadBuffer2Screen( readDrawable ) ; - windowOnScreen.addGLEventListener(readDemo); + windowOnScreenBlit.addGLEventListener(readDemo); + } + if(snapshot) { + final boolean alpha = windowOffScreen.getChosenGLCapabilities().getAlphaBits()>0; + Surface2File s2f = new Surface2File(testName, alpha); + windowOffScreen.addSurfaceUpdatedListener(s2f); } if(null!=ul) { windowOffScreen.addSurfaceUpdatedListener(ul); } if(debug) { - System.err.println("+++++++++++++++++++++++++++"); + System.err.println("+++++++++++++++++++++++++++ "+testName); System.err.println(windowOffScreen); - System.err.println("+++++++++++++++++++++++++++"); + System.err.println("+++++++++++++++++++++++++++ "+testName); } while ( windowOffScreen.getTotalFPSFrames() < frames) { diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/util/texture/TestGLReadBufferUtilTextureIOWrite01NEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/util/texture/TestGLReadBufferUtilTextureIOWrite01NEWT.java index 687465a5d..b5b12035d 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/util/texture/TestGLReadBufferUtilTextureIOWrite01NEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/util/texture/TestGLReadBufferUtilTextureIOWrite01NEWT.java @@ -40,6 +40,7 @@ import com.jogamp.opengl.util.GLReadBufferUtil; import com.jogamp.opengl.test.junit.util.UITestCase; import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2; +import com.jogamp.opengl.test.junit.jogl.offscreen.WindowUtilNEWT; import org.junit.Assert; import org.junit.BeforeClass; @@ -56,6 +57,7 @@ public class TestGLReadBufferUtilTextureIOWrite01NEWT extends UITestCase { Assert.assertNotNull(glp); caps = new GLCapabilities(glp); Assert.assertNotNull(caps); + caps.setAlphaBits(1); // req. alpha channel width = 256; height = 256; } @@ -68,7 +70,7 @@ public class TestGLReadBufferUtilTextureIOWrite01NEWT extends UITestCase { } @Test - public void testWritePNG_TGA_PAM() throws InterruptedException { + public void testOnscreenWritePNG_TGA_PAM() throws InterruptedException { GLWindow glWindow = GLWindow.create(caps); Assert.assertNotNull(glWindow); glWindow.setTitle("Shared Gears NEWT Test"); @@ -78,16 +80,38 @@ public class TestGLReadBufferUtilTextureIOWrite01NEWT extends UITestCase { public void init(GLAutoDrawable drawable) {} public void dispose(GLAutoDrawable drawable) {} public void display(GLAutoDrawable drawable) { + final String pfmt = drawable.getChosenGLCapabilities().getAlphaBits() > 0 ? "rgba" : "rgb_"; // snapshot(drawable, false, true, getSimpleTestName(".")+"-rgb_-"+drawable.getGLProfile().getName()+".ppm"); - snapshot(drawable, true, false, getSimpleTestName(".")+"-rgba-"+drawable.getGLProfile().getName()+".png"); - snapshot(drawable, true, false, getSimpleTestName(".")+"-rgba-"+drawable.getGLProfile().getName()+".tga"); - snapshot(drawable, true, true, getSimpleTestName(".")+"-rgba-"+drawable.getGLProfile().getName()+".pam"); - snapshot(drawable, false, false, getSimpleTestName(".")+"-rgb_-"+drawable.getGLProfile().getName()+".png"); - snapshot(drawable, false, false, getSimpleTestName(".")+"-rgb_-"+drawable.getGLProfile().getName()+".tga"); - snapshot(drawable, false, true, getSimpleTestName(".")+"-rgb_-"+drawable.getGLProfile().getName()+".pam"); + snapshot(drawable, true, false, getSimpleTestName(".")+"-F_rgba-I_"+pfmt+"-"+drawable.getGLProfile().getName()+".png"); + snapshot(drawable, true, false, getSimpleTestName(".")+"-F_rgba-I_"+pfmt+"-"+drawable.getGLProfile().getName()+".tga"); + snapshot(drawable, true, true, getSimpleTestName(".")+"-F_rgba-I_"+pfmt+"-"+drawable.getGLProfile().getName()+".pam"); + snapshot(drawable, false, false, getSimpleTestName(".")+"-F_rgb_-I_"+pfmt+"-"+drawable.getGLProfile().getName()+".png"); + snapshot(drawable, false, false, getSimpleTestName(".")+"-F_rgb_-I_"+pfmt+"-"+drawable.getGLProfile().getName()+".tga"); + snapshot(drawable, false, true, getSimpleTestName(".")+"-F_rgb_-I_"+pfmt+"-"+drawable.getGLProfile().getName()+".pam"); } - public void reshape(GLAutoDrawable drawable, int x, int y, - int width, int height) { } + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { } + }); + glWindow.setVisible(true); + Thread.sleep(60); + glWindow.destroy(); + } + + @Test + public void testOffscreenWritePNG() throws InterruptedException { + final GLCapabilities caps2 = WindowUtilNEWT.fixCaps(caps, false, true, false); + GLWindow glWindow = GLWindow.create(caps2); + Assert.assertNotNull(glWindow); + glWindow.setSize(width, height); + glWindow.addGLEventListener(new GearsES2(1)); + glWindow.addGLEventListener(new GLEventListener() { + public void init(GLAutoDrawable drawable) {} + public void dispose(GLAutoDrawable drawable) {} + public void display(GLAutoDrawable drawable) { + final String pfmt = drawable.getChosenGLCapabilities().getAlphaBits() > 0 ? "rgba" : "rgb_"; + snapshot(drawable, true, false, getSimpleTestName(".")+"-F_rgba-I_"+pfmt+"-"+drawable.getGLProfile().getName()+".png"); + snapshot(drawable, false, false, getSimpleTestName(".")+"-F_rgb_-I_"+pfmt+"-"+drawable.getGLProfile().getName()+".png"); + } + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { } }); glWindow.setVisible(true); Thread.sleep(60); diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/util/texture/TestGLReadBufferUtilTextureIOWrite02NEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/util/texture/TestGLReadBufferUtilTextureIOWrite02NEWT.java index 6bb7f3b73..25a773c6a 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/util/texture/TestGLReadBufferUtilTextureIOWrite02NEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/util/texture/TestGLReadBufferUtilTextureIOWrite02NEWT.java @@ -58,6 +58,7 @@ public class TestGLReadBufferUtilTextureIOWrite02NEWT extends UITestCase { Assert.assertNotNull(glp); caps = new GLCapabilities(glp); Assert.assertNotNull(caps); + caps.setAlphaBits(1); // req. alpha channel width = 256; height = 256; } @@ -81,19 +82,19 @@ public class TestGLReadBufferUtilTextureIOWrite02NEWT extends UITestCase { public void init(GLAutoDrawable drawable) {} public void dispose(GLAutoDrawable drawable) {} public void display(GLAutoDrawable drawable) { - StringWriter filename = new StringWriter(); + final StringWriter filename = new StringWriter(); { - PrintWriter pw = new PrintWriter(filename); - pw.printf("%s-rgba-%s-%03dx%03d-n%03d.tga", - getSimpleTestName("."), drawable.getGLProfile().getName(), + final PrintWriter pw = new PrintWriter(filename); + final String pfmt = drawable.getChosenGLCapabilities().getAlphaBits() > 0 ? "rgba" : "rgb_"; + pw.printf("%s-F_rgba-I_%s-%s-%03dx%03d-n%03d.tga", + getSimpleTestName("."), pfmt, drawable.getGLProfile().getName(), drawable.getWidth(), drawable.getHeight(), i++); } if(screenshot.readPixels(drawable.getGL(), drawable, false)) { screenshot.write(new File(filename.toString())); } } - public void reshape(GLAutoDrawable drawable, int x, int y, - int width, int height) { } + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { } }); glWindow.setVisible(true); Thread.sleep(60); @@ -117,19 +118,19 @@ public class TestGLReadBufferUtilTextureIOWrite02NEWT extends UITestCase { public void init(GLAutoDrawable drawable) {} public void dispose(GLAutoDrawable drawable) {} public void display(GLAutoDrawable drawable) { - StringWriter filename = new StringWriter(); + final StringWriter filename = new StringWriter(); { - PrintWriter pw = new PrintWriter(filename); - pw.printf("%s-rgba-%s-%03dx%03d-n%03d.png", - getSimpleTestName("."), drawable.getGLProfile().getName(), + final PrintWriter pw = new PrintWriter(filename); + final String pfmt = drawable.getChosenGLCapabilities().getAlphaBits() > 0 ? "rgba" : "rgb_"; + pw.printf("%s-F_rgba-I_%s-%s-%03dx%03d-n%03d.png", + getSimpleTestName("."), pfmt, drawable.getGLProfile().getName(), drawable.getWidth(), drawable.getHeight(), i++); } if(screenshot.readPixels(drawable.getGL(), drawable, false)) { screenshot.write(new File(filename.toString())); } } - public void reshape(GLAutoDrawable drawable, int x, int y, - int width, int height) { } + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { } }); glWindow.setVisible(true); Thread.sleep(60); -- cgit v1.2.3