@Override public void run( ) { // Add canvas and scrollbar to the frame frame.setLayout( new BorderLayout( ) ); frame.add( canvas, BorderLayout.CENTER ); frame.add( scrollbar, BorderLayout.EAST ); frame.pack( ); frame.setLocationRelativeTo( null ); frame.setVisible( true ); GLAnimatorControl animator = new SwingEDTAnimator( 60 ); animator.add( canvas.getGLDrawable( ) ); animator.start( ); } } );
@SuppressWarnings("deprecation") @Override public void shutdownRenderingAction() { final GLAnimatorControl anim = GLWindow.this.getAnimator(); if ( null != anim && anim.isAnimating() ) { final Thread animThread = anim.getThread(); if( animThread == Thread.currentThread() ) { anim.stop(); // on anim thread, non-blocking } else { AccessController.doPrivileged(new PrivilegedAction<Object>() { @Override public Object run() { if( anim.isAnimating() && null != animThread ) { try { animThread.stop(); } catch(final Throwable t) { if( DEBUG ) { System.err.println("Caught "+t.getClass().getName()+": "+t.getMessage()); t.printStackTrace(); } } } return null; } } ); } } } }
public final boolean isAnimatorAnimatingOnOtherThread() { return ( null != animatorCtrl ) ? animatorCtrl.isAnimating() && animatorCtrl.getThread() != Thread.currentThread() : false ; }
@Override public void setGLAnimator( GLAnimatorControl animator ) { this.animator = animator; if ( this.canvas != null ) { ensureAnimating( this.animator ); this.animator.add( this.canvas.getGLDrawable( ) ); } }
public void stopAnimator( ) { animator.stop( ); }
protected void tearDownCanvas( ) { if ( this.canvas != null ) { this.animator.remove( this.canvas.getGLDrawable( ) ); this.canvas.getCanvas( ).setNEWTChild( null ); this.canvasParent.remove( this.canvas ); this.canvas.destroy( ); this.canvas = null; } }
public static void ensureAnimating( GLAnimatorControl animator ) { // This might need to do something more involved one day, like check // the return value. For now, the idea is just to have a method name // that makes it clear that multiple calls are okay. animator.start( ); }
@Override public final void display(GLAutoDrawable drawable) { if (!drawable.getContext().isCurrent()) { return; } try { customRender(); } catch (Throwable ex) { logger.error("Error in custom code!", ex); } GLAnimatorControl ani = drawable.getAnimator(); //TODO GameTime updates einbaun logger.trace(String.format("%d Objects took %dms to render; fps:%f", robjekts.size(), ani.getLastFPSPeriod(), ani.getLastFPS())); if (info != null) { info.setFPS(ani.getTotalFPS()); } float delta = ani.getLastFPSPeriod(); for (ShaderUniform su : animated) { su.setData(delta); } if (info != null) { info.setMemInfo(meminfo); } }
public final boolean isAnimatorAnimating() { return ( null != animatorCtrl ) ? animatorCtrl.isAnimating() : false ; }
@Override public void run() { synchronized(sync) { if( DEBUG ) { System.err.println("AWT print.release "+printAWTTiles); } final GLAutoDrawable glad = getGLAD(); printAWTTiles.dispose(); printAWTTiles= null; if( printGLAD != glad ) { GLDrawableUtil.swapGLContextAndAllGLEventListener(printGLAD, glad); printGLAD.destroy(); } printGLAD = null; if( null != printAnimator ) { printAnimator.add(glad); printAnimator = null; } printActive = false; } } };
@Override public void windowClosing( WindowEvent e ) { // stop the animation thread before exiting animator.stop( ); // dispose of GlimpseLayouts and GlimpsePainters attached to GlimpseCanvas canvas.disposeAttached( ); // destroy heavyweight canvas and GLContext canvas.destroy( ); } } );
@Override protected void dispose( ) { if ( this.canvas != null && this.animator != null ) { this.animator.remove( this.canvas.getGLDrawable( ) ); } super.dispose( ); if ( this.canvas != null ) { this.tearDownCanvas( ); } }
public void startAnimator( ) { animator.start( ); }
public static final boolean isAnimatorAnimatingOnOtherThread(final GLAnimatorControl animatorCtrl) { return ( null != animatorCtrl ) ? animatorCtrl.isAnimating() && animatorCtrl.getThread() != Thread.currentThread() : false ; }
public static final boolean isAnimatorAnimating(final GLAnimatorControl animatorCtrl) { return ( null != animatorCtrl ) ? animatorCtrl.isAnimating() : false ; }
public void run( ) { NewtSwingEDTGlimpseCanvas canvas = new NewtSwingEDTGlimpseCanvas( GL3 ); canvas.addLayout( plot ); canvas.setLookAndFeel( new SwingLookAndFeel( ) ); GLAnimatorControl animator = new SwingEDTAnimator( 30 ); animator.add( canvas.getGLDrawable( ) ); animator.start( ); JFrame frame = newFrame( "LineStripExample", canvas, DISPOSE_ON_CLOSE ); stopOnWindowClosing( frame, animator ); disposeOnWindowClosing( frame, canvas ); showFrameCentered( frame ); } } );