From 5a5c2bc7a113906453e0de6f0403f394acdb9a4f Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sat, 18 Aug 2012 00:45:13 +0200 Subject: Fix GLCanvas's JAWTWindow reference ; Add ES2 test in TestAWT01GLn ; Ubuntu 12.04/Pandaboard(Omap4, PowerVR SGX 540) 103/108 tests passed (before freeze) of 124 total Fix GLCanvas's JAWTWindow reference - drawable.getNativeSurface() may not be a JAWTWindow due to our EGL WrappedSurface. Hence store the created JAWTWindow reference locally. Add ES2 test in TestAWT01GLn - test EGL/ES2 w/ AWT GLCanvas Ubuntu 12.04/Pandaboard(Omap4, PowerVR SGX 540): 103/108 tests passed (before freeze) of 124 total - machine freezes around test 108 .. - new passed unit test high for ES2 incl. AWT tests --- .../classes/javax/media/opengl/awt/GLCanvas.java | 11 ++-- .../opengl/test/junit/jogl/awt/TestAWT01GLn.java | 60 +++++++++++----------- 2 files changed, 35 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java b/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java index 03fd78ac7..033591fe3 100644 --- a/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java +++ b/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java @@ -146,6 +146,7 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing private final GLDrawableHelper helper = new GLDrawableHelper(); private AWTGraphicsConfiguration awtConfig; private volatile GLDrawable drawable; // volatile: avoid locking for read-only access + private volatile JAWTWindow jawtWindow; // the JAWTWindow presentation of this AWT Canvas, bound to the 'drawable' lifecycle private GLContextImpl context; private volatile boolean sendReshape = false; // volatile: maybe written by EDT w/o locking @@ -268,9 +269,9 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing @Override public final boolean isOffscreenLayerSurfaceEnabled() { - final GLDrawable _drawable = drawable; - if(null != _drawable) { - return ((JAWTWindow)_drawable.getNativeSurface()).isOffscreenLayerSurfaceEnabled(); + final JAWTWindow _jawtWindow = jawtWindow; + if(null != _jawtWindow) { + return _jawtWindow.isOffscreenLayerSurfaceEnabled(); } return false; } @@ -539,7 +540,7 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing private void createDrawableAndContext() { // no lock required, since this resource ain't available yet - final JAWTWindow jawtWindow = (JAWTWindow) NativeWindowFactory.getNativeWindow(this, awtConfig); + jawtWindow = (JAWTWindow) NativeWindowFactory.getNativeWindow(this, awtConfig); jawtWindow.setShallUseOffscreenLayer(shallUseOffscreenLayer); jawtWindow.lockSurface(); try { @@ -811,11 +812,11 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing public void run() { context=null; if(null!=drawable) { - final JAWTWindow jawtWindow = (JAWTWindow)drawable.getNativeSurface(); drawable.setRealized(false); drawable=null; if(null!=jawtWindow) { jawtWindow.destroy(); + jawtWindow=null; } } diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestAWT01GLn.java b/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestAWT01GLn.java index 64a1a0138..e1048c2f8 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestAWT01GLn.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestAWT01GLn.java @@ -40,49 +40,23 @@ import java.awt.Frame; import org.junit.Assert; import org.junit.Assume; -import org.junit.Before; import org.junit.BeforeClass; -import org.junit.After; import org.junit.Test; public class TestAWT01GLn extends UITestCase { - Frame frame=null; - GLCanvas glCanvas=null; - @BeforeClass public static void startup() { System.out.println("GLProfile "+GLProfile.glAvailabilityToString()); } - @Before - public void init() { - frame = new Frame("Texture Test"); - Assert.assertNotNull(frame); - } - - @After - public void release() { - Assert.assertNotNull(frame); - Assert.assertNotNull(glCanvas); - try { - javax.swing.SwingUtilities.invokeAndWait(new Runnable() { - public void run() { - frame.setVisible(false); - frame.remove(glCanvas); - frame.dispose(); - }}); - } catch (Throwable t) { - t.printStackTrace(); - Assume.assumeNoException(t); - } - frame=null; - glCanvas=null; - } - protected void runTestGL(GLCapabilities caps) throws InterruptedException { - glCanvas = new GLCanvas(caps); + final Frame frame = new Frame("Texture Test"); + Assert.assertNotNull(frame); + + final GLCanvas glCanvas = new GLCanvas(caps); Assert.assertNotNull(glCanvas); + glCanvas.addGLEventListener(new GearsES2()); frame.add(glCanvas); @@ -110,6 +84,18 @@ public class TestAWT01GLn extends UITestCase { Thread.sleep(500); // 500 ms animator.stop(); + + try { + javax.swing.SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + frame.setVisible(false); + frame.remove(glCanvas); + frame.dispose(); + }}); + } catch (Throwable t) { + t.printStackTrace(); + Assume.assumeNoException(t); + } } @Test @@ -136,6 +122,18 @@ public class TestAWT01GLn extends UITestCase { } } + @Test + public void test02ES2() throws InterruptedException { + if(GLProfile.isAvailable(GLProfile.GLES2)) { + GLProfile glprofile = GLProfile.get(GLProfile.GLES2); + System.out.println( "GLProfile GLES2: " + glprofile ); + GLCapabilities caps = new GLCapabilities(glprofile); + runTestGL(caps); + } else { + System.out.println("GLES2 n/a"); + } + } + public static void main(String args[]) { org.junit.runner.JUnitCore.main(TestAWT01GLn.class.getName()); } -- cgit v1.2.3