OSDN Git Service

Support setFrameBuffer and depth texture on iOS
authorkobayasi <kobayasi@pscnet.co.jp>
Wed, 19 Feb 2014 05:40:56 +0000 (14:40 +0900)
committerkobayasi <kobayasi@pscnet.co.jp>
Wed, 19 Feb 2014 05:40:56 +0000 (14:40 +0900)
gdx/src/main/java/com/jme3/renderer/gdx/GdxRenderer.java
gdx/src/main/java/com/jme3/renderer/gdx/TextureUtilGdx.java

index e386c13..f3cd984 100644 (file)
@@ -103,7 +103,7 @@ public final class GdxRenderer implements Renderer {
     private boolean verboseLogging = false;
     private boolean useVBO = true;
     public boolean adreno_finish_bug = false;
-
+    private int mainFrameBuffer = -1;
     public GdxRenderer() {
     }
 
@@ -411,6 +411,12 @@ public final class GdxRenderer implements Renderer {
             adreno_finish_bug = true;
         }
         logger.log(Level.INFO, "Caps: {0}", caps);
+
+        // Get main framebuffer id because main framebuffer is not 0 on iOS.
+        if (mainFrameBuffer == -1) {
+            Gdx.gl20.glGetIntegerv(GL20.GL_FRAMEBUFFER_BINDING, intBuf16);
+            mainFrameBuffer = intBuf16.get(0);
+        }
     }
 
     /**
@@ -1712,13 +1718,13 @@ public final class GdxRenderer implements Renderer {
 
         if (fb == null) {
             // unbind any fbos
-            if (context.boundFBO != 0) {
-                Gdx.gl20.glBindFramebuffer(GL20.GL_FRAMEBUFFER, 0);
+            if (context.boundFBO != mainFrameBuffer) {
+                Gdx.gl20.glBindFramebuffer(GL20.GL_FRAMEBUFFER, mainFrameBuffer);
 //                RendererUtil.checkGLError();
 
                 statistics.onFrameBufferUse(null, true);
 
-                context.boundFBO = 0;
+                context.boundFBO = mainFrameBuffer;
             }
 
             /*
index 3e870d1..83e8c40 100644 (file)
@@ -406,13 +406,13 @@ public class TextureUtilGdx {
                 format = GL20.GL_COMPRESSED_TEXTURE_FORMATS;
                 dataType = GL20.GL_UNSIGNED_BYTE;
             case Depth:
-                format = GL20.GL_DEPTH_COMPONENT;
-                dataType = GL20.GL_UNSIGNED_BYTE;
-                break;
+//                format = GL20.GL_DEPTH_COMPONENT;
+//                dataType = GL20.GL_UNSIGNED_BYTE;
+//                break;
             case Depth16:
                 format = GL20.GL_DEPTH_COMPONENT;
-                internalFormat = GL20.GL_DEPTH_COMPONENT16;
-                dataType = GL20.GL_UNSIGNED_BYTE;
+                internalFormat = GL20.GL_DEPTH_COMPONENT;
+                dataType = GL20.GL_UNSIGNED_SHORT;
                 break;
             case Depth24:
             case Depth32: