diff options
author | Sven Gothel <[email protected]> | 2012-03-20 09:02:53 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-03-20 09:02:53 +0100 |
commit | b7c5a58f3fd44f87ff3a79410f72260efce7a552 (patch) | |
tree | d071492fbdca8be12e74aab571687152a207712c /src | |
parent | b823e8a0e18ec0b357d62af468a14162a9fb4948 (diff) |
Cleanup: Use getThreadName() and validateCurrent() to remove redundancy and to add thread-name info; GLWorkerThread: Use ArrayList and generics.
Diffstat (limited to 'src')
-rw-r--r-- | src/jogl/classes/javax/media/opengl/GLContext.java | 28 | ||||
-rw-r--r-- | src/jogl/classes/javax/media/opengl/awt/GLCanvas.java | 50 | ||||
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLWorkerThread.java | 22 |
3 files changed, 49 insertions, 51 deletions
diff --git a/src/jogl/classes/javax/media/opengl/GLContext.java b/src/jogl/classes/javax/media/opengl/GLContext.java index f928bc126..41dce0d3b 100644 --- a/src/jogl/classes/javax/media/opengl/GLContext.java +++ b/src/jogl/classes/javax/media/opengl/GLContext.java @@ -122,6 +122,10 @@ public abstract class GLContext { private int currentSwapInterval; protected void resetStates() { + if (DEBUG) { + System.err.println(getThreadName() + ": GLContext.resetStates()"); + // Thread.dumpStack(); + } ctxMajorVersion=-1; ctxMinorVersion=-1; ctxOptions=0; @@ -260,7 +264,7 @@ public abstract class GLContext { public static GL getCurrentGL() throws GLException { GLContext glc = getCurrent(); if(null==glc) { - throw new GLException("No OpenGL context current on this thread"); + throw new GLException(getThreadName()+": No OpenGL context current on this thread"); } return glc.getGL(); } @@ -288,7 +292,7 @@ public abstract class GLContext { */ public final void validateCurrent() throws GLException { if(getCurrent() != this) { - throw new GLException("Given GL context not current"); + throw new GLException(getThreadName()+": This context is not current. Current context: "+getCurrent()+", this context "+this); } } @@ -299,7 +303,7 @@ public abstract class GLContext { */ protected static void setCurrent(GLContext cur) { if(TRACE_SWITCH) { - System.err.println("GLContext.ContextSwitch: - setCurrent() - "+Thread.currentThread().getName()+": "+cur); + System.err.println(getThreadName()+": GLContext.ContextSwitch: - setCurrent() - "+cur); } currentContext.set(cur); } @@ -624,9 +628,7 @@ public abstract class GLContext { * @throws GLException if the context is not current. */ public final boolean setSwapInterval(int interval) throws GLException { - if (!isCurrent()) { - throw new GLException("This context is not current. Current context: "+getCurrent()+", this context "+this); - } + validateCurrent(); if(0<=interval) { if( setSwapIntervalImpl(interval) ) { currentSwapInterval = interval; @@ -665,18 +667,13 @@ public abstract class GLContext { public final boolean queryMaxSwapGroups(int[] maxGroups, int maxGroups_offset, int[] maxBarriers, int maxBarriers_offset) { - - if (!isCurrent()) { - throw new GLException("This context is not current. Current context: "+getCurrent()+", this context "+this); - } + validateCurrent(); return queryMaxSwapGroupsImpl(maxGroups, maxGroups_offset, maxBarriers, maxBarriers_offset); } protected boolean queryMaxSwapGroupsImpl(int[] maxGroups, int maxGroups_offset, int[] maxBarriers, int maxBarriers_offset) { return false; } public final boolean joinSwapGroup(int group) { - if (!isCurrent()) { - throw new GLException("This context is not current. Current context: "+getCurrent()+", this context "+this); - } + validateCurrent(); return joinSwapGroupImpl(group); } protected boolean joinSwapGroupImpl(int group) { /** nop per default .. **/ return false; } @@ -685,9 +682,7 @@ public abstract class GLContext { return currentSwapGroup; } public final boolean bindSwapBarrier(int group, int barrier) { - if (!isCurrent()) { - throw new GLException("This context is not current. Current context: "+getCurrent()+", this context "+this); - } + validateCurrent(); return bindSwapBarrierImpl(group, barrier); } protected boolean bindSwapBarrierImpl(int group, int barrier) { /** nop per default .. **/ return false; } @@ -875,7 +870,6 @@ public abstract class GLContext { deviceVersionsAvailableSet.add(devKey); if (DEBUG) { System.err.println(getThreadName() + ": createContextARB: SET mappedVersionsAvailableSet "+devKey); - // Thread.dumpStack(); } } } diff --git a/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java b/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java index d8d9ddf6b..10d478b85 100644 --- a/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java +++ b/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java @@ -140,11 +140,7 @@ import jogamp.opengl.ThreadingImpl; @SuppressWarnings("serial") public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosingProtocol, OffscreenLayerOption { - private static final boolean DEBUG; - - static { - DEBUG = Debug.debug("GLCanvas"); - } + private static final boolean DEBUG = Debug.debug("GLCanvas"); private GLDrawableHelper drawableHelper = new GLDrawableHelper(); private AWTGraphicsConfiguration awtConfig; @@ -330,14 +326,14 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing final GraphicsConfiguration compatible = (null!=config)?config.getAWTGraphicsConfiguration():null; boolean equalCaps = config.getChosenCapabilities().equals(awtConfig.getChosenCapabilities()); if(DEBUG) { - Exception e = new Exception("Info: Call Stack: "+Thread.currentThread().getName()); - e.printStackTrace(); + System.err.println(getThreadName()+": Info:"); System.err.println("Created Config (n): HAVE GC "+chosen); System.err.println("Created Config (n): THIS GC "+gc); System.err.println("Created Config (n): Choosen GC "+compatible); System.err.println("Created Config (n): HAVE CF "+awtConfig); System.err.println("Created Config (n): Choosen CF "+config); System.err.println("Created Config (n): EQUALS CAPS "+equalCaps); + Thread.dumpStack(); } if (compatible != null) { @@ -412,7 +408,7 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing public void display() { if( !validateGLDrawable() ) { if(DEBUG) { - System.err.println("Info: GLCanvas display - skipped GL render, drawable not valid yet"); + System.err.println(getThreadName()+": Info: GLCanvas display - skipped GL render, drawable not valid yet"); } return; // not yet available .. } @@ -427,9 +423,9 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing try { final GLAnimatorControl animator = getAnimator(); if(DEBUG) { - Exception ex1 = new Exception("Info: dispose("+regenerate+") - START, hasContext " + + System.err.println(getThreadName()+": Info: dispose("+regenerate+") - START, hasContext " + (null!=context) + ", hasDrawable " + (null!=drawable)+", "+animator); - ex1.printStackTrace(); + Thread.dumpStack(); } if(null!=context) { @@ -472,7 +468,7 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing } if(DEBUG) { - System.err.println("dispose("+regenerate+") - END, "+animator); + System.err.println(getThreadName()+": dispose("+regenerate+") - END, "+animator); } } finally { drawableSync.unlock(); @@ -533,8 +529,8 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing @Override public void addNotify() { if(DEBUG) { - Exception ex1 = new Exception(Thread.currentThread().getName()+" - Info: addNotify - start, bounds: "+this.getBounds()); - ex1.printStackTrace(); + System.err.println(getThreadName()+": Info: addNotify - start, bounds: "+this.getBounds()); + Thread.dumpStack(); } drawableSync.lock(); @@ -570,7 +566,7 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing // validateGLDrawable(); if(DEBUG) { - System.err.println(Thread.currentThread().getName()+" - Info: addNotify - end: peer: "+getPeer()); + System.err.println(getThreadName()+": Info: addNotify - end: peer: "+getPeer()); } } finally { drawableSync.unlock(); @@ -604,10 +600,8 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing realized = true; sendReshape=true; // ensure a reshape is being send .. if(DEBUG) { - String msg = Thread.currentThread().getName()+" - Realized Drawable: "+drawable.toString(); - // System.err.println(msg); - Throwable t = new Throwable(msg); - t.printStackTrace(); + System.err.println(getThreadName()+": Realized Drawable: "+drawable.toString()); + Thread.dumpStack(); } } } @@ -630,8 +624,8 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing @Override public void removeNotify() { if(DEBUG) { - Exception ex1 = new Exception(Thread.currentThread().getName()+" - Info: removeNotify - start"); - ex1.printStackTrace(); + System.err.println(getThreadName()+": Info: removeNotify - start"); + Thread.dumpStack(); } awtWindowClosingProtocol.removeClosingListener(); @@ -651,7 +645,7 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing } } if(DEBUG) { - System.err.println(Thread.currentThread().getName()+" - Info: removeNotify - end, peer: "+getPeer()); + System.err.println(getThreadName()+": Info: removeNotify - end, peer: "+getPeer()); } } @@ -853,7 +847,7 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing createDrawableAndContext(); if(DEBUG) { - System.err.println("GLCanvas.dispose(true): new drawable: "+drawable); + System.err.println(getThreadName()+": GLCanvas.dispose(true): new drawable: "+drawable); } validateGLDrawable(); // immediate attempt to recreate the drawable } @@ -884,7 +878,7 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing } boolean closed = adevice.close(); if(DEBUG) { - System.err.println(Thread.currentThread().getName() + " - GLCanvas.dispose(false): closed GraphicsDevice: "+adeviceMsg+", result: "+closed); + System.err.println(getThreadName()+": GLCanvas.dispose(false): closed GraphicsDevice: "+adeviceMsg+", result: "+closed); } awtConfig=null; } @@ -923,7 +917,7 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing public void run() { if (sendReshape) { if(DEBUG) { - System.err.println(Thread.currentThread().getName()+" - reshape: "+getWidth()+"x"+getHeight()); + System.err.println(getThreadName()+": Reshape: "+getWidth()+"x"+getHeight()); } // Note: we ignore the given x and y within the parent component // since we are drawing directly into this heavyweight component. @@ -994,7 +988,7 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing } disableBackgroundEraseInitialized = true; if(DEBUG) { - System.err.println("GLCanvas: TK disableBackgroundErase method found: "+ + System.err.println(getThreadName()+": GLCanvas: TK disableBackgroundErase method found: "+ (null!=disableBackgroundEraseMethod)); } } @@ -1006,7 +1000,7 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing t = e; } if(DEBUG) { - System.err.println("GLCanvas: TK disableBackgroundErase error: "+t); + System.err.println(getThreadName()+": GLCanvas: TK disableBackgroundErase error: "+t); } } } @@ -1069,6 +1063,10 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing return config; } + protected static String getThreadName() { + return Thread.currentThread().getName(); + } + /** * A most simple JOGL AWT test entry */ diff --git a/src/jogl/classes/jogamp/opengl/GLWorkerThread.java b/src/jogl/classes/jogamp/opengl/GLWorkerThread.java index ac9655fbb..e717ec64c 100644 --- a/src/jogl/classes/jogamp/opengl/GLWorkerThread.java +++ b/src/jogl/classes/jogamp/opengl/GLWorkerThread.java @@ -40,8 +40,10 @@ package jogamp.opengl; import java.lang.reflect.InvocationTargetException; -import java.util.*; -import javax.media.opengl.*; +import java.util.ArrayList; +import java.util.List; + +import javax.media.opengl.GLContext; /** Singleton thread upon which all OpenGL work is performed by default. Unfortunately many vendors' OpenGL drivers are not really @@ -64,7 +66,7 @@ public class GLWorkerThread { // The Runnable to execute immediately on the worker thread private static volatile Runnable work; // Queue of Runnables to be asynchronously invoked - private static List queue = new LinkedList(); + private static List<Runnable> queue = new ArrayList<Runnable>(); /** Should only be called by Threading class if creation of the GLWorkerThread was requested via the opengl.1thread system @@ -141,7 +143,7 @@ public class GLWorkerThread { */ } else { - throw new RuntimeException("Should not start GLWorkerThread twice"); + throw new RuntimeException(getThreadName()+": Should not start GLWorkerThread twice"); } } } @@ -150,7 +152,7 @@ public class GLWorkerThread { public static void invokeAndWait(Runnable runnable) throws InvocationTargetException, InterruptedException { if (!started) { - throw new RuntimeException("May not invokeAndWait on worker thread without starting it first"); + throw new RuntimeException(getThreadName()+": May not invokeAndWait on worker thread without starting it first"); } Object lockTemp = lock; @@ -177,7 +179,7 @@ public class GLWorkerThread { public static void invokeLater(Runnable runnable) { if (!started) { - throw new RuntimeException("May not invokeLater on worker thread without starting it first"); + throw new RuntimeException(getThreadName()+": May not invokeLater on worker thread without starting it first"); } Object lockTemp = lock; @@ -208,6 +210,10 @@ public class GLWorkerThread { return (Thread.currentThread() == thread); } + protected static String getThreadName() { + return Thread.currentThread().getName(); + } + static class WorkerRunnable implements Runnable { public void run() { // Notify starting thread that we're ready @@ -252,10 +258,10 @@ public class GLWorkerThread { while (!queue.isEmpty()) { try { - Runnable curAsync = (Runnable) queue.remove(0); + Runnable curAsync = queue.remove(0); curAsync.run(); } catch (Throwable t) { - System.err.println("Exception occurred on JOGL OpenGL worker thread:"); + System.err.println(getThreadName()+": Exception occurred on JOGL OpenGL worker thread:"); t.printStackTrace(); } } |