diff options
author | Sven Gothel <[email protected]> | 2013-01-26 05:58:10 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-01-26 05:58:10 +0100 |
commit | 7fd5f76e1eb4bbf93fe9b1171744bd755d8f96e4 (patch) | |
tree | ad1f4e7cd3fe690662bcdded63b19d7de98dc739 /src | |
parent | e6ccafabb8fefa2381e7c102ca9cba4ef7555035 (diff) |
ProxySurface: Add 'NativeSurface getUpstreamSurface()' ; ProxySurfaceImpl: Don't cache 'displayHandle'
- ProxySurface: Add 'NativeSurface getUpstreamSurface()' allowing querying direct access of a backing surface representing this instance.
- Use case: EGLWrappedSurface
- Default impl. returns null
- ProxySurfaceImpl: Don't cache 'displayHandle'
- getDisplayHandle() is 'final', no more 'shortcut' code allowed
due to re-association incl. display handle.
- See commit b738983638703bb721ee4c9820c8ef43e2252e73
Diffstat (limited to 'src')
3 files changed, 32 insertions, 16 deletions
diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLWrappedSurface.java b/src/jogl/classes/jogamp/opengl/egl/EGLWrappedSurface.java index b36303392..2c2c6cc4b 100644 --- a/src/jogl/classes/jogamp/opengl/egl/EGLWrappedSurface.java +++ b/src/jogl/classes/jogamp/opengl/egl/EGLWrappedSurface.java @@ -20,6 +20,7 @@ public class EGLWrappedSurface extends WrappedSurface { } } + @Override public final NativeSurface getUpstreamSurface() { return ((EGLUpstreamSurfaceHook)super.getUpstreamSurfaceHook()).getUpstreamSurface(); } diff --git a/src/nativewindow/classes/javax/media/nativewindow/ProxySurface.java b/src/nativewindow/classes/javax/media/nativewindow/ProxySurface.java index 395fdc818..a83739a1d 100644 --- a/src/nativewindow/classes/javax/media/nativewindow/ProxySurface.java +++ b/src/nativewindow/classes/javax/media/nativewindow/ProxySurface.java @@ -65,7 +65,20 @@ public interface ProxySurface extends MutableSurface { /** Allow redefining the AbstractGraphicsConfiguration */ public void setGraphicsConfiguration(AbstractGraphicsConfiguration cfg); - /** Returns the set {@link UpstreamSurfaceHook}, or null if not set. */ + /** + * Return the upstream {@link NativeSurface} if used, otherwise <code>null</code>. + * <p> + * An upstream {@link NativeSurface} may backup this {@link ProxySurface} instance's representation, + * e.g. via a {@link #setUpstreamSurfaceHook(UpstreamSurfaceHook) set} {@link UpstreamSurfaceHook}. + * </p> + * <p> + * One example is the JOGL EGLWrappedSurface, which might be backed up by a + * native platform NativeSurface (X11, WGL, CGL, ..). + * </p> + */ + public NativeSurface getUpstreamSurface(); + + /** Returns the {@link UpstreamSurfaceHook} if {@link #setUpstreamSurfaceHook(UpstreamSurfaceHook) set}, otherwise <code>null</code>. */ public UpstreamSurfaceHook getUpstreamSurfaceHook(); /** diff --git a/src/nativewindow/classes/jogamp/nativewindow/ProxySurfaceImpl.java b/src/nativewindow/classes/jogamp/nativewindow/ProxySurfaceImpl.java index 63f56cbae..56e342793 100644 --- a/src/nativewindow/classes/jogamp/nativewindow/ProxySurfaceImpl.java +++ b/src/nativewindow/classes/jogamp/nativewindow/ProxySurfaceImpl.java @@ -42,7 +42,6 @@ import com.jogamp.common.util.locks.RecursiveLock; public abstract class ProxySurfaceImpl implements ProxySurface { private final SurfaceUpdatedHelper surfaceUpdatedHelper = new SurfaceUpdatedHelper(); - protected long displayHandle; // convenient ref of config.screen.device.handle private AbstractGraphicsConfiguration config; // control access due to delegation private UpstreamSurfaceHook upstream; private long surfaceHandle_old; @@ -65,7 +64,6 @@ public abstract class ProxySurfaceImpl implements ProxySurface { throw new IllegalArgumentException("null UpstreamSurfaceHook"); } this.config = cfg; - this.displayHandle=config.getNativeGraphicsConfiguration().getScreen().getDevice().getHandle(); this.upstream = upstream; this.surfaceHandle_old = 0; this.implBitfield = 0; @@ -76,9 +74,12 @@ public abstract class ProxySurfaceImpl implements ProxySurface { } @Override - public final UpstreamSurfaceHook getUpstreamSurfaceHook() { return upstream; } + public NativeSurface getUpstreamSurface() { return null; } @Override + public final UpstreamSurfaceHook getUpstreamSurfaceHook() { return upstream; } + + @Override public void setUpstreamSurfaceHook(UpstreamSurfaceHook hook) { if(null == hook) { throw new IllegalArgumentException("null UpstreamSurfaceHook"); @@ -96,7 +97,6 @@ public abstract class ProxySurfaceImpl implements ProxySurface { if(upstreamSurfaceHookLifecycleEnabled) { upstream.create(this); } - this.displayHandle=config.getNativeGraphicsConfiguration().getScreen().getDevice().getHandle(); this.surfaceHandle_old = 0; } @@ -111,7 +111,6 @@ public abstract class ProxySurfaceImpl implements ProxySurface { } invalidateImpl(); } - this.displayHandle = 0; this.surfaceHandle_old = 0; } @@ -123,11 +122,6 @@ public abstract class ProxySurfaceImpl implements ProxySurface { throw new InternalError("UpstreamSurfaceHook given, but required method not implemented."); } - @Override - public final long getDisplayHandle() { - return displayHandle; - } - protected final AbstractGraphicsConfiguration getPrivateGraphicsConfiguration() { return config; } @@ -138,6 +132,11 @@ public abstract class ProxySurfaceImpl implements ProxySurface { } @Override + public final long getDisplayHandle() { + return config.getNativeGraphicsConfiguration().getScreen().getDevice().getHandle(); + } + + @Override public final void setGraphicsConfiguration(AbstractGraphicsConfiguration cfg) { config = cfg; } @@ -305,12 +304,15 @@ public abstract class ProxySurfaceImpl implements ProxySurface { if(null == sink) { sink = new StringBuilder(); } - sink.append(getUpstreamSurfaceHook()). - append(", displayHandle 0x" + Long.toHexString(getDisplayHandle())). - append(", surfaceHandle 0x" + Long.toHexString(getSurfaceHandle())). - append(", size " + getWidth() + "x" + getHeight()).append(", "); + sink.append("displayHandle 0x" + Long.toHexString(getDisplayHandle())). + append("\n, surfaceHandle 0x" + Long.toHexString(getSurfaceHandle())). + append("\n, size " + getWidth() + "x" + getHeight()).append("\n, "); getUpstreamOptionBits(sink); - sink.append(", surfaceLock "+surfaceLock); + sink.append("\n, "+config). + append("\n, surfaceLock "+surfaceLock+"\n, "). + append(getUpstreamSurfaceHook()). + append("\n, upstreamSurface "+(null != getUpstreamSurface())); + // append("\n, upstreamSurface "+getUpstreamSurface()); return sink; } |