فهرست منبع

Use of glBufferData instead of glBufferSubData in android renderer, because it seems to cause GL oom on some devices.

Nehon 11 سال پیش
والد
کامیت
a709ba9a77
1فایلهای تغییر یافته به همراه51 افزوده شده و 51 حذف شده
  1. 51 51
      jme3-android/src/main/java/com/jme3/renderer/android/OGLESShaderRenderer.java

+ 51 - 51
jme3-android/src/main/java/com/jme3/renderer/android/OGLESShaderRenderer.java

@@ -1950,60 +1950,60 @@ public class OGLESShaderRenderer implements Renderer {
         int usage = convertUsage(vb.getUsage());
         vb.getData().rewind();
 
-        if (created || vb.hasDataSizeChanged()) {
+   //     if (created || vb.hasDataSizeChanged()) {
             // upload data based on format
-            int size = vb.getData().limit() * vb.getFormat().getComponentSize();
+        int size = vb.getData().limit() * vb.getFormat().getComponentSize();
 
-            switch (vb.getFormat()) {
-                case Byte:
-                case UnsignedByte:
-                    GLES20.glBufferData(target, size, (ByteBuffer) vb.getData(), usage);
-                    RendererUtil.checkGLError();
-                    break;
-                case Short:
-                case UnsignedShort:
-                    GLES20.glBufferData(target, size, (ShortBuffer) vb.getData(), usage);
-                    RendererUtil.checkGLError();
-                    break;
-                case Int:
-                case UnsignedInt:
-                    GLES20.glBufferData(target, size, (IntBuffer) vb.getData(), usage);
-                    RendererUtil.checkGLError();
-                    break;
-                case Float:
-                    GLES20.glBufferData(target, size, (FloatBuffer) vb.getData(), usage);
-                    RendererUtil.checkGLError();
-                    break;
-                default:
-                    throw new RuntimeException("Unknown buffer format.");
-            }
-        } else {
-            int size = vb.getData().limit() * vb.getFormat().getComponentSize();
-
-            switch (vb.getFormat()) {
-                case Byte:
-                case UnsignedByte:
-                    GLES20.glBufferSubData(target, 0, size, (ByteBuffer) vb.getData());
-                    RendererUtil.checkGLError();
-                    break;
-                case Short:
-                case UnsignedShort:
-                    GLES20.glBufferSubData(target, 0, size, (ShortBuffer) vb.getData());
-                    RendererUtil.checkGLError();
-                    break;
-                case Int:
-                case UnsignedInt:
-                    GLES20.glBufferSubData(target, 0, size, (IntBuffer) vb.getData());
-                    RendererUtil.checkGLError();
-                    break;
-                case Float:
-                    GLES20.glBufferSubData(target, 0, size, (FloatBuffer) vb.getData());
-                    RendererUtil.checkGLError();
-                    break;
-                default:
-                    throw new RuntimeException("Unknown buffer format.");
-            }
+        switch (vb.getFormat()) {
+            case Byte:
+            case UnsignedByte:
+                GLES20.glBufferData(target, size, (ByteBuffer) vb.getData(), usage);
+                RendererUtil.checkGLError();
+                break;
+            case Short:
+            case UnsignedShort:
+                GLES20.glBufferData(target, size, (ShortBuffer) vb.getData(), usage);
+                RendererUtil.checkGLError();
+                break;
+            case Int:
+            case UnsignedInt:
+                GLES20.glBufferData(target, size, (IntBuffer) vb.getData(), usage);
+                RendererUtil.checkGLError();
+                break;
+            case Float:
+                GLES20.glBufferData(target, size, (FloatBuffer) vb.getData(), usage);
+                RendererUtil.checkGLError();
+                break;
+            default:
+                throw new RuntimeException("Unknown buffer format.");
         }
+//        } else {
+//            int size = vb.getData().limit() * vb.getFormat().getComponentSize();
+//
+//            switch (vb.getFormat()) {
+//                case Byte:
+//                case UnsignedByte:
+//                    GLES20.glBufferSubData(target, 0, size, (ByteBuffer) vb.getData());
+//                    RendererUtil.checkGLError();
+//                    break;
+//                case Short:
+//                case UnsignedShort:
+//                    GLES20.glBufferSubData(target, 0, size, (ShortBuffer) vb.getData());
+//                    RendererUtil.checkGLError();
+//                    break;
+//                case Int:
+//                case UnsignedInt:
+//                    GLES20.glBufferSubData(target, 0, size, (IntBuffer) vb.getData());
+//                    RendererUtil.checkGLError();
+//                    break;
+//                case Float:
+//                    GLES20.glBufferSubData(target, 0, size, (FloatBuffer) vb.getData());
+//                    RendererUtil.checkGLError();
+//                    break;
+//                default:
+//                    throw new RuntimeException("Unknown buffer format.");
+//            }
+//        }
         vb.clearUpdateNeeded();
     }