From 0c8f34965355672b12f1b3e7c99ef921fbfe12a5 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Fri, 21 Jan 2005 08:35:35 +0000 Subject: [PATCH] Mac OS X: Move GLCanvas init() from paint to immediately after being displayable to avoid deadlocks --- src/java/org/lwjgl/opengl/MacOSXFrame.java | 2 +- src/java/org/lwjgl/opengl/MacOSXGLCanvas.java | 37 +++++++------------ 2 files changed, 15 insertions(+), 24 deletions(-) diff --git a/src/java/org/lwjgl/opengl/MacOSXFrame.java b/src/java/org/lwjgl/opengl/MacOSXFrame.java index e3c21f23..85f1820c 100644 --- a/src/java/org/lwjgl/opengl/MacOSXFrame.java +++ b/src/java/org/lwjgl/opengl/MacOSXFrame.java @@ -90,9 +90,9 @@ final class MacOSXFrame extends Frame implements WindowListener, ComponentListen setVisible(true); requestFocus(); canvas.requestFocus(); + canvas.initializeCanvas(); } }); - canvas.waitForCanvasCreated(); } public Rectangle syncGetBounds() { diff --git a/src/java/org/lwjgl/opengl/MacOSXGLCanvas.java b/src/java/org/lwjgl/opengl/MacOSXGLCanvas.java index e0b9b2fb..17c690f2 100644 --- a/src/java/org/lwjgl/opengl/MacOSXGLCanvas.java +++ b/src/java/org/lwjgl/opengl/MacOSXGLCanvas.java @@ -48,7 +48,6 @@ final class MacOSXGLCanvas extends Canvas implements ComponentListener { private int width; private int height; private boolean context_update; - private boolean canvas_created; private boolean dirty; public void update(Graphics g) { @@ -56,18 +55,22 @@ final class MacOSXGLCanvas extends Canvas implements ComponentListener { } public void paint(Graphics g) { + // Do nothing + } + + /** + * This initializes the canvas and binds the context to it. Should only + * be called from the AWT dispatch thread. + */ + public void initializeCanvas() { synchronized ( this ) { dirty = true; - if ( !canvas_created ) { - setFocusTraversalKeysEnabled(false); - /* Input methods are not enabled in fullscreen anyway, so disable always */ - enableInputMethods(false); - addComponentListener(this); - ((MacOSXDisplay)Display.getImplementation()).setView(this); - canvas_created = true; - setUpdate(); - notify(); - } + setFocusTraversalKeysEnabled(false); + /* Input methods are not enabled in fullscreen anyway, so disable always */ + enableInputMethods(false); + addComponentListener(this); + ((MacOSXDisplay)Display.getImplementation()).setView(this); + setUpdate(); } } @@ -80,18 +83,6 @@ final class MacOSXGLCanvas extends Canvas implements ComponentListener { return result; } - public void waitForCanvasCreated() { - synchronized ( this ) { - while ( !canvas_created ) { - try { - wait(); - } catch (InterruptedException e) { - // ignore - } - } - } - } - public boolean syncShouldUpdateContext() { boolean should_update; synchronized ( this ) {