diff options
8 files changed, 115 insertions, 6 deletions
diff --git a/src/jogl/classes/javax/media/opengl/GLDrawable.java b/src/jogl/classes/javax/media/opengl/GLDrawable.java index f4cd77059..e2048b288 100644 --- a/src/jogl/classes/javax/media/opengl/GLDrawable.java +++ b/src/jogl/classes/javax/media/opengl/GLDrawable.java @@ -42,6 +42,7 @@ package javax.media.opengl; import javax.media.nativewindow.AbstractGraphicsConfiguration; import javax.media.nativewindow.NativeSurface; +import javax.media.nativewindow.NativeSurfaceHolder; /** An abstraction for an OpenGL rendering target. A GLDrawable's @@ -50,7 +51,7 @@ import javax.media.nativewindow.NativeSurface; create an OpenGL context, but all implementations of {@link GLAutoDrawable} do so upon creation. */ -public interface GLDrawable { +public interface GLDrawable extends NativeSurfaceHolder { /** * Creates a new context for drawing to this drawable that will * optionally share display lists and other server-side OpenGL @@ -158,8 +159,6 @@ public interface GLDrawable { */ public GLProfile getGLProfile(); - public NativeSurface getNativeSurface(); - /** * This is the GL/Windowing drawable handle.<br> * It is usually the {@link javax.media.nativewindow.NativeSurface#getSurfaceHandle()}, diff --git a/src/nativewindow/classes/javax/media/nativewindow/NativeSurface.java b/src/nativewindow/classes/javax/media/nativewindow/NativeSurface.java index b2a2bc4ee..0a9115f8c 100644 --- a/src/nativewindow/classes/javax/media/nativewindow/NativeSurface.java +++ b/src/nativewindow/classes/javax/media/nativewindow/NativeSurface.java @@ -36,7 +36,7 @@ package javax.media.nativewindow; the component is alive and realized/visible, NativeSurface must be able provide information such as the surface handle while it is locked.<P> */ -public interface NativeSurface extends SurfaceUpdatedListener { +public interface NativeSurface extends SurfaceUpdatedListener, NativeSurfaceHolder { /** Unlocked state */ public static final int LOCK_SURFACE_UNLOCKED = 0; diff --git a/src/nativewindow/classes/javax/media/nativewindow/NativeSurfaceHolder.java b/src/nativewindow/classes/javax/media/nativewindow/NativeSurfaceHolder.java new file mode 100644 index 000000000..46d8b3488 --- /dev/null +++ b/src/nativewindow/classes/javax/media/nativewindow/NativeSurfaceHolder.java @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2011 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package javax.media.nativewindow; + +/** + * This interface allows access to it's implementation's NativeSurface reference. + */ +public interface NativeSurfaceHolder { + /** + * Returns the {@link NativeSurface} object. + * <p> + * The returned object might be this instance in case this Object is a NativeSurface, + * or a contained NativeSurface instance. + * </p> + */ + public NativeSurface getNativeSurface(); +} diff --git a/src/nativewindow/classes/javax/media/nativewindow/NativeWindow.java b/src/nativewindow/classes/javax/media/nativewindow/NativeWindow.java index 76ac72953..1696cdb01 100644 --- a/src/nativewindow/classes/javax/media/nativewindow/NativeWindow.java +++ b/src/nativewindow/classes/javax/media/nativewindow/NativeWindow.java @@ -51,7 +51,7 @@ import javax.media.nativewindow.util.Point; implementation of {@link NativeWindowFactory NativeWindowFactory} which can create NativeWindow objects for its components. <P> */ -public interface NativeWindow extends NativeSurface { +public interface NativeWindow extends NativeSurface, NativeWindowHolder { /** * destroys the window and releases diff --git a/src/nativewindow/classes/javax/media/nativewindow/NativeWindowHolder.java b/src/nativewindow/classes/javax/media/nativewindow/NativeWindowHolder.java new file mode 100644 index 000000000..0c8b31aaa --- /dev/null +++ b/src/nativewindow/classes/javax/media/nativewindow/NativeWindowHolder.java @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2011 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package javax.media.nativewindow; + +/** + * This interface allows access to it's implementation's NativeWindow reference. + */ +public interface NativeWindowHolder { + /** + * Returns the {@link NativeWindow} object. + * <p> + * The returned object might be this instance in case this Object is a NativeWindow, + * or a contained NativeWindow instance. + * </p> + */ + public NativeWindow getNativeWindow(); +} diff --git a/src/nativewindow/classes/jogamp/nativewindow/WrappedSurface.java b/src/nativewindow/classes/jogamp/nativewindow/WrappedSurface.java index 4c2b1c875..0460ccb56 100644 --- a/src/nativewindow/classes/jogamp/nativewindow/WrappedSurface.java +++ b/src/nativewindow/classes/jogamp/nativewindow/WrappedSurface.java @@ -29,6 +29,7 @@ package jogamp.nativewindow; import javax.media.nativewindow.AbstractGraphicsConfiguration; +import javax.media.nativewindow.NativeSurface; import javax.media.nativewindow.ProxySurface; import javax.media.nativewindow.SurfaceChangeable; @@ -49,6 +50,10 @@ public class WrappedSurface extends ProxySurface implements SurfaceChangeable { surfaceHandle = 0; } + public NativeSurface getNativeSurface() { + return this; + } + public long getSurfaceHandle() { return surfaceHandle; } diff --git a/src/nativewindow/classes/jogamp/nativewindow/windows/GDISurface.java b/src/nativewindow/classes/jogamp/nativewindow/windows/GDISurface.java index 68cf8af45..bf3b649cf 100644 --- a/src/nativewindow/classes/jogamp/nativewindow/windows/GDISurface.java +++ b/src/nativewindow/classes/jogamp/nativewindow/windows/GDISurface.java @@ -29,6 +29,7 @@ package jogamp.nativewindow.windows; import javax.media.nativewindow.AbstractGraphicsConfiguration; +import javax.media.nativewindow.NativeSurface; import javax.media.nativewindow.NativeWindowException; import javax.media.nativewindow.ProxySurface; @@ -56,6 +57,10 @@ public class GDISurface extends ProxySurface { surfaceHandle=0; } + public NativeSurface getNativeSurface() { + return this; + } + protected int lockSurfaceImpl() { if (0 != surfaceHandle) { throw new InternalError("surface not released"); diff --git a/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java b/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java index e9ac272c8..51a2aa73b 100644 --- a/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java +++ b/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java @@ -195,6 +195,10 @@ public class GLWindow implements GLAutoDrawable, Window, NEWTEventConsumer, FPSC return window.getRequestedCapabilities(); } + public NativeWindow getNativeWindow() { + return window; + } + public final Window getWindow() { return window; } @@ -676,8 +680,18 @@ public class GLWindow implements GLAutoDrawable, Window, NEWTEventConsumer, FPSC // GLDrawable methods // + + /** + * {@inheritDoc} + * <p> + * Be aware that the returned NativeSurface may change. + * If this inner {@link GLDrawable} representation became realized (see {@link #isRealized()}) + * this {@link GLDrawable}'s {@link NativeSurface} instance is being returned. + * Otherwise this {@link Window} {@link NativeSurface}'s is being returned. + * </p> + */ public final NativeSurface getNativeSurface() { - return null!=drawable ? drawable.getNativeSurface() : null; + return null!=drawable ? drawable.getNativeSurface() : window.getNativeSurface(); } public final long getHandle() { |