diff options
author | Sven Gothel <[email protected]> | 2012-08-17 15:33:12 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-08-17 15:33:12 +0200 |
commit | da697607fce1e6d2b0c65fcc37030c88981b76ec (patch) | |
tree | 62897317fe74f2790f910574953a31204f0a92ee /src | |
parent | b193d85b406b36ce091ad6bfcc488e9dfda9e12b (diff) |
Fix EGLDrawableFactory.getEGLSurface(..): Catch WrappedSurface case w/ EGLDevice and EGLGraphicsConfiguration - Regression of 43a473b2005d7f59a7f4f5b8bc7ca9ae88b4e894
Do not create a WrappedSurface around a given WrappedSurface
if the latter is intended for EGL, i.e. uses EGLDevice and EGLGraphicsConfiguration
even though the surface handle is not valid [yet].
For this case we assume the WrappedSurface has a lifecycle hook
as it is used for the dummy drawable.
Otherwise we would have a recursive WrappedSurface, ie with
EGLDrawableFactory.createOnscreenDrawableImpl( dummySurface ),
where dummySurface is a WrappedSurface w/ EGL pbuffer drawable lifecycle hook.
Commit 43a473b2005d7f59a7f4f5b8bc7ca9ae88b4e894 didn't take the above case into account.
Diffstat (limited to 'src')
-rw-r--r-- | src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java index f7377a648..e145a959c 100644 --- a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java +++ b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java @@ -471,10 +471,17 @@ public class EGLDrawableFactory extends GLDrawableFactoryImpl { AbstractGraphicsConfiguration aConfig = surface.getGraphicsConfiguration(); AbstractGraphicsDevice aDevice = aConfig.getScreen().getDevice(); if( aDevice instanceof EGLGraphicsDevice && aConfig instanceof EGLGraphicsConfiguration ) { + if(surface instanceof WrappedSurface) { + // already wrapped surface - no wrapped recursion + if(DEBUG) { + System.err.println(getThreadName() + ": getEGLSurface - already wrapped surface - use as-is: "+surface); + } + return surface; + } if(EGLDrawable.isValidEGLSurface((EGLGraphicsDevice)aDevice, surface)) { // already in native EGL format if(DEBUG) { - System.err.println(getThreadName() + ": getEGLSurface - already valid EGL surface - use as-is: "+aConfig); + System.err.println(getThreadName() + ": getEGLSurface - already valid EGL surface - use as-is: "+surface); } return surface; } |