aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2019-06-24 22:05:47 +0200
committerSven Gothel <[email protected]>2019-06-24 22:05:47 +0200
commit019a6fe3c2f5efe550d41f7262b8010d3cfa0aa0 (patch)
treea9bf11140fc1374bf7f1cb4c25e1dab6fc73e1d5
parent203f795cd3332d6d61c210c8b7901de069d9166a (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.java10
-rw-r--r--src/nativewindow/native/ios/IOSmisc.m3
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];