浏览代码

Merge pull request #752 from Palmer-JC/master

Make setVerticesData() & updateVerticesData() Float32Array tolerant
David Catuhe 10 年之前
父节点
当前提交
aa19f0642e
共有 4 个文件被更改,包括 37 次插入26 次删除
  1. 9 3
      src/Mesh/babylon.mesh.ts
  2. 15 15
      src/Mesh/babylon.mesh.vertexData.ts
  3. 6 6
      src/Mesh/babylon.vertexBuffer.ts
  4. 7 2
      src/babylon.engine.ts

+ 9 - 3
src/Mesh/babylon.mesh.ts

@@ -249,7 +249,7 @@
             return this._geometry.getTotalVertices();
             return this._geometry.getTotalVertices();
         }
         }
 
 
-        public getVerticesData(kind: string, copyWhenShared?: boolean): number[] {
+        public getVerticesData(kind: string, copyWhenShared?: boolean): any {
             if (!this._geometry) {
             if (!this._geometry) {
                 return null;
                 return null;
             }
             }
@@ -293,7 +293,7 @@
             return this._geometry.getTotalIndices();
             return this._geometry.getTotalIndices();
         }
         }
 
 
-        public getIndices(copyWhenShared?: boolean): number[] {
+        public getIndices(copyWhenShared?: boolean): any {
             if (!this._geometry) {
             if (!this._geometry) {
                 return [];
                 return [];
             }
             }
@@ -440,7 +440,7 @@
             }
             }
         }
         }
 
 
-        public updateVerticesData(kind: string, data: number[], updateExtends?: boolean, makeItUnique?: boolean): void {
+        public updateVerticesData(kind: string, data: any, updateExtends?: boolean, makeItUnique?: boolean): void {
             if (!this._geometry) {
             if (!this._geometry) {
                 return;
                 return;
             }
             }
@@ -453,7 +453,13 @@
             }
             }
         }
         }
 
 
+        private _warned = false;
         public updateVerticesDataDirectly(kind: string, data: Float32Array, offset?: number, makeItUnique?: boolean): void {
         public updateVerticesDataDirectly(kind: string, data: Float32Array, offset?: number, makeItUnique?: boolean): void {
+            if (!this._warned){
+                Tools.Warn("Mesh.updateVerticesDataDirectly deprecated since 2.3.");
+                this._warned = true;
+            }
+            
             if (!this._geometry) {
             if (!this._geometry) {
                 return;
                 return;
             }
             }

+ 15 - 15
src/Mesh/babylon.mesh.vertexData.ts

@@ -3,26 +3,26 @@
         isVerticesDataPresent(kind: string): boolean;
         isVerticesDataPresent(kind: string): boolean;
         getVerticesData(kind: string, copyWhenShared?: boolean): number[];
         getVerticesData(kind: string, copyWhenShared?: boolean): number[];
         getIndices(copyWhenShared?: boolean): number[];
         getIndices(copyWhenShared?: boolean): number[];
-        setVerticesData(kind: string, data: number[], updatable?: boolean): void;
-        updateVerticesData(kind: string, data: number[], updateExtends?: boolean, makeItUnique?: boolean): void;
+        setVerticesData(kind: string, data: any, updatable?: boolean): void;
+        updateVerticesData(kind: string, data: any, updateExtends?: boolean, makeItUnique?: boolean): void;
         setIndices(indices: number[]): void;
         setIndices(indices: number[]): void;
     }
     }
 
 
     export class VertexData {
     export class VertexData {
-        public positions: number[];
-        public normals: number[];
-        public uvs: number[];
-        public uvs2: number[];
-        public uvs3: number[];
-        public uvs4: number[];
-        public uvs5: number[];
-        public uvs6: number[];
-        public colors: number[];
-        public matricesIndices: number[];
-        public matricesWeights: number[];
+        public positions: any;
+        public normals: any;
+        public uvs: any;
+        public uvs2: any;
+        public uvs3: any;
+        public uvs4: any;
+        public uvs5: any;
+        public uvs6: any;
+        public colors: any;
+        public matricesIndices: any;
+        public matricesWeights: any;
         public indices: number[];
         public indices: number[];
 
 
-        public set(data: number[], kind: string) {
+        public set(data: any, kind: string) {
             switch (kind) {
             switch (kind) {
                 case VertexBuffer.PositionKind:
                 case VertexBuffer.PositionKind:
                     this.positions = data;
                     this.positions = data;
@@ -1595,7 +1595,7 @@
             }
             }
         }
         }
 
 
-        private static _ComputeSides(sideOrientation: number, positions: number[], indices: number[], normals: number[], uvs: number[]) {
+        private static _ComputeSides(sideOrientation: number, positions: any, indices: any, normals: any, uvs: any) {
             var li: number = indices.length;
             var li: number = indices.length;
             var ln: number = normals.length;
             var ln: number = normals.length;
             var i: number;
             var i: number;

+ 6 - 6
src/Mesh/babylon.vertexBuffer.ts

@@ -3,12 +3,12 @@
         private _mesh: Mesh;
         private _mesh: Mesh;
         private _engine: Engine;
         private _engine: Engine;
         private _buffer: WebGLBuffer;
         private _buffer: WebGLBuffer;
-        private _data: number[];
+        private _data: any;
         private _updatable: boolean;
         private _updatable: boolean;
         private _kind: string;
         private _kind: string;
         private _strideSize: number;
         private _strideSize: number;
 
 
-        constructor(engine: any, data: number[], kind: string, updatable: boolean, postponeInternalCreation?: boolean, stride?: number) {
+        constructor(engine: any, data: any, kind: string, updatable: boolean, postponeInternalCreation?: boolean, stride?: number) {
             if (engine instanceof Mesh) { // old versions of BABYLON.VertexBuffer accepted 'mesh' instead of 'engine'
             if (engine instanceof Mesh) { // old versions of BABYLON.VertexBuffer accepted 'mesh' instead of 'engine'
                 this._engine = engine.getScene().getEngine();
                 this._engine = engine.getScene().getEngine();
             }
             }
@@ -64,7 +64,7 @@
             return this._updatable;
             return this._updatable;
         }
         }
 
 
-        public getData(): number[] {
+        public getData(): any {
             return this._data;
             return this._data;
         }
         }
 
 
@@ -77,7 +77,7 @@
         }
         }
 
 
         // Methods
         // Methods
-        public create(data?: number[]): void {
+        public create(data?: any): void {
             if (!data && this._buffer) {
             if (!data && this._buffer) {
                 return; // nothing to do
                 return; // nothing to do
             }
             }
@@ -98,11 +98,11 @@
             }
             }
         }
         }
 
 
-        public update(data: number[]): void {
+        public update(data: any): void {
             this.create(data);
             this.create(data);
         }
         }
 
 
-        public updateDirectly(data: Float32Array, offset: number): void {
+        public updateDirectly(data: Float32Array, offset: number): void {            
             if (!this._buffer) {
             if (!this._buffer) {
                 return;
                 return;
             }
             }

+ 7 - 2
src/babylon.engine.ts

@@ -1008,10 +1008,15 @@
             this._cachedVertexBuffers = null;
             this._cachedVertexBuffers = null;
         }
         }
 
 
-        public createVertexBuffer(vertices: number[]): WebGLBuffer {
+        public createVertexBuffer(vertices: any): WebGLBuffer {
             var vbo = this._gl.createBuffer();
             var vbo = this._gl.createBuffer();
             this._gl.bindBuffer(this._gl.ARRAY_BUFFER, vbo);
             this._gl.bindBuffer(this._gl.ARRAY_BUFFER, vbo);
-            this._gl.bufferData(this._gl.ARRAY_BUFFER, new Float32Array(vertices), this._gl.STATIC_DRAW);
+            if (vertices instanceof Float32Array) {
+                this._gl.bufferData(this._gl.ARRAY_BUFFER, vertices, this._gl.STATIC_DRAW);
+            } else {
+                this._gl.bufferData(this._gl.ARRAY_BUFFER, new Float32Array(vertices), this._gl.STATIC_DRAW);
+            }
+
             this._resetVertexBufferBinding();
             this._resetVertexBufferBinding();
             vbo.references = 1;
             vbo.references = 1;
             return vbo;
             return vbo;