diff options
author | Sven Gothel <[email protected]> | 2012-07-04 18:02:11 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-07-04 18:02:11 +0200 |
commit | 9b35c57425b0a5f6b789b9b43a62a8b64be51d86 (patch) | |
tree | 04a4e082e00fd4d313346aa8dfc2ce4e5d3ab145 /src/jogl/classes/jogamp/opengl/GLRunnableTask.java | |
parent | eed8508ae1132e5f45f788e9cb3f3d5a1050ac70 (diff) |
GLAutoDrawable* refinement of abstraction / generalization - API Change!
- GLAutoDrawable (compat change - recompile):
- 'void invoke(boolean wait, GLRunnable glRunnable)' -> 'boolean invoke(boolean wait, GLRunnable glRunnable)'
Allows notifying caller whether the task has been executed or at least enqueued.
- GLAutoDrawable add 'GLEventListener removeGLEventListener(int index)'
- This allow one to remove a specific GLEventListener and reusing it (return value).
- GLDrawableImpl remove 'destroy()' to favor 'setRealized(false)'
- Using more common code of GLAutoDrawableBase, i.e. GLPbufferImpl can use defaultDestroyOp().
- Removes redundancy of methods
- GLAutoDrawableBase/Delegate
- better 'default' names to emphasize it's purpose, adding API doc
- includes more generic functionality
- defaultWindowDestroyNotify()
- defaultDestroyOp()
- TestGLAutoDrawableDelegateNEWT demonstrates a simple example w/ all window events handled.
- Fix TestParenting01cSwingAWT's threading use (gl disturbance thread)
Diffstat (limited to 'src/jogl/classes/jogamp/opengl/GLRunnableTask.java')
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLRunnableTask.java | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/src/jogl/classes/jogamp/opengl/GLRunnableTask.java b/src/jogl/classes/jogamp/opengl/GLRunnableTask.java index 448f68423..244a3fd79 100644 --- a/src/jogl/classes/jogamp/opengl/GLRunnableTask.java +++ b/src/jogl/classes/jogamp/opengl/GLRunnableTask.java @@ -39,7 +39,8 @@ public class GLRunnableTask implements GLRunnable { GLRunnable runnable; Object notifyObject; boolean catchExceptions; - boolean isExecuted; + volatile boolean isExecuted; + volatile boolean isFlushed; Throwable runnableException; @@ -48,6 +49,7 @@ public class GLRunnableTask implements GLRunnable { this.notifyObject = notifyObject ; this.catchExceptions = catchExceptions; isExecuted = false; + isFlushed = false; } public boolean run(GLAutoDrawable drawable) { @@ -84,8 +86,41 @@ public class GLRunnableTask implements GLRunnable { } return res; } - + + /** + * Simply flush this task and notify a waiting executor. + * The executor which might have been blocked until notified + * will be unblocked and the task removed from the queue. + * + * @see #isFlushed() + * @see #isInQueue() + */ + public void flush() { + if(!isExecuted() && null != notifyObject) { + synchronized (notifyObject) { + isFlushed=true; + notifyObject.notifyAll(); + } + } + } + + /** + * @return !{@link #isExecuted()} && !{@link #isFlushed()} + */ + public boolean isInQueue() { return !isExecuted && !isFlushed; } + + /** + * @return whether this task has been executed. + * @see #isInQueue() + */ public boolean isExecuted() { return isExecuted; } + + /** + * @return whether this task has been flushed. + * @see #isInQueue() + */ + public boolean isFlushed() { return isFlushed; } + public Throwable getThrowable() { return runnableException; } } |