浏览代码

Buffer releasing logic changes
- De-dupe logic between Engine, NativeEngineWrapper, and NullEngine for releasing buffers.
- Implement deletion of buffers in NativeEngineWrapper.

Scott Ramsby 7 年之前
父节点
当前提交
d048f4cfaa
共有 3 个文件被更改,包括 9 次插入19 次删除
  1. 4 0
      src/Engine/babylon.engine.ts
  2. 4 10
      src/Engine/babylon.nativeEngineWrapper.ts
  3. 1 9
      src/Engine/babylon.nullEngine.ts

+ 4 - 0
src/Engine/babylon.engine.ts

@@ -2963,6 +2963,10 @@
             return false;
             return false;
         }
         }
 
 
+        protected _deleteBuffer(buffer: WebGLBuffer): void {
+            this._gl.deleteBuffer(buffer);
+        }
+
         /**
         /**
          * Creates a webGL buffer to use with instanciation
          * Creates a webGL buffer to use with instanciation
          * @param capacity defines the size of the buffer
          * @param capacity defines the size of the buffer

+ 4 - 10
src/Engine/babylon.nativeEngineWrapper.ts

@@ -4,10 +4,10 @@
         requestAnimationFrame(callback: () => void): void;
         requestAnimationFrame(callback: () => void): void;
 
 
         createIndexBuffer(indices: ArrayBuffer, is32Bits: boolean): WebGLBuffer;
         createIndexBuffer(indices: ArrayBuffer, is32Bits: boolean): WebGLBuffer;
-        bindIndexBuffer(buffer: WebGLBuffer) : void;
-        
+        bindIndexBuffer(buffer: WebGLBuffer): void;
         createVertexBuffer(vertices: Float32Array): WebGLBuffer;
         createVertexBuffer(vertices: Float32Array): WebGLBuffer;
         bindVertexBuffer(buffer: WebGLBuffer, indx: number, size: number, type: number, normalized: boolean, stride: number, offset: number): void;
         bindVertexBuffer(buffer: WebGLBuffer, indx: number, size: number, type: number, normalized: boolean, stride: number, offset: number): void;
+        deleteBuffer(buffer: WebGLBuffer): void;
 
 
         createProgram(vertexShader: string, fragmentShader: string): WebGLProgram;
         createProgram(vertexShader: string, fragmentShader: string): WebGLProgram;
         getUniforms(shaderProgram: WebGLProgram, uniformsNames: string[]): WebGLUniformLocation[];
         getUniforms(shaderProgram: WebGLProgram, uniformsNames: string[]): WebGLUniformLocation[];
@@ -690,14 +690,8 @@
             this._bindTextureDirectly(0, texture);
             this._bindTextureDirectly(0, texture);
         }
         }
 
 
-        public _releaseBuffer(buffer: WebGLBuffer): boolean {
-            buffer.references--;
-
-            if (buffer.references === 0) {
-                return true;
-            }
-
-            return false;
+        protected _deleteBuffer(buffer: WebGLBuffer): void {
+            this._interop.deleteBuffer(buffer);
         }
         }
 
 
         public releaseEffects() {
         public releaseEffects() {

+ 1 - 9
src/Engine/babylon.nullEngine.ts

@@ -455,15 +455,7 @@
             this._bindTextureDirectly(0, texture);
             this._bindTextureDirectly(0, texture);
         }
         }
 
 
-        /** @hidden */
-        public _releaseBuffer(buffer: WebGLBuffer): boolean {
-            buffer.references--;
-
-            if (buffer.references === 0) {
-                return true;
-            }
-
-            return false;
+        protected _deleteBuffer(buffer: WebGLBuffer): void {
         }
         }
 
 
         public releaseEffects() {
         public releaseEffects() {