diff options
Diffstat (limited to 'src')
6 files changed, 46 insertions, 3 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/swt/GLCanvas.java b/src/jogl/classes/com/jogamp/opengl/swt/GLCanvas.java index cad780a89..cd5aa338d 100644 --- a/src/jogl/classes/com/jogamp/opengl/swt/GLCanvas.java +++ b/src/jogl/classes/com/jogamp/opengl/swt/GLCanvas.java @@ -725,6 +725,11 @@ public class GLCanvas extends Canvas implements GLAutoDrawable, GLSharedContextS } @Override + public boolean areAllGLEventListenerInitialized() { + return helper.areAllGLEventListenerInitialized(); + } + + @Override public boolean getGLEventListenerInitState(GLEventListener listener) { return helper.getGLEventListenerInitState(listener); } diff --git a/src/jogl/classes/javax/media/opengl/GLSharedContextSetter.java b/src/jogl/classes/javax/media/opengl/GLSharedContextSetter.java index 69ee03546..2ea4e4cd6 100644 --- a/src/jogl/classes/javax/media/opengl/GLSharedContextSetter.java +++ b/src/jogl/classes/javax/media/opengl/GLSharedContextSetter.java @@ -99,6 +99,12 @@ package javax.media.opengl; */ public interface GLSharedContextSetter extends GLAutoDrawable { /** + * Returns true if all {@link GLEventListener} are initialized, otherwise false. + * @deprecated Promote method to {@link GLAutoDrawable} + */ + boolean areAllGLEventListenerInitialized(); + + /** * Specifies an {@link GLContext OpenGL context}, which shall be shared by this {@link GLAutoDrawable}'s {@link GLContext}. * <p> * Since the {@link GLDrawable drawable} and {@link GLContext context} is created @@ -130,8 +136,12 @@ public interface GLSharedContextSetter extends GLAutoDrawable { * </p> * <p> * A set <i>sharedAutoDrawable</i> will block context creation, i.e. {@link GLAutoDrawable#initialization GLAutoDrawable initialization}, - * as long it's {@link GLContext} is <code>null</code> - * or has not been {@link GLContext#isCreated() created natively}. + * as long it's + * <ul> + * <li>{@link GLContext} is <code>null</code>, or</li> + * <li>{@link GLContext} has not been {@link GLContext#isCreated() created natively}, or</li> + * <li>{@link GLEventListener} are <i>not</i> {@link GLSharedContextSetter#areAllGLEventListenerInitialized() completely initialized}</li> + * </ul> * </p> * <p> * See <a href="#lifecycle">Lifecycle Considerations</a>. diff --git a/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java b/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java index 7ea216dd9..abf670c95 100644 --- a/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java +++ b/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java @@ -970,6 +970,11 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing } @Override + public boolean areAllGLEventListenerInitialized() { + return helper.areAllGLEventListenerInitialized(); + } + + @Override public boolean getGLEventListenerInitState(GLEventListener listener) { return helper.getGLEventListenerInitState(listener); } diff --git a/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java b/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java index f7200186b..522585f16 100644 --- a/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java +++ b/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java @@ -805,6 +805,11 @@ public class GLJPanel extends JPanel implements AWTGLAutoDrawable, WindowClosing } @Override + public boolean areAllGLEventListenerInitialized() { + return helper.areAllGLEventListenerInitialized(); + } + + @Override public boolean getGLEventListenerInitState(GLEventListener listener) { return helper.getGLEventListenerInitState(listener); } diff --git a/src/jogl/classes/jogamp/opengl/GLAutoDrawableBase.java b/src/jogl/classes/jogamp/opengl/GLAutoDrawableBase.java index 42d0a2ec4..7cd685d5a 100644 --- a/src/jogl/classes/jogamp/opengl/GLAutoDrawableBase.java +++ b/src/jogl/classes/jogamp/opengl/GLAutoDrawableBase.java @@ -510,6 +510,11 @@ public abstract class GLAutoDrawableBase implements GLAutoDrawable, GLStateKeepe } @Override + public boolean areAllGLEventListenerInitialized() { + return helper.areAllGLEventListenerInitialized(); + } + + @Override public boolean getGLEventListenerInitState(GLEventListener listener) { return helper.getGLEventListenerInitState(listener); } diff --git a/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java b/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java index b498748fd..0e135d5e0 100644 --- a/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java +++ b/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java @@ -58,6 +58,7 @@ import javax.media.opengl.GLEventListener; import javax.media.opengl.GLException; import javax.media.opengl.GLFBODrawable; import javax.media.opengl.GLRunnable; +import javax.media.opengl.GLSharedContextSetter; /** Encapsulates the implementation of most of the GLAutoDrawable's methods to be able to share it between GLAutoDrawable implementations like GLAutoDrawableBase, GLCanvas and GLJPanel. */ @@ -149,8 +150,14 @@ public class GLDrawableHelper { final GLContext shareWith; final boolean pending; if ( null != sharedAutoDrawable ) { + final boolean allGLELInitialized; + if( sharedAutoDrawable instanceof GLSharedContextSetter ) { + allGLELInitialized = ((GLSharedContextSetter)sharedAutoDrawable).areAllGLEventListenerInitialized(); + } else { + allGLELInitialized = true; // we have to assume 'yes' + } shareWith = sharedAutoDrawable.getContext(); - pending = null == shareWith || !shareWith.isCreated(); + pending = null == shareWith || !shareWith.isCreated() || !allGLELInitialized; } else { shareWith = sharedContext; pending = null != shareWith && !shareWith.isCreated(); @@ -434,6 +441,12 @@ public class GLDrawableHelper { } } + public final boolean areAllGLEventListenerInitialized() { + synchronized(listenersLock) { + return 0 == listenersToBeInit.size(); + } + } + public final boolean getGLEventListenerInitState(GLEventListener listener) { synchronized(listenersLock) { return !listenersToBeInit.contains(listener); |