diff options
Diffstat (limited to 'src/jogl/classes/com/sun/opengl/util')
-rwxr-xr-x | src/jogl/classes/com/sun/opengl/util/Animator.java | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/jogl/classes/com/sun/opengl/util/Animator.java b/src/jogl/classes/com/sun/opengl/util/Animator.java index 84637433e..a10717881 100755 --- a/src/jogl/classes/com/sun/opengl/util/Animator.java +++ b/src/jogl/classes/com/sun/opengl/util/Animator.java @@ -53,28 +53,46 @@ import javax.media.opengl.*; */ public class Animator { + protected static final boolean DEBUG = com.sun.opengl.impl.Debug.debug("Animator"); + private volatile ArrayList/*<GLAutoDrawable>*/ drawables = new ArrayList(); private AnimatorImpl impl; private Runnable runnable; private boolean runAsFastAsPossible; + protected ThreadGroup threadGroup; protected Thread thread; protected volatile boolean shouldStop; protected boolean ignoreExceptions; protected boolean printExceptions; /** Creates a new, empty Animator. */ - public Animator() { + public Animator(ThreadGroup tg) { try { // Try to use the AWT-capable Animator implementation by default impl = (AnimatorImpl) Class.forName("com.sun.opengl.util.awt.AWTAnimatorImpl").newInstance(); } catch (Exception e) { impl = new AnimatorImpl(); } + threadGroup = tg; + + if(DEBUG) { + System.out.println("Animator created, ThreadGroup: "+threadGroup); + } + } + + public Animator() { + this((ThreadGroup)null); } /** Creates a new Animator for a particular drawable. */ public Animator(GLAutoDrawable drawable) { - this(); + this((ThreadGroup)null); + add(drawable); + } + + /** Creates a new Animator for a particular drawable. */ + public Animator(ThreadGroup tg, GLAutoDrawable drawable) { + this(tg); add(drawable); } @@ -134,6 +152,9 @@ public class Animator { class MainLoop implements Runnable { public void run() { try { + if(DEBUG) { + System.out.println("Animator started: "+Thread.currentThread()); + } while (!shouldStop) { // Don't consume CPU unless there is work to be done if (drawables.size() == 0) { @@ -152,6 +173,9 @@ public class Animator { Thread.yield(); } } + if(DEBUG) { + System.out.println("Animator stopped: "+Thread.currentThread()); + } } finally { shouldStop = false; synchronized (Animator.this) { @@ -170,7 +194,11 @@ public class Animator { if (runnable == null) { runnable = new MainLoop(); } - thread = new Thread(runnable); + if(null==threadGroup) { + thread = new Thread(runnable); + } else { + thread = new Thread(threadGroup, runnable); + } thread.start(); } |