Class AnimatorBase
- java.lang.Object
-
- com.jogamp.opengl.util.AnimatorBase
-
- All Implemented Interfaces:
FPSCounter,GLAnimatorControl
- Direct Known Subclasses:
Animator,FPSAnimator
public abstract class AnimatorBase extends Object implements GLAnimatorControl
Base implementation of GLAnimatorControl
The change synchronization is done via synchronized blocks on the AnimatorBase instance.
Status get / set activity is synced with a RecursiveLock, used as a memory barrier.
This is suitable, since all change requests are allowed to be expensive as they are not expected to be called at every frame.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceAnimatorBase.AnimatorImplstatic classAnimatorBase.UncaughtAnimatorException-
Nested classes/interfaces inherited from interface com.jogamp.opengl.GLAnimatorControl
GLAnimatorControl.UncaughtExceptionHandler
-
-
Field Summary
Fields Modifier and Type Field Description static intMODE_EXPECT_AWT_RENDERING_THREADIf present inmodeBitsfield andAWT is available, implementation is aware of the AWT EDT, otherwise not.-
Fields inherited from interface com.jogamp.opengl.FPSCounter
DEFAULT_FRAMES_PER_INTERVAL
-
-
Constructor Summary
Constructors Constructor Description AnimatorBase()Creates a new, empty Animator instance while expecting an AWT rendering thread if AWT is available.AnimatorBase(int modeBits)Creates a new, empty Animator instance with given modeBits.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(GLAutoDrawable drawable)Adds a drawable to this animator's list of rendering drawables.ThreadgetExclusiveContextThread()Returns the exclusive context thread ifisExclusiveContextEnabled()andisStarted(), otherwisenull.longgetFPSStartTime()Returns the time of the first display call in milliseconds after enabling this feature viaFPSCounter.setUpdateFPSFrames(int, PrintStream).
This value is reset viaFPSCounter.resetFPSCounter().floatgetLastFPS()longgetLastFPSPeriod()longgetLastFPSUpdateTime()Returns the time of the last update interval in milliseconds, if this feature is enabled viaFPSCounter.setUpdateFPSFrames(int, PrintStream).
This value is reset viaFPSCounter.resetFPSCounter().intgetModeBits()ThreadgetThread()floatgetTotalFPS()longgetTotalFPSDuration()intgetTotalFPSFrames()GLAnimatorControl.UncaughtExceptionHandlergetUncaughtExceptionHandler()Returns theGLAnimatorControl.UncaughtExceptionHandlerinvoked when thisanimatorabruptlystopsdue to an uncaught exception from one of itsGLAutoDrawables.intgetUpdateFPSFrames()booleanisExclusiveContextEnabled()Returnstrue, if the exclusive context thread is enabled, otherwisefalse.booleanisStarted()Indicates whether this animator has beenstarted.voidremove(GLAutoDrawable drawable)Removes a drawable from the animator's list of rendering drawables.voidresetFPSCounter()Reset all performance counter (startTime, currentTime, frame number)booleansetExclusiveContext(boolean enable)Dedicate allGLAutoDrawable's context to this animator thread.ThreadsetExclusiveContext(Thread t)Dedicate allGLAutoDrawable's context to the given exclusive context thread.voidsetIgnoreExceptions(boolean ignoreExceptions)Sets a flag causing this Animator to ignore exceptions produced while redrawing the drawables.voidsetModeBits(boolean enable, int bitValues)Enables or disables the givenbitValuesin this AnimatorsmodeBits.voidsetPrintExceptions(boolean printExceptions)Sets a flag indicating that when exceptions are being ignored by this Animator (seesetIgnoreExceptions(boolean)), to print the exceptions' stack traces for diagnostic information.voidsetUncaughtExceptionHandler(GLAnimatorControl.UncaughtExceptionHandler handler)Set the handler invoked when thisanimatorabruptlystopsdue to an uncaught exception from one of itsGLAutoDrawables.voidsetUpdateFPSFrames(int frames, PrintStream out)StringtoString()-
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface com.jogamp.opengl.GLAnimatorControl
isAnimating, isPaused, pause, resume, start, stop
-
-
-
-
Field Detail
-
MODE_EXPECT_AWT_RENDERING_THREAD
public static final int MODE_EXPECT_AWT_RENDERING_THREAD
If present inmodeBitsfield andAWT is available, implementation is aware of the AWT EDT, otherwise not.This is the default.
- See Also:
setModeBits(boolean, int), Constant Field Values
-
-
Constructor Detail
-
AnimatorBase
public AnimatorBase()
Creates a new, empty Animator instance while expecting an AWT rendering thread if AWT is available.
-
AnimatorBase
public AnimatorBase(int modeBits)
Creates a new, empty Animator instance with given modeBits.Passing
MODE_EXPECT_AWT_RENDERING_THREADis considered default. However, passing0is recommended if not using AWT in your application.
-
-
Method Detail
-
setModeBits
public final void setModeBits(boolean enable, int bitValues) throws GLExceptionEnables or disables the givenbitValuesin this AnimatorsmodeBits.- Parameters:
enable-bitValues-- Throws:
GLException- if Animator isisStarted()andMODE_EXPECT_AWT_RENDERING_THREADabout to change- See Also:
MODE_EXPECT_AWT_RENDERING_THREAD
-
getModeBits
public int getModeBits()
-
add
public final void add(GLAutoDrawable drawable)
Description copied from interface:GLAnimatorControlAdds a drawable to this animator's list of rendering drawables.This allows the animator thread to become
animating, in case the first drawable is added and the animatoris started.- Specified by:
addin interfaceGLAnimatorControl- Parameters:
drawable- the drawable to be added
-
remove
public final void remove(GLAutoDrawable drawable)
Description copied from interface:GLAnimatorControlRemoves a drawable from the animator's list of rendering drawables.This method should get called in case a drawable becomes invalid, and will not be recovered.
This allows the animator thread to become
not animating, in case the last drawable has been removed.- Specified by:
removein interfaceGLAnimatorControl- Parameters:
drawable- the drawable to be removed
-
setExclusiveContext
public final Thread setExclusiveContext(Thread t)
Dedicate allGLAutoDrawable's context to the given exclusive context thread.The given thread will be exclusive to all
GLAutoDrawable's context whileGLAnimatorControl.isAnimating().If already started and disabling, method waits until change is propagated to all
GLAutoDrawableif not called from the animator thread orexclusive context thread.Note: Utilizing this feature w/ AWT could lead to an AWT-EDT deadlock, depending on the AWT implementation. Hence it is advised not to use it with native AWT GLAutoDrawable like GLCanvas.
- Parameters:
enable-- Returns:
- previous value
- See Also:
setExclusiveContext(boolean),getExclusiveContextThread(),isExclusiveContextEnabled()
-
setExclusiveContext
public final boolean setExclusiveContext(boolean enable)
Dedicate allGLAutoDrawable's context to this animator thread.The given thread will be exclusive to all
GLAutoDrawable's context whileGLAnimatorControl.isAnimating().If already started and disabling, method waits until change is propagated to all
GLAutoDrawableif not called from the animator thread orexclusive context thread.Note: Utilizing this feature w/ AWT could lead to an AWT-EDT deadlock, depending on the AWT implementation. Hence it is advised not to use it with native AWT GLAutoDrawable like GLCanvas.
- Parameters:
enable-- Returns:
- previous value
- See Also:
setExclusiveContext(Thread),getExclusiveContextThread(),isExclusiveContextEnabled()
-
isExclusiveContextEnabled
public final boolean isExclusiveContextEnabled()
Returnstrue, if the exclusive context thread is enabled, otherwisefalse.
-
getExclusiveContextThread
public final Thread getExclusiveContextThread()
Returns the exclusive context thread ifisExclusiveContextEnabled()andisStarted(), otherwisenull.If exclusive context is enabled via
setExclusiveContext(boolean)theanimator threadis returned if above conditions are met.If exclusive context is enabled via
setExclusiveContext(Thread)the user passed thread is returned if above conditions are met.
-
getThread
public final Thread getThread()
- Specified by:
getThreadin interfaceGLAnimatorControl- Returns:
- The animation thread if running, otherwise null.
- See Also:
GLAnimatorControl.start(),GLAnimatorControl.stop()
-
setUpdateFPSFrames
public final void setUpdateFPSFrames(int frames, PrintStream out)- Specified by:
setUpdateFPSFramesin interfaceFPSCounter- Parameters:
frames- Update interval in frames.
At every rendered frames interval the currentTime and fps values are updated. If the frames interval is <= 0, no update will be issued, ie the FPSCounter feature is turned off. You may chooseFPSCounter.DEFAULT_FRAMES_PER_INTERVAL.out- optional print stream where the fps values gets printed if not null at every frames interval
-
resetFPSCounter
public final void resetFPSCounter()
Description copied from interface:FPSCounterReset all performance counter (startTime, currentTime, frame number)- Specified by:
resetFPSCounterin interfaceFPSCounter
-
getUpdateFPSFrames
public final int getUpdateFPSFrames()
- Specified by:
getUpdateFPSFramesin interfaceFPSCounter- Returns:
- update interval in frames
- See Also:
FPSCounter.setUpdateFPSFrames(int, PrintStream)
-
getFPSStartTime
public final long getFPSStartTime()
Description copied from interface:FPSCounterReturns the time of the first display call in milliseconds after enabling this feature viaFPSCounter.setUpdateFPSFrames(int, PrintStream).
This value is reset viaFPSCounter.resetFPSCounter().- Specified by:
getFPSStartTimein interfaceFPSCounter- See Also:
FPSCounter.setUpdateFPSFrames(int, PrintStream),FPSCounter.resetFPSCounter()
-
getLastFPSUpdateTime
public final long getLastFPSUpdateTime()
Description copied from interface:FPSCounterReturns the time of the last update interval in milliseconds, if this feature is enabled viaFPSCounter.setUpdateFPSFrames(int, PrintStream).
This value is reset viaFPSCounter.resetFPSCounter().- Specified by:
getLastFPSUpdateTimein interfaceFPSCounter- See Also:
FPSCounter.setUpdateFPSFrames(int, PrintStream),FPSCounter.resetFPSCounter()
-
getLastFPSPeriod
public final long getLastFPSPeriod()
- Specified by:
getLastFPSPeriodin interfaceFPSCounter- Returns:
- Duration of the last update interval in milliseconds.
- See Also:
FPSCounter.setUpdateFPSFrames(int, PrintStream),FPSCounter.resetFPSCounter()
-
getLastFPS
public final float getLastFPS()
- Specified by:
getLastFPSin interfaceFPSCounter- Returns:
- Last update interval's frames per seconds,
FPSCounter.getUpdateFPSFrames()/FPSCounter.getLastFPSPeriod() - See Also:
FPSCounter.setUpdateFPSFrames(int, PrintStream),FPSCounter.resetFPSCounter()
-
getTotalFPSFrames
public final int getTotalFPSFrames()
- Specified by:
getTotalFPSFramesin interfaceFPSCounter- Returns:
- Number of frame rendered since
FPSCounter.getFPSStartTime()up toFPSCounter.getLastFPSUpdateTime() - See Also:
FPSCounter.setUpdateFPSFrames(int, PrintStream),FPSCounter.resetFPSCounter()
-
getTotalFPSDuration
public final long getTotalFPSDuration()
- Specified by:
getTotalFPSDurationin interfaceFPSCounter- Returns:
- Total duration in milliseconds,
FPSCounter.getLastFPSUpdateTime()-FPSCounter.getFPSStartTime() - See Also:
FPSCounter.setUpdateFPSFrames(int, PrintStream),FPSCounter.resetFPSCounter()
-
getTotalFPS
public final float getTotalFPS()
- Specified by:
getTotalFPSin interfaceFPSCounter- Returns:
- Total frames per seconds,
FPSCounter.getTotalFPSFrames()/FPSCounter.getTotalFPSDuration() - See Also:
FPSCounter.setUpdateFPSFrames(int, PrintStream),FPSCounter.resetFPSCounter()
-
setIgnoreExceptions
public final void setIgnoreExceptions(boolean ignoreExceptions)
Sets a flag causing this Animator to ignore exceptions produced while redrawing the drawables. By default this flag is set to false, causing any exception thrown to halt the Animator.
-
setPrintExceptions
public final void setPrintExceptions(boolean printExceptions)
Sets a flag indicating that when exceptions are being ignored by this Animator (seesetIgnoreExceptions(boolean)), to print the exceptions' stack traces for diagnostic information. Defaults to false.
-
getUncaughtExceptionHandler
public final GLAnimatorControl.UncaughtExceptionHandler getUncaughtExceptionHandler()
Description copied from interface:GLAnimatorControlReturns theGLAnimatorControl.UncaughtExceptionHandlerinvoked when thisanimatorabruptlystopsdue to an uncaught exception from one of itsGLAutoDrawables.Default is
null.- Specified by:
getUncaughtExceptionHandlerin interfaceGLAnimatorControl
-
setUncaughtExceptionHandler
public final void setUncaughtExceptionHandler(GLAnimatorControl.UncaughtExceptionHandler handler)
Description copied from interface:GLAnimatorControlSet the handler invoked when thisanimatorabruptlystopsdue to an uncaught exception from one of itsGLAutoDrawables.- Specified by:
setUncaughtExceptionHandlerin interfaceGLAnimatorControl- Parameters:
handler- theGLAnimatorControl.UncaughtExceptionHandlerto use as thisanimator's uncaught exception handler. Passnullto unset the handler.- See Also:
GLAnimatorControl.UncaughtExceptionHandler.uncaughtException(GLAnimatorControl, GLAutoDrawable, Throwable)
-
isStarted
public boolean isStarted()
Description copied from interface:GLAnimatorControlIndicates whether this animator has beenstarted.- Specified by:
isStartedin interfaceGLAnimatorControl- See Also:
GLAnimatorControl.start(),GLAnimatorControl.stop(),GLAnimatorControl.isPaused(),GLAnimatorControl.pause(),GLAnimatorControl.resume()
-
-