فهرست منبع

Added tool to reduce memory footprint

David Catuhe 7 سال پیش
والد
کامیت
ca4d4cc170
4فایلهای تغییر یافته به همراه34 افزوده شده و 8 حذف شده
  1. 3 2
      src/Mesh/babylon.buffer.ts
  2. 7 5
      src/Mesh/babylon.geometry.ts
  3. 2 1
      src/Mesh/babylon.vertexBuffer.ts
  4. 22 0
      src/babylon.scene.ts

+ 3 - 2
src/Mesh/babylon.buffer.ts

@@ -2,7 +2,8 @@
     export class Buffer {
         private _engine: Engine;
         private _buffer: Nullable<WebGLBuffer>;
-        private _data: Nullable<DataArray>;
+        /** @hidden */
+        public _data: Nullable<DataArray>;
         private _updatable: boolean;
         private _instanced: boolean;
 
@@ -104,7 +105,7 @@
             } else if (this._updatable) { // update buffer
                 this._engine.updateDynamicVertexBuffer(this._buffer, data);
                 this._data = data;
-            }
+            }     
         }
 
         public _rebuild(): void {

+ 7 - 5
src/Mesh/babylon.geometry.ts

@@ -26,8 +26,10 @@
         private _engine: Engine;
         private _meshes: Mesh[];
         private _totalVertices = 0;
-        private _indices: IndicesArray;
-        private _vertexBuffers: { [key: string]: VertexBuffer; };
+        /** @hidden */
+        public _indices: IndicesArray;
+        /** @hidden */
+        public _vertexBuffers: { [key: string]: VertexBuffer; };
         private _isDisposed = false;
         private _extend: { minimum: Vector3, maximum: Vector3 };
         private _boundingBias: Vector2;
@@ -799,14 +801,14 @@
             if (this._positions)
                 return true;
 
-            this._positions = [];
-
             var data = this.getVerticesData(VertexBuffer.PositionKind);
 
-            if (!data) {
+            if (!data || data.length === 0) {
                 return false;
             }
 
+            this._positions = [];
+
             for (var index = 0; index < data.length; index += 3) {
                 this._positions.push(Vector3.FromArray(data, index));
             }

+ 2 - 1
src/Mesh/babylon.vertexBuffer.ts

@@ -1,6 +1,7 @@
 module BABYLON {
     export class VertexBuffer {
-        private _buffer: Buffer;
+        /** @hidden */
+        public _buffer: Buffer;
         private _kind: string;
         private _size: number;
         private _ownsBuffer: boolean;

+ 22 - 0
src/babylon.scene.ts

@@ -5375,6 +5375,28 @@
             }
         }
 
+        /**
+         * Call this function to reduce memory footprint of the scene.
+         * Vertex buffers will not store CPU data anymore (this will prevent picking, collisions or physics to work correctly)
+         */
+        public clearCachedVertexData(): void {
+            for (var meshIndex = 0; meshIndex < this.meshes.length; meshIndex++) {
+                var mesh = this.meshes[meshIndex];
+                var geometry = (<Mesh>mesh).geometry;
+
+                if (geometry) {
+                    geometry._indices = [];
+    
+                    for (var vbName in geometry._vertexBuffers) {
+                        if (!geometry._vertexBuffers.hasOwnProperty(vbName)) {
+                            continue;
+                        }
+                        geometry._vertexBuffers[vbName]._buffer._data = null;
+                    }
+                }
+            }
+        }
+
         // Octrees
 
         /**