29package com.jogamp.opengl.test.junit.jogl.awt;
31import com.jogamp.opengl.GLAutoDrawable;
32import com.jogamp.opengl.GLEventListener;
33import com.jogamp.opengl.awt.GLCanvas;
34import com.jogamp.opengl.util.Animator;
35import com.jogamp.opengl.util.AnimatorBase;
36import com.jogamp.opengl.util.FPSAnimator;
38import com.jogamp.opengl.test.junit.util.UITestCase;
39import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2;
41import com.jogamp.opengl.test.junit.util.MiscUtils;
43import java.awt.BorderLayout;
45import java.awt.Insets;
47import org.junit.Assert;
48import org.junit.Assume;
50import org.junit.FixMethodOrder;
51import org.junit.runners.MethodSorters;
54@FixMethodOrder(MethodSorters.NAME_ASCENDING)
56 static long durationPerTest = 1000;
57 static final int width = 512;
58 static final int height = 512;
84 void testImpl(
final AnimatorBase animator,
final int restartPeriod,
final boolean restartOnCurrentThread)
throws InterruptedException {
85 final Frame frame1 =
new Frame(
"Frame 1");
97 frame1.setTitle(
"f "+frameCount+
", fps "+animator.getLastFPS());
102 public void reshape(
final GLAutoDrawable drawable,
final int x,
final int y,
final int width,
final int height) {
105 gle2 =
new GearsES2();
107 Assert.assertNotNull(frame1);
109 final Insets insets = frame1.getInsets();
110 final int w = width + insets.left + insets.right;
111 final int h = height + insets.top + insets.bottom;
112 frame1.setSize(w, h);
114 frame1.setLocation(0, 0);
115 frame1.setTitle(
"Generic Title");
117 GLCanvas glCanvas = createGLCanvas();
118 glCanvas.addGLEventListener(gle1);
119 glCanvas.addGLEventListener(gle2);
121 animator.setUpdateFPSFrames(60, System.err);
122 animator.add(glCanvas);
125 attachGLCanvas(frame1, glCanvas,
false);
128 javax.swing.SwingUtilities.invokeAndWait(
new Runnable() {
130 frame1.setVisible(
true);
132 }
catch (
final Throwable t) {
134 Assume.assumeNoException(t);
137 final long sleep = 0 < restartPeriod ? restartPeriod : 100;
138 long togo = durationPerTest;
140 if(0 < restartPeriod) {
141 glCanvas = restart(frame1, glCanvas, restartOnCurrentThread);
149 dispose(frame1, glCanvas);
156 void dispose(
final Frame frame,
final GLCanvas glCanvas) {
158 javax.swing.SwingUtilities.invokeAndWait(
new Runnable() {
163 }
catch (
final Throwable t) {
165 Assume.assumeNoException(t);
169 GLCanvas restart(
final Frame frame, GLCanvas glCanvas,
final boolean restartOnCurrentThread)
throws InterruptedException {
170 glCanvas.disposeGLEventListener(gle1,
true);
171 glCanvas.disposeGLEventListener(gle2,
true);
172 detachGLCanvas(frame, glCanvas, restartOnCurrentThread);
174 glCanvas = createGLCanvas();
176 attachGLCanvas(frame, glCanvas, restartOnCurrentThread);
177 glCanvas.addGLEventListener(gle1);
178 glCanvas.addGLEventListener(gle2);
183 void attachGLCanvas(
final Frame frame,
final GLCanvas glCanvas,
final boolean restartOnCurrentThread) {
184 System.err.println(
"*** attachGLCanvas.0 on-current-thread "+restartOnCurrentThread+
", currentThread "+Thread.currentThread().getName());
185 if( restartOnCurrentThread ) {
186 frame.setLayout(
new BorderLayout());
187 frame.add(glCanvas, BorderLayout.CENTER);
191 javax.swing.SwingUtilities.invokeAndWait(
new Runnable() {
193 frame.setLayout(
new BorderLayout());
194 frame.add(glCanvas, BorderLayout.CENTER);
197 }
catch (
final Throwable t) {
199 Assume.assumeNoException(t);
202 System.err.println(
"*** attachGLCanvas.X");
205 void detachGLCanvas(
final Frame frame,
final GLCanvas glCanvas,
final boolean restartOnCurrentThread) {
206 System.err.println(
"*** detachGLCanvas.0 on-current-thread "+restartOnCurrentThread+
", currentThread "+Thread.currentThread().getName());
207 if( restartOnCurrentThread ) {
208 frame.remove(glCanvas);
212 javax.swing.SwingUtilities.invokeAndWait(
new Runnable() {
214 frame.remove(glCanvas);
217 }
catch (
final Throwable t) {
219 Assume.assumeNoException(t);
222 System.err.println(
"*** detachGLCanvas.X");
227 GLCanvas createGLCanvas() {
228 System.err.println(
"*** createGLCanvas.0");
229 final GLCanvas glCanvas =
new GLCanvas();
230 glCanvas.setBounds(0, 0, width, height);
231 Assert.assertNotNull(glCanvas);
232 System.err.println(
"*** createGLCanvas.X");
236 public static void main(
final String args[]) {
237 for(
int i=0; i<args.length; i++) {
238 if(args[i].equals(
"-time")) {
239 durationPerTest =
MiscUtils.
atoi(args[++i], (
int)durationPerTest);
static void main(final String args[])
void test02FPSAnimator_RestartOnAWTEDT()
static int atoi(final String str, final int def)
Base implementation of GLAnimatorControl
An Animator subclass which attempts to achieve a target frames-per-second rate to avoid using all CPU...
A higher-level abstraction than GLDrawable which supplies an event based mechanism (GLEventListener) ...
Declares events which client code can use to manage OpenGL rendering into a GLAutoDrawable.