diff options
author | Sven Gothel <[email protected]> | 2001-02-13 05:32:07 +0000 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2001-02-13 05:32:07 +0000 |
commit | 3e2b16a820bfe03f8f3837c3aaa615c8c4b7f18c (patch) | |
tree | d834a05eb37751b4c95045c3021589f2e22fcd9f /gl4java/awt | |
parent | 91bc9d109b2d16e6d42f1fbcc9d3dbca51c40b69 (diff) |
JAWT Support JDK >=1.3
Diffstat (limited to 'gl4java/awt')
-rw-r--r-- | gl4java/awt/GLAnimCanvas.java | 229 | ||||
-rw-r--r-- | gl4java/awt/GLCanvas.java | 110 |
2 files changed, 203 insertions, 136 deletions
diff --git a/gl4java/awt/GLAnimCanvas.java b/gl4java/awt/GLAnimCanvas.java index 77fd21f..6133e60 100644 --- a/gl4java/awt/GLAnimCanvas.java +++ b/gl4java/awt/GLAnimCanvas.java @@ -83,6 +83,13 @@ import java.lang.Math; * because a GL-Context can be shared by many threads, * but one thread can have just one GL-Context ! * + * <p> + * + * Since GL4Java 2.5.2 and using a JVM >= 1.3 + * the multithreading support is stable ! + * + * <p> + * * (comments welcome) * * <p> @@ -102,7 +109,7 @@ import java.lang.Math; <a href="GLAnimCanvas.html#ReInit()">ReInit - ReInitialisation after stop for setSuspended(false)</a> * </pre> * - * @see GLCanvas + * @see gl4java.awt.GLCanvas * @version 2.0, 21. April 1999 * @author Sven Goethel * @@ -116,11 +123,18 @@ public class GLAnimCanvas extends GLCanvas * * A little GUI is supported ! * - * @see GLAnimCanvas#run + * @see gl4java.awt.GLAnimCanvas#run */ protected double FramesPerSec=20; protected long mSecPerFrame=0; + protected static int globalThreadNumber=0; + + public static int getGlobalThreadNumber() + { + return globalThreadNumber; + } + /** * the delays .. */ @@ -129,16 +143,16 @@ public class GLAnimCanvas extends GLCanvas /** * The thread for referencing Thread (Animation) * - * @see GLAnimCanvas#stop - * @see GLAnimCanvas#start - * @see GLAnimCanvas#run + * @see gl4java.awt.GLAnimCanvas#stop + * @see gl4java.awt.GLAnimCanvas#start + * @see gl4java.awt.GLAnimCanvas#run */ protected Thread killme = null; /** * Instead of using suspend (JAVA2) * - * @see GLAnimCanvas#run + * @see gl4java.awt.GLAnimCanvas#run */ protected boolean threadSuspended = false; @@ -151,7 +165,7 @@ public class GLAnimCanvas extends GLCanvas * * Constructor * - * @see GLCanvas#GLCanvas + * @see gl4java.awt.GLCanvas#GLCanvas * */ public GLAnimCanvas( int width, int height, @@ -169,7 +183,7 @@ public class GLAnimCanvas extends GLCanvas * * Uses the default GLFunc and GLUFunc implementation ! * - * @see GLCanvas#GLCanvas + * @see gl4java.awt.GLCanvas#GLCanvas * */ public GLAnimCanvas( int width, int height ) @@ -206,16 +220,24 @@ public class GLAnimCanvas extends GLCanvas * * <p> * + * You MUST encapsulate your OpenGL call's within: + * <pre> + - glj.gljMakeCurrent() + YOUR OpenGL commands here ! + - glj.gljFree() + * </pre> + * <p> + * * You should set shallWeRender here, * to signalize the animation-loop 'run' to supsend * <p> * To restart the thread, just call setSuspended(false) * - * @see GLAnimCanvas#shallWeRender - * @see GLAnimCanvas#run - * @see GLAnimCanvas#setSuspended - * @see GLCanvas#sDisplay - * @see GLCanvas#paint + * @see gl4java.awt.GLAnimCanvas#shallWeRender + * @see gl4java.awt.GLAnimCanvas#run + * @see gl4java.awt.GLAnimCanvas#setSuspended + * @see gl4java.awt.GLCanvas#sDisplay + * @see gl4java.awt.GLCanvas#paint */ public void display() { @@ -229,7 +251,7 @@ public class GLAnimCanvas extends GLCanvas return; } - if( glj.gljMakeCurrent(true) == false ) + if( glj.gljMakeCurrent() == false ) { if(glj.gljClassDebug) System.out.println("GLAnimCanvas problem in gljMakeCurrent() method"); @@ -248,7 +270,7 @@ public class GLAnimCanvas extends GLCanvas * ReInit should be overwritten by you, * to enter your re-initialisation within setSuspended(false) * - * @see GLAnimCanvas#setSuspended + * @see gl4java.awt.GLAnimCanvas#setSuspended */ public void ReInit() { @@ -271,8 +293,8 @@ public class GLAnimCanvas extends GLCanvas * <p> * * @param b if true, uses repaint (default), otherwise directly sDisplay - * @see GLCanvas#sDisplay - * @see GLAnimCanvas#setUseFpsSleep + * @see gl4java.awt.GLCanvas#sDisplay + * @see gl4java.awt.GLAnimCanvas#setUseFpsSleep */ public void setUseRepaint(boolean b) { @@ -288,8 +310,8 @@ public class GLAnimCanvas extends GLCanvas * <p> * * @param b if true, uses Fps sleeping, else not ! - * @see GLCanvas#sDisplay - * @see GLAnimCanvas#setUseRepaint + * @see gl4java.awt.GLCanvas#sDisplay + * @see gl4java.awt.GLAnimCanvas#setUseRepaint */ public void setUseFpsSleep(boolean b) { @@ -324,21 +346,42 @@ public class GLAnimCanvas extends GLCanvas public synchronized void stop() { killme = null; - threadSuspended=false; - notify(); + threadSuspended=false; + + notifyAll(); } /** + * You should call this before releasing/dispose this Window ! + * Also you can overwrite this class, + * to dispose your own elements, e.g. a Frame etc. - + * but be shure that you call + * cvsDispose implementation call this one ! + * + * This function calls gljDestroy of GLContext ! + * + * @see gl4java.GLContext#gljDestroy + * @see gl4java.awt.GLCanvas#cvsDispose + * @see gl4java.awt.GLCanvas#doCleanup + */ + public void cvsDispose() + { + stop(); + super.cvsDispose(); + } + + /** * Should be set in display, * whether to render or not while the animation loop * <p> * If shallWeRender is false, * this thread will suspend ! * - * @see GLAnimCanvas#display - * @see GLAnimCanvas#run + * @see gl4java.awt.GLAnimCanvas#display + * @see gl4java.awt.GLAnimCanvas#run */ protected boolean shallWeRender = true; + protected boolean isRunning = false; private long _fDelay = 0; private long _fDelay_Frames = 10; @@ -349,14 +392,18 @@ public class GLAnimCanvas extends GLCanvas * The running loop for animations * which initiates the call of display * - * @see GLAnimCanvas#shallWeRender - * @see GLAnimCanvas#display - * @see GLAnimCanvas#diplay + * @see gl4java.awt.GLAnimCanvas#shallWeRender + * @see gl4java.awt.GLAnimCanvas#display */ public void run() { Thread thisThread = Thread.currentThread(); + isRunning = true; + + synchronized (this) { + globalThreadNumber++; + } while (killme==thisThread) { @@ -370,8 +417,7 @@ public class GLAnimCanvas extends GLCanvas else sDisplay(); } else { - // lets sleep ... - synchronized (this) { + synchronized (this) { threadSuspended=true; } } @@ -399,7 +445,9 @@ public class GLAnimCanvas extends GLCanvas } Thread.currentThread().sleep(dFpsMilli, 0 ); - } + } else { + Thread.yield(); + } if (threadSuspended) { stopFpsCounter(); @@ -411,6 +459,15 @@ public class GLAnimCanvas extends GLCanvas } catch (InterruptedException e) {} } + + if(glj!=null) + glj.gljFree(); // just to be sure .. + + synchronized (this) { + globalThreadNumber--; + } + + isRunning = false; } /** @@ -422,8 +479,8 @@ public class GLAnimCanvas extends GLCanvas * @param suspend if true the thread will be suspended, * if false, the thread will be (re)started * - * @see GLAnimCanvas#isAlive - * @see GLAnimCanvas#start + * @see gl4java.awt.GLAnimCanvas#isAlive + * @see gl4java.awt.GLAnimCanvas#start */ public void setSuspended(boolean suspend) { @@ -442,8 +499,8 @@ public class GLAnimCanvas extends GLCanvas * @param reInit if true the ReInit will be called additionally, * where the user can set additional initialisations * - * @see GLAnimCanvas#isAlive - * @see GLAnimCanvas#start + * @see gl4java.awt.GLAnimCanvas#isAlive + * @see gl4java.awt.GLAnimCanvas#start */ public synchronized void setSuspended(boolean suspend, boolean reInit) { @@ -461,17 +518,17 @@ public class GLAnimCanvas extends GLCanvas ReInit(); threadSuspended=false; - notify(); + notifyAll(); } } /** * is the thread alive, means is started and not died ? * - * @see GLAnimCanvas#run - * @see GLAnimCanvas#setSuspended - * @see GLAnimCanvas#start - * @see GLAnimCanvas#stop + * @see gl4java.awt.GLAnimCanvas#run + * @see gl4java.awt.GLAnimCanvas#setSuspended + * @see gl4java.awt.GLAnimCanvas#start + * @see gl4java.awt.GLAnimCanvas#stop */ public boolean isAlive() { @@ -483,10 +540,10 @@ public class GLAnimCanvas extends GLCanvas * is the thread suspended, means is started but waiting, * or not alive (ok :-| - but it is practical) * - * @see GLAnimCanvas#run - * @see GLAnimCanvas#setSuspended - * @see GLAnimCanvas#start - * @see GLAnimCanvas#stop + * @see gl4java.awt.GLAnimCanvas#run + * @see gl4java.awt.GLAnimCanvas#setSuspended + * @see gl4java.awt.GLAnimCanvas#start + * @see gl4java.awt.GLAnimCanvas#stop */ public boolean isSuspended() { @@ -507,14 +564,14 @@ public class GLAnimCanvas extends GLCanvas * this function is called automatically by * start and setSuspended * - * @see GLAnimCanvas#start - * @see GLAnimCanvas#setSuspended - * @see GLAnimCanvas#resetFpsCounter - * @see GLAnimCanvas#stopFpsCounter - * @see GLAnimCanvas#getFps - * @see GLAnimCanvas#getFpsDuration - * @see GLAnimCanvas#getFpsFrames - * @see GLAnimCanvas#setVerboseFps + * @see gl4java.awt.GLAnimCanvas#start + * @see gl4java.awt.GLAnimCanvas#setSuspended + * @see gl4java.awt.GLAnimCanvas#resetFpsCounter + * @see gl4java.awt.GLAnimCanvas#stopFpsCounter + * @see gl4java.awt.GLAnimCanvas#getFps + * @see gl4java.awt.GLAnimCanvas#getFpsDuration + * @see gl4java.awt.GLAnimCanvas#getFpsFrames + * @see gl4java.awt.GLAnimCanvas#setVerboseFps */ public void resetFpsCounter() { @@ -535,14 +592,14 @@ public class GLAnimCanvas extends GLCanvas * All data's are print out on System.out * if verboseFps is set ! * - * @see GLAnimCanvas#run - * @see GLAnimCanvas#shallWeRender - * @see GLAnimCanvas#resetFpsCounter - * @see GLAnimCanvas#stopFpsCounter - * @see GLAnimCanvas#getFps - * @see GLAnimCanvas#getFpsDuration - * @see GLAnimCanvas#getFpsFrames - * @see GLAnimCanvas#setVerboseFps + * @see gl4java.awt.GLAnimCanvas#run + * @see gl4java.awt.GLAnimCanvas#shallWeRender + * @see gl4java.awt.GLAnimCanvas#resetFpsCounter + * @see gl4java.awt.GLAnimCanvas#stopFpsCounter + * @see gl4java.awt.GLAnimCanvas#getFps + * @see gl4java.awt.GLAnimCanvas#getFpsDuration + * @see gl4java.awt.GLAnimCanvas#getFpsFrames + * @see gl4java.awt.GLAnimCanvas#setVerboseFps */ public void stopFpsCounter() { @@ -571,14 +628,14 @@ public class GLAnimCanvas extends GLCanvas * <p> * verboseFps is set to true by default ! * - * @see GLAnimCanvas#run - * @see GLAnimCanvas#shallWeRender - * @see GLAnimCanvas#resetFpsCounter - * @see GLAnimCanvas#stopFpsCounter - * @see GLAnimCanvas#getFps - * @see GLAnimCanvas#getFpsDuration - * @see GLAnimCanvas#getFpsFrames - * @see GLAnimCanvas#setVerboseFps + * @see gl4java.awt.GLAnimCanvas#run + * @see gl4java.awt.GLAnimCanvas#shallWeRender + * @see gl4java.awt.GLAnimCanvas#resetFpsCounter + * @see gl4java.awt.GLAnimCanvas#stopFpsCounter + * @see gl4java.awt.GLAnimCanvas#getFps + * @see gl4java.awt.GLAnimCanvas#getFpsDuration + * @see gl4java.awt.GLAnimCanvas#getFpsFrames + * @see gl4java.awt.GLAnimCanvas#setVerboseFps */ public void setVerboseFps(boolean v) { @@ -590,12 +647,12 @@ public class GLAnimCanvas extends GLCanvas * <p> * this data is avaiable after calling stopFpsCounter * - * @see GLAnimCanvas#resetFpsCounter - * @see GLAnimCanvas#stopFpsCounter - * @see GLAnimCanvas#getFps - * @see GLAnimCanvas#getFpsDuration - * @see GLAnimCanvas#getFpsFrames - * @see GLAnimCanvas#setVerboseFps + * @see gl4java.awt.GLAnimCanvas#resetFpsCounter + * @see gl4java.awt.GLAnimCanvas#stopFpsCounter + * @see gl4java.awt.GLAnimCanvas#getFps + * @see gl4java.awt.GLAnimCanvas#getFpsDuration + * @see gl4java.awt.GLAnimCanvas#getFpsFrames + * @see gl4java.awt.GLAnimCanvas#setVerboseFps */ public double getFps() { @@ -607,12 +664,12 @@ public class GLAnimCanvas extends GLCanvas * <p> * this data is avaiable after calling stopFpsCounter * - * @see GLAnimCanvas#resetFpsCounter - * @see GLAnimCanvas#stopFpsCounter - * @see GLAnimCanvas#getFps - * @see GLAnimCanvas#getFpsDuration - * @see GLAnimCanvas#getFpsFrames - * @see GLAnimCanvas#setVerboseFps + * @see gl4java.awt.GLAnimCanvas#resetFpsCounter + * @see gl4java.awt.GLAnimCanvas#stopFpsCounter + * @see gl4java.awt.GLAnimCanvas#getFps + * @see gl4java.awt.GLAnimCanvas#getFpsDuration + * @see gl4java.awt.GLAnimCanvas#getFpsFrames + * @see gl4java.awt.GLAnimCanvas#setVerboseFps */ public long getFpsDuration() { @@ -624,12 +681,12 @@ public class GLAnimCanvas extends GLCanvas * <p> * this data is avaiable after calling stopFpsCounter * - * @see GLAnimCanvas#resetFpsCounter - * @see GLAnimCanvas#stopFpsCounter - * @see GLAnimCanvas#getFps - * @see GLAnimCanvas#getFpsDuration - * @see GLAnimCanvas#getFpsFrames - * @see GLAnimCanvas#setVerboseFps + * @see gl4java.awt.GLAnimCanvas#resetFpsCounter + * @see gl4java.awt.GLAnimCanvas#stopFpsCounter + * @see gl4java.awt.GLAnimCanvas#getFps + * @see gl4java.awt.GLAnimCanvas#getFpsDuration + * @see gl4java.awt.GLAnimCanvas#getFpsFrames + * @see gl4java.awt.GLAnimCanvas#setVerboseFps */ public long getFpsFrames() { @@ -651,7 +708,7 @@ public class GLAnimCanvas extends GLCanvas /** * Just set the FramePerSecounds for Animation * - * @see GLAnimCanvas#getMaxFps + * @see gl4java.awt.GLAnimCanvas#getMaxFps */ public void setAnimateFps(double fps) { @@ -675,7 +732,7 @@ public class GLAnimCanvas extends GLCanvas * this value is avaiable after the thread is started * and the first frames are rendered ! * - * @see GLAnimCanvas#setAnimateFps + * @see gl4java.awt.GLAnimCanvas#setAnimateFps */ public double getMaxFps() { diff --git a/gl4java/awt/GLCanvas.java b/gl4java/awt/GLCanvas.java index 4a537f9..78775b6 100644 --- a/gl4java/awt/GLCanvas.java +++ b/gl4java/awt/GLCanvas.java @@ -62,7 +62,7 @@ import java.awt.event.*; * </pre> * <p> * - * @see GLAnimCanvas + * @see gl4java.awt.GLAnimCanvas * @version 2.0, 21. April 1999 * @author Sven Goethel * @@ -87,8 +87,8 @@ public class GLCanvas extends Canvas * This value is updated after a GLContext is created with the * original updated value of GLContext ! * - * @see GLCanvas#preInit - * @see GLCanvas#paint + * @see gl4java.awt.GLCanvas#preInit + * @see gl4java.awt.GLCanvas#paint */ protected boolean doubleBuffer = true; @@ -97,8 +97,8 @@ public class GLCanvas extends Canvas * This value is updated after a GLContext is created with the * original updated value of GLContext ! * - * @see GLCanvas#preInit - * @see GLCanvas#paint + * @see gl4java.awt.GLCanvas#preInit + * @see gl4java.awt.GLCanvas#paint */ protected int stencilBits = 0; @@ -114,8 +114,8 @@ public class GLCanvas extends Canvas * The output value, after the constructor returns, * it is the summary of all accumulation bits of all components ! * - * @see GLCanvas#preInit - * @see GLCanvas#paint + * @see gl4java.awt.GLCanvas#preInit + * @see gl4java.awt.GLCanvas#paint */ protected int accumSize = 0; @@ -124,8 +124,8 @@ public class GLCanvas extends Canvas * This value is updated after a GLContext is created with the * original updated value of GLContext ! * - * @see GLCanvas#preInit - * @see GLCanvas#paint + * @see gl4java.awt.GLCanvas#preInit + * @see gl4java.awt.GLCanvas#paint */ protected boolean stereoView = false; @@ -134,8 +134,8 @@ public class GLCanvas extends Canvas * This value is updated after a GLContext is created with the * original updated value of GLContext ! * - * @see GLCanvas#preInit - * @see GLCanvas#paint + * @see gl4java.awt.GLCanvas#preInit + * @see gl4java.awt.GLCanvas#paint */ protected boolean rgba = true; @@ -144,16 +144,16 @@ public class GLCanvas extends Canvas * This value is updated after a GLContext is created with the * original updated value of GLContext ! * - * @see GLCanvas#preInit - * @see GLCanvas#paint + * @see gl4java.awt.GLCanvas#preInit + * @see gl4java.awt.GLCanvas#paint */ protected boolean createOwnWindow = false; /** - * The context with witch display lists and textures will be shared. + * The context with wich display lists and textures will be shared. * - * @see GLCanvas#preInit - * @see GLCanvas#paint + * @see gl4java.awt.GLCanvas#preInit + * @see gl4java.awt.GLCanvas#paint */ protected GLContext sharedGLContext; @@ -240,7 +240,7 @@ public class GLCanvas extends Canvas * @param g the Graphics Context * @return void * - * @see GLCanvas#paint + * @see gl4java.awt.GLCanvas#paint */ public void update(Graphics g) { @@ -260,7 +260,7 @@ public class GLCanvas extends Canvas * * @return void * - * @see GLCanvas#paint + * @see gl4java.awt.GLCanvas#paint */ public final Window getTopLevelWindow() { return topLevelWindow; } @@ -283,11 +283,11 @@ public class GLCanvas extends Canvas * in your derivation. * * @see gl4java.GLContext#GLContext - * @see GLCanvas#cvsIsInit - * @see GLCanvas#sDisplay - * @see GLCanvas#display - * @see GLCanvas#preInit - * @see GLCanvas#init + * @see gl4java.awt.GLCanvas#cvsIsInit + * @see gl4java.awt.GLCanvas#sDisplay + * @see gl4java.awt.GLCanvas#display + * @see gl4java.awt.GLCanvas#preInit + * @see gl4java.awt.GLCanvas#init */ public synchronized final void paint( Graphics g ) { @@ -342,10 +342,6 @@ public class GLCanvas extends Canvas if(glj!=null && glj.gljIsInit()) cvsInitialized=true; } - /* - if( mustResize ) size = getSize(); - g.setClip(0, 0, size.width, size.height ) ; - */ sDisplay(); } @@ -358,12 +354,12 @@ public class GLCanvas extends Canvas * * @return void * - * @see GLCanvas#paint - * @see GLCanvas#doubleBuffer - * @see GLCanvas#stereoView - * @see GLCanvas#rgba - * @see GLCanvas#stencilBits - * @see GLCanvas#accumSize + * @see gl4java.awt.GLCanvas#paint + * @see gl4java.awt.GLCanvas#doubleBuffer + * @see gl4java.awt.GLCanvas#stereoView + * @see gl4java.awt.GLCanvas#rgba + * @see gl4java.awt.GLCanvas#stencilBits + * @see gl4java.awt.GLCanvas#accumSize */ public void preInit() { @@ -378,7 +374,7 @@ public class GLCanvas extends Canvas * * @return void * - * @see GLCanvas#paint + * @see gl4java.awt.GLCanvas#paint */ public void init() { @@ -393,7 +389,7 @@ public class GLCanvas extends Canvas * * @return void * - * @see GLCanvas#cvsDispose + * @see gl4java.awt.GLCanvas#cvsDispose */ public void doCleanup() { @@ -406,8 +402,8 @@ public class GLCanvas extends Canvas * * @return boolean * - * @see GLCanvas#paint - * @see GLCanvas#init + * @see gl4java.awt.GLCanvas#paint + * @see gl4java.awt.GLCanvas#init */ public boolean cvsIsInit() { @@ -433,8 +429,8 @@ public class GLCanvas extends Canvas * * @return void * - * @see GLCanvas#paint - * @see GLCanvas#display + * @see gl4java.awt.GLCanvas#paint + * @see gl4java.awt.GLCanvas#display */ public synchronized final void sDisplay() { @@ -447,7 +443,7 @@ public class GLCanvas extends Canvas if( mustResize ) { - if( (ok = glj.gljMakeCurrent()) == true ) + if( glj.gljMakeCurrent() == true ) { size = getSize(); glj.gljResize( size.width, size.height ) ; @@ -455,6 +451,7 @@ public class GLCanvas extends Canvas mustResize = false; invalidate(); repaint(100); + glj.gljFree(); } } if(ok) @@ -471,6 +468,15 @@ public class GLCanvas extends Canvas * (and sDisplay is called by paint !). * The derived-class (Your Subclass) will redefine this, to draw it's own... * + * <p> + * + * You MUST encapsulate your OpenGL call's within: + * <pre> + - glj.gljMakeCurrent() + YOUR OpenGL commands here ! + - glj.gljFree() + * </pre> + * * BE SURE, if you want to call 'display' by yourself * (e.g. in the run method for animation) * YOU HAVE TO CALL sDisplay ! @@ -480,8 +486,10 @@ public class GLCanvas extends Canvas * * @return void * - * @see GLCanvas#sDisplay - * @see GLCanvas#paint + * @see gl4java.awt.GLCanvas#sDisplay + * @see gl4java.awt.GLCanvas#paint + * @see gl4java.GLContext#gljMakeCurrent + * @see gl4java.GLContext#gljSwap */ public void display() { @@ -508,8 +516,8 @@ public class GLCanvas extends Canvas * @param height the new height * @return void * - * @see GLCanvas#paint - * @see GLCanvas#sDisplay + * @see gl4java.awt.GLCanvas#paint + * @see gl4java.awt.GLCanvas#sDisplay */ public void reshape( int width, int height ) { @@ -533,8 +541,8 @@ public class GLCanvas extends Canvas * @param e the element, which is resized * @return void * - * @see GLCanvas#paint - * @see GLCanvas#reshape + * @see gl4java.awt.GLCanvas#paint + * @see gl4java.awt.GLCanvas#reshape */ public void componentResized(ComponentEvent e) { @@ -644,7 +652,7 @@ public class GLCanvas extends Canvas * This function calls gljDestroy of GLContext ! * * @see gl4java.GLContext#gljDestroy - * @see GLCanvas#doCleanup + * @see gl4java.awt.GLCanvas#doCleanup */ public void cvsDispose() { @@ -664,11 +672,13 @@ public class GLCanvas extends Canvas context, so it all works out fine. */ try { - glj.gljFree(); - doCleanup(); - //locks and free's GLContext glj.setEnabled(false); + + setVisible(false); + doCleanup(); + glj.gljDestroy(); + glj = null; needCvsDispose = false; } catch (Exception ex) |