diff options
author | Sven Gothel <[email protected]> | 2019-06-24 22:05:47 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2019-06-24 22:05:47 +0200 |
commit | 019a6fe3c2f5efe550d41f7262b8010d3cfa0aa0 (patch) | |
tree | a9bf11140fc1374bf7f1cb4c25e1dab6fc73e1d5 | |
parent | 203f795cd3332d6d61c210c8b7901de069d9166a (diff) |
iOS: EAGLLayer FBO w/ DEPTH buffer workaround 1
Notable bug as mentioned before:
The FBO used and sharing the COLORBUFFER RENDERBUFFER
memory resources with CAEAGLLayer to be displayed in the UIView
seemingly cannot handle GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24
or GL_DEPTH_COMPONENT32 depth buffer - none at all (Device + Simulation).
This workaround re-binds the used color renderbuffer for EAGLLayer presentation
at the end of the FBO drawable instantiation.
FBO DEPTH buffer works now as demonstrated w/ GearsES2.
We have to issue one more test now, using a demo using an FBO itself.
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLFBODrawableImpl.java | 10 | ||||
-rw-r--r-- | src/nativewindow/native/ios/IOSmisc.m | 3 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/jogl/classes/jogamp/opengl/GLFBODrawableImpl.java b/src/jogl/classes/jogamp/opengl/GLFBODrawableImpl.java index ea226b407..8ec3c0dd9 100644 --- a/src/jogl/classes/jogamp/opengl/GLFBODrawableImpl.java +++ b/src/jogl/classes/jogamp/opengl/GLFBODrawableImpl.java @@ -113,6 +113,7 @@ public class GLFBODrawableImpl extends GLDrawableImpl implements GLFBODrawable { final boolean useDepth = depthBits > 0; final boolean useStencil = stencilBits > 0; + FBObject.ColorAttachment pCA = null; fbo.init(gl, width, height, samples); if(fbo.getNumSamples() != samples) { @@ -122,6 +123,7 @@ public class GLFBODrawableImpl extends GLDrawableImpl implements GLFBODrawable { final FBObject.ColorAttachment ca = fbo.createColorAttachment(useAlpha); if( null != colorRenderbufferStorageDef ) { ca.setStorageDefinition(colorRenderbufferStorageDef); + pCA = ca; } fbo.attachColorbuffer(gl, 0, ca); } else { @@ -166,6 +168,14 @@ public class GLFBODrawableImpl extends GLDrawableImpl implements GLFBODrawable { // Also remedy for Bug 1020, i.e. OSX/Nvidia's FBO needs to be cleared before blitting, // otherwise first MSAA frame lacks antialiasing. fbo.bind(gl); + + if( null != pCA ) { + // FIXME: Apple iOS EAGLLayer doesn't show any content if the + // last bound RENDERBUFFER isn't the color renderbuffer, + // i.e. a subsequent bound DEPTH buffer has been attached. + gl.glBindRenderbuffer(GL.GL_RENDERBUFFER, pCA.getName()); + } + if( setupViewportScissors ) { // Surfaceless: Set initial viewport/scissors gl.glViewport(0, 0, width, height); diff --git a/src/nativewindow/native/ios/IOSmisc.m b/src/nativewindow/native/ios/IOSmisc.m index 5826b9eef..49fe8325e 100644 --- a/src/nativewindow/native/ios/IOSmisc.m +++ b/src/nativewindow/native/ios/IOSmisc.m @@ -342,6 +342,9 @@ JNIEXPORT jlong JNICALL Java_jogamp_nativewindow_ios_IOSUtil_CreateUIWindow0 CAEAGLUIView *uiView = [[CAEAGLUIView alloc] initWithFrame:boundsView]; CAEAGLLayer* l = (CAEAGLLayer*)[uiView layer]; [l setOpaque: YES]; + l.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: /* defaults */ + [NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil]; + [myWindow addSubview: uiView]; |