Gary Hsu пре 6 година
родитељ
комит
642c013cd7
1 измењених фајлова са 13 додато и 6 уклоњено
  1. 13 6
      src/Engines/nativeEngine.ts

+ 13 - 6
src/Engines/nativeEngine.ts

@@ -26,7 +26,7 @@ interface INativeEngine {
     deleteIndexBuffer(buffer: any): void;
     recordIndexBuffer(vertexArray: any, buffer: any): void;
 
-    createVertexBuffer(data: DataArray, byteStride: number, infos: Array<{ location: number, numElements: number, byteOffset: number, normalized: boolean }>): any;
+    createVertexBuffer(data: ArrayBufferView, byteStride: number, infos: Array<{ location: number, numElements: number, type: number, normalized: boolean, byteOffset: number }>): any;
     deleteVertexBuffer(buffer: any): void;
     recordVertexBuffer(vertexArray: any, buffer: any): void;
 
@@ -305,10 +305,8 @@ export class NativeEngine extends Engine {
 
         // Vertex
 
-        // TODO: handle vertex buffers that are not Float32Array
-
         // Map the vertex buffers that point to the same underlying buffer.
-        const map: { [id: number]: { buffer: WebGLBufferInfo, byteStride: number, infos: Array<{ location: number, numElements: number, byteOffset: number, normalized: boolean }> } } = {};
+        const map: { [id: number]: { buffer: WebGLBufferInfo, byteStride: number, infos: Array<{ location: number, numElements: number, type: number, normalized: boolean, byteOffset: number }> } } = {};
         const attributes = effect.getAttributesNames();
         for (let index = 0; index < attributes.length; index++) {
             const location = effect.getAttributeLocation(index);
@@ -326,7 +324,13 @@ export class NativeEngine extends Engine {
 
                         // TODO: check if byteStride matches for all vertex buffers??
 
-                        entry.infos.push({location: location, numElements: vertexBuffer.getSize(), byteOffset: vertexBuffer.byteOffset, normalized: vertexBuffer.normalized });
+                        entry.infos.push({
+                            location: location,
+                            numElements: vertexBuffer.getSize(),
+                            type: vertexBuffer.type,
+                            normalized: vertexBuffer.normalized,
+                            byteOffset: vertexBuffer.byteOffset
+                        });
                     }
                 }
             }
@@ -337,7 +341,10 @@ export class NativeEngine extends Engine {
             const entry = map[id];
             const buffer = entry.buffer;
             if (!buffer.nativeVertexBuffer) {
-                buffer.nativeVertexBuffer = this._native.createVertexBuffer(buffer.data, entry.byteStride, entry.infos);
+                // TODO: handle non-normalized non-float data (shader always expects float data)
+
+                const data = ArrayBuffer.isView(buffer.data) ? buffer.data : new Float32Array(buffer.data);
+                buffer.nativeVertexBuffer = this._native.createVertexBuffer(data, entry.byteStride, entry.infos);
             }
             this._native.recordVertexBuffer(vertexArray, buffer.nativeVertexBuffer);
         }