瀏覽代碼

Merge pull request #312 from FreeFrags/master

Added support for point rendering
David Catuhe 10 年之前
父節點
當前提交
f622cc1061
共有 31 個文件被更改,包括 26571 次插入118 次删除
  1. 1 1
      Babylon/Culling/babylon.boundingBox.js
  2. 1 1
      Babylon/Layer/babylon.layer.js
  3. 1 1
      Babylon/Layer/babylon.layer.ts
  4. 1 1
      Babylon/LensFlare/babylon.lensFlareSystem.js
  5. 1 1
      Babylon/LensFlare/babylon.lensFlareSystem.ts
  6. 4 4
      Babylon/Lights/Shadows/babylon.shadowGenerator.js
  7. 4 4
      Babylon/Lights/Shadows/babylon.shadowGenerator.ts
  8. 1 1
      Babylon/Materials/babylon.material.js
  9. 1 1
      Babylon/Materials/babylon.material.ts
  10. 1 1
      Babylon/Materials/babylon.standardMaterial.js
  11. 1 1
      Babylon/Materials/babylon.standardMaterial.ts
  12. 1 1
      Babylon/Materials/textures/Procedurals/babylon.proceduralTexture.js
  13. 1 1
      Babylon/Materials/textures/Procedurals/babylon.proceduralTexture.ts
  14. 1 1
      Babylon/Mesh/babylon.InstancedMesh.js
  15. 3 3
      Babylon/Mesh/babylon.linesMesh.js
  16. 3 3
      Babylon/Mesh/babylon.linesMesh.ts
  17. 70 16
      Babylon/Mesh/babylon.mesh.js
  18. 75 17
      Babylon/Mesh/babylon.mesh.ts
  19. 1 1
      Babylon/Particles/babylon.particleSystem.js
  20. 1 1
      Babylon/Particles/babylon.particleSystem.ts
  21. 1 1
      Babylon/PostProcess/babylon.postProcessManager.js
  22. 1 1
      Babylon/PostProcess/babylon.postProcessManager.ts
  23. 2 2
      Babylon/Rendering/babylon.boundingBoxRenderer.js
  24. 2 2
      Babylon/Rendering/babylon.boundingBoxRenderer.ts
  25. 4 4
      Babylon/Rendering/babylon.outlineRenderer.js
  26. 4 4
      Babylon/Rendering/babylon.outlineRenderer.ts
  27. 2 2
      Babylon/Sprites/babylon.spriteManager.js
  28. 2 2
      Babylon/Sprites/babylon.spriteManager.ts
  29. 31 8
      Babylon/babylon.engine.js
  30. 31 3
      Babylon/babylon.engine.ts
  31. 26318 28
      Tools/BuildOurOwnBabylonJS/BuildOurOwnBabylonJS/ourOwnBabylon.js

+ 1 - 1
Babylon/Culling/babylon.boundingBox.js

@@ -171,4 +171,4 @@
     })();
     BABYLON.BoundingBox = BoundingBox;
 })(BABYLON || (BABYLON = {}));
-//# sourceMappingURL=babylon.boundingBox.js.map
+//# sourceMappingURL=babylon.BoundingBox.js.map

+ 1 - 1
Babylon/Layer/babylon.layer.js

@@ -59,7 +59,7 @@
 
             // Draw order
             engine.setAlphaMode(BABYLON.Engine.ALPHA_COMBINE);
-            engine.draw(true, 0, 6);
+            engine.draw(WebGLRenderingContext.TRIANGLES, 0, 6);
             engine.setAlphaMode(BABYLON.Engine.ALPHA_DISABLE);
         };
 

+ 1 - 1
Babylon/Layer/babylon.layer.ts

@@ -71,7 +71,7 @@
 
             // Draw order
             engine.setAlphaMode(BABYLON.Engine.ALPHA_COMBINE);
-            engine.draw(true, 0, 6);
+            engine.draw(WebGLRenderingContext.TRIANGLES, 0, 6);
             engine.setAlphaMode(BABYLON.Engine.ALPHA_DISABLE);
         }
 

+ 1 - 1
Babylon/LensFlare/babylon.lensFlareSystem.js

@@ -189,7 +189,7 @@
                 this._effect.setFloat4("color", flare.color.r * intensity, flare.color.g * intensity, flare.color.b * intensity, 1.0);
 
                 // Draw order
-                engine.draw(true, 0, 6);
+                engine.draw(WebGLRenderingContext.TRIANGLES, 0, 6);
             }
 
             engine.setDepthBuffer(true);

+ 1 - 1
Babylon/LensFlare/babylon.lensFlareSystem.ts

@@ -201,7 +201,7 @@
                 this._effect.setFloat4("color", flare.color.r * intensity, flare.color.g * intensity, flare.color.b * intensity, 1.0);
 
                 // Draw order
-                engine.draw(true, 0, 6);
+                engine.draw(WebGLRenderingContext.TRIANGLES, 0, 6);
             }
 
             engine.setDepthBuffer(true);

+ 4 - 4
Babylon/Lights/Shadows/babylon.shadowGenerator.js

@@ -42,7 +42,7 @@
 
                 if (_this.isReady(subMesh, hardwareInstancedRendering)) {
                     engine.enableEffect(_this._effect);
-                    mesh._bind(subMesh, _this._effect, false);
+                    mesh._bind(subMesh, _this._effect, WebGLRenderingContext.TRIANGLES);
                     var material = subMesh.getMaterial();
 
                     _this._effect.setMatrix("viewProjection", _this.getTransformMatrix());
@@ -62,13 +62,13 @@
                     }
 
                     if (hardwareInstancedRendering) {
-                        mesh._renderWithInstances(subMesh, false, batch, _this._effect, engine);
+                        mesh._renderWithInstances(subMesh, WebGLRenderingContext.TRIANGLES, batch, _this._effect, engine);
                     } else {
                         if (batch.renderSelf[subMesh._id]) {
                             _this._effect.setMatrix("world", mesh.getWorldMatrix());
 
                             // Draw
-                            mesh._draw(subMesh, true);
+                            mesh._draw(subMesh, WebGLRenderingContext.TRIANGLES);
                         }
 
                         if (batch.visibleInstances[subMesh._id]) {
@@ -78,7 +78,7 @@
                                 _this._effect.setMatrix("world", instance.getWorldMatrix());
 
                                 // Draw
-                                mesh._draw(subMesh, true);
+                                mesh._draw(subMesh, WebGLRenderingContext.TRIANGLES);
                             }
                         }
                     }

+ 4 - 4
Babylon/Lights/Shadows/babylon.shadowGenerator.ts

@@ -81,7 +81,7 @@
 
                 if (this.isReady(subMesh, hardwareInstancedRendering)) {
                     engine.enableEffect(this._effect);
-                    mesh._bind(subMesh, this._effect, false);
+                    mesh._bind(subMesh, this._effect, WebGLRenderingContext.TRIANGLES);
                     var material = subMesh.getMaterial();
 
                     this._effect.setMatrix("viewProjection", this.getTransformMatrix());
@@ -101,13 +101,13 @@
                     }
 
                     if (hardwareInstancedRendering) {
-                        mesh._renderWithInstances(subMesh, false, batch, this._effect, engine);
+                        mesh._renderWithInstances(subMesh, WebGLRenderingContext.TRIANGLES, batch, this._effect, engine);
                     } else {
                         if (batch.renderSelf[subMesh._id]) {
                             this._effect.setMatrix("world", mesh.getWorldMatrix());
 
                             // Draw
-                            mesh._draw(subMesh, true);
+                            mesh._draw(subMesh, WebGLRenderingContext.TRIANGLES);
                         }
 
                         if (batch.visibleInstances[subMesh._id]) {
@@ -117,7 +117,7 @@
                                 this._effect.setMatrix("world", instance.getWorldMatrix());
 
                                 // Draw
-                                mesh._draw(subMesh, true);
+                                mesh._draw(subMesh, WebGLRenderingContext.TRIANGLES);
                             }
                         }
                     }

+ 1 - 1
Babylon/Materials/babylon.material.js

@@ -7,7 +7,7 @@
             this.checkReadyOnlyOnce = false;
             this.state = "";
             this.alpha = 1.0;
-            this.wireframe = false;
+            this.drawAs = WebGLRenderingContext.TRIANGLES;
             this.backFaceCulling = true;
             this._wasPreviouslyReady = false;
             this.id = name;

+ 1 - 1
Babylon/Materials/babylon.material.ts

@@ -5,7 +5,7 @@
         public checkReadyOnlyOnce = false;
         public state = "";
         public alpha = 1.0;
-        public wireframe = false;
+        public drawAs = WebGLRenderingContext.TRIANGLES;
         public backFaceCulling = true;
         public onCompiled: (effect: Effect) => void;
         public onError: (effect: Effect, errors: string) => void;

+ 1 - 1
Babylon/Materials/babylon.standardMaterial.js

@@ -616,7 +616,7 @@ var BABYLON;
             // Base material
             newStandardMaterial.checkReadyOnEveryCall = this.checkReadyOnEveryCall;
             newStandardMaterial.alpha = this.alpha;
-            newStandardMaterial.wireframe = this.wireframe;
+            newStandardMaterial.drawAs = this.drawAs;
             newStandardMaterial.backFaceCulling = this.backFaceCulling;
 
             // Standard material

+ 1 - 1
Babylon/Materials/babylon.standardMaterial.ts

@@ -628,7 +628,7 @@
             // Base material
             newStandardMaterial.checkReadyOnEveryCall = this.checkReadyOnEveryCall;
             newStandardMaterial.alpha = this.alpha;
-            newStandardMaterial.wireframe = this.wireframe;
+            newStandardMaterial.drawAs = this.drawAs;
             newStandardMaterial.backFaceCulling = this.backFaceCulling;
 
             // Standard material

+ 1 - 1
Babylon/Materials/textures/Procedurals/babylon.proceduralTexture.js

@@ -233,7 +233,7 @@ var BABYLON;
             engine.bindBuffers(this._vertexBuffer, this._indexBuffer, this._vertexDeclaration, this._vertexStrideSize, this._effect);
 
             // Draw order
-            engine.draw(true, 0, 6);
+            engine.draw(WebGLRenderingContext.TRIANGLES, 0, 6);
 
             // Unbind
             engine.unBindFramebuffer(this._texture);

+ 1 - 1
Babylon/Materials/textures/Procedurals/babylon.proceduralTexture.ts

@@ -247,7 +247,7 @@
             engine.bindBuffers(this._vertexBuffer, this._indexBuffer, this._vertexDeclaration, this._vertexStrideSize, this._effect);
 
             // Draw order
-            engine.draw(true, 0, 6);
+            engine.draw(WebGLRenderingContext.TRIANGLES, 0, 6);
 
             // Unbind
             engine.unBindFramebuffer(this._texture);

+ 1 - 1
Babylon/Mesh/babylon.InstancedMesh.js

@@ -167,4 +167,4 @@ var BABYLON;
     })(BABYLON.AbstractMesh);
     BABYLON.InstancedMesh = InstancedMesh;
 })(BABYLON || (BABYLON = {}));
-//# sourceMappingURL=babylon.instancedMesh.js.map
+//# sourceMappingURL=babylon.InstancedMesh.js.map

+ 3 - 3
Babylon/Mesh/babylon.linesMesh.js

@@ -45,7 +45,7 @@ var BABYLON;
             configurable: true
         });
 
-        LinesMesh.prototype._bind = function (subMesh, effect, wireframe) {
+        LinesMesh.prototype._bind = function (subMesh, effect, drawAs) {
             var engine = this.getScene().getEngine();
 
             var indexToBind = this._geometry.getIndexBuffer();
@@ -57,7 +57,7 @@ var BABYLON;
             this._colorShader.setColor4("color", this.color.toColor4(this.alpha));
         };
 
-        LinesMesh.prototype._draw = function (subMesh, useTriangles, instancesCount) {
+        LinesMesh.prototype._draw = function (subMesh, drawAs, instancesCount) {
             if (!this._geometry || !this._geometry.getVertexBuffers() || !this._geometry.getIndexBuffer()) {
                 return;
             }
@@ -65,7 +65,7 @@ var BABYLON;
             var engine = this.getScene().getEngine();
 
             // Draw order
-            engine.draw(false, subMesh.indexStart, subMesh.indexCount);
+            engine.draw(WebGLRenderingContext.LINES, subMesh.indexStart, subMesh.indexCount);
         };
 
         LinesMesh.prototype.intersects = function (ray, fastCheck) {

+ 3 - 3
Babylon/Mesh/babylon.linesMesh.ts

@@ -32,7 +32,7 @@
             return false;
         }
 
-        public _bind(subMesh: SubMesh, effect: Effect, wireframe?: boolean): void {
+        public _bind(subMesh: SubMesh, effect: Effect, drawAs: number): void {
             var engine = this.getScene().getEngine();
 
             var indexToBind = this._geometry.getIndexBuffer();
@@ -44,7 +44,7 @@
             this._colorShader.setColor4("color", this.color.toColor4(this.alpha));
         }
 
-        public _draw(subMesh: SubMesh, useTriangles: boolean, instancesCount?: number): void {
+        public _draw(subMesh: SubMesh, drawAs: number, instancesCount?: number): void {
             if (!this._geometry || !this._geometry.getVertexBuffers() || !this._geometry.getIndexBuffer()) {
                 return;
             }
@@ -52,7 +52,7 @@
             var engine = this.getScene().getEngine();
 
             // Draw order
-            engine.draw(false, subMesh.indexStart, subMesh.indexCount);
+            engine.draw(WebGLRenderingContext.LINES, subMesh.indexStart, subMesh.indexCount);
         }
 
         public intersects(ray: Ray, fastCheck?: boolean) {

+ 70 - 16
Babylon/Mesh/babylon.mesh.js

@@ -245,40 +245,93 @@ var BABYLON;
             }
         };
 
-        Mesh.prototype._bind = function (subMesh, effect, wireframe) {
+        Mesh.prototype._bind = function (subMesh, effect, drawAs) {
             var engine = this.getScene().getEngine();
 
-            // Wireframe
-            var indexToBind = this._geometry.getIndexBuffer();
+            var indexToBind = undefined;
+            switch (drawAs) {
+                case WebGLRenderingContext.LINES:
+                    indexToBind = subMesh.getLinesIndexBuffer(this.getIndices(), engine);
+                    break;
+
+                case WebGLRenderingContext.POINTS:
+                    indexToBind = null;
+                    break;
 
-            if (wireframe) {
-                indexToBind = subMesh.getLinesIndexBuffer(this.getIndices(), engine);
+                case WebGLRenderingContext.TRIANGLES:
+                default:
+                    indexToBind = this._geometry.getIndexBuffer();
+                    break;
             }
 
             // VBOs
             engine.bindMultiBuffers(this._geometry.getVertexBuffers(), indexToBind, effect);
         };
 
-        Mesh.prototype._draw = function (subMesh, useTriangles, instancesCount) {
+        Mesh.prototype._getStartIndexOfMesh = function (subMesh, drawAs) {
+            var start = 0;
+            switch (drawAs) {
+                case WebGLRenderingContext.LINES:
+                    start = 0;
+                    break;
+                case WebGLRenderingContext.POINTS:
+                    start = 0;
+                    break;
+
+                case WebGLRenderingContext.TRIANGLES:
+                default:
+                    start = subMesh.indexStart;
+                    break;
+            }
+
+            return start;
+        };
+
+        Mesh.prototype._getCountOfMesh = function (subMesh, drawAs) {
+            var count = 0;
+            switch (drawAs) {
+                case WebGLRenderingContext.LINES:
+                    count = subMesh.linesIndexCount;
+                    break;
+                case WebGLRenderingContext.POINTS:
+                    count = subMesh.verticesCount;
+                    break;
+
+                case WebGLRenderingContext.TRIANGLES:
+                default:
+                    count = subMesh.indexCount;
+                    break;
+            }
+
+            return count;
+        };
+
+        Mesh.prototype._draw = function (subMesh, drawAs, instancesCount) {
             if (!this._geometry || !this._geometry.getVertexBuffers() || !this._geometry.getIndexBuffer()) {
                 return;
             }
 
             var engine = this.getScene().getEngine();
 
+            var start = this._getStartIndexOfMesh(subMesh, drawAs);
+            var count = this._getCountOfMesh(subMesh, drawAs);
+
             // Draw order
-            engine.draw(useTriangles, useTriangles ? subMesh.indexStart : 0, useTriangles ? subMesh.indexCount : subMesh.linesIndexCount, instancesCount);
+            engine.draw(drawAs, start, count, instancesCount);
         };
 
-        Mesh.prototype._fullDraw = function (subMesh, useTriangles, instancesCount) {
+        Mesh.prototype._fullDraw = function (subMesh, drawAs, instancesCount) {
             if (!this._geometry || !this._geometry.getVertexBuffers() || !this._geometry.getIndexBuffer()) {
                 return;
             }
 
             var engine = this.getScene().getEngine();
 
+            var start = this._getStartIndexOfMesh(subMesh, drawAs);
+            var count = this._getCountOfMesh(subMesh, drawAs);
+
             // Draw order
-            engine.draw(useTriangles, useTriangles ? subMesh.indexStart : 0, useTriangles ? subMesh.indexCount : subMesh.linesIndexCount, instancesCount);
+            engine.draw(drawAs, start, count, instancesCount);
         };
 
         Mesh.prototype.registerBeforeRender = function (func) {
@@ -338,7 +391,7 @@ var BABYLON;
             return this._batchCache;
         };
 
-        Mesh.prototype._renderWithInstances = function (subMesh, wireFrame, batch, effect, engine) {
+        Mesh.prototype._renderWithInstances = function (subMesh, drawAs, batch, effect, engine) {
             var matricesCount = this.instances.length + 1;
             var bufferSize = matricesCount * 16 * 4;
 
@@ -385,7 +438,7 @@ var BABYLON;
 
             engine.updateAndBindInstancesBuffer(this._worldMatricesInstancesBuffer, this._worldMatricesInstancesArray, offsetLocations);
 
-            this._draw(subMesh, !wireFrame, instancesCount);
+            this._draw(subMesh, drawAs, instancesCount);
 
             engine.unBindInstancesBuffer(this._worldMatricesInstancesBuffer, offsetLocations);
         };
@@ -430,19 +483,20 @@ var BABYLON;
             var effect = effectiveMaterial.getEffect();
 
             // Bind
-            var wireFrame = engine.forceWireframe || effectiveMaterial.wireframe;
-            this._bind(subMesh, effect, wireFrame);
+            var drawAs = engine.forceWireframe ? WebGLRenderingContext.LINES : effectiveMaterial.drawAs;
+
+            this._bind(subMesh, effect, drawAs);
 
             var world = this.getWorldMatrix();
             effectiveMaterial.bind(world, this);
 
             // Instances rendering
             if (hardwareInstancedRendering) {
-                this._renderWithInstances(subMesh, wireFrame, batch, effect, engine);
+                this._renderWithInstances(subMesh, drawAs, batch, effect, engine);
             } else {
                 if (batch.renderSelf[subMesh._id]) {
                     // Draw
-                    this._draw(subMesh, !wireFrame);
+                    this._draw(subMesh, drawAs);
                 }
 
                 if (batch.visibleInstances[subMesh._id]) {
@@ -454,7 +508,7 @@ var BABYLON;
                         effectiveMaterial.bindOnlyWorldMatrix(world);
 
                         // Draw
-                        this._draw(subMesh, !wireFrame);
+                        this._draw(subMesh, drawAs);
                     }
                 }
             }

+ 75 - 17
Babylon/Mesh/babylon.mesh.ts

@@ -251,40 +251,97 @@
             }
         }
 
-        public _bind(subMesh: SubMesh, effect: Effect, wireframe?: boolean): void {
+        public _bind(subMesh: SubMesh, effect: Effect, drawAs: number): void {
             var engine = this.getScene().getEngine();
 
-            // Wireframe
-            var indexToBind = this._geometry.getIndexBuffer();
-
-            if (wireframe) {
-                indexToBind = subMesh.getLinesIndexBuffer(this.getIndices(), engine);
+            var indexToBind = undefined;
+            switch (drawAs)
+            {
+                case WebGLRenderingContext.LINES:
+                    indexToBind = subMesh.getLinesIndexBuffer(this.getIndices(), engine);
+                    break;
+                //PLEASE CHECK THIS!
+                case WebGLRenderingContext.POINTS:
+                    indexToBind = null;
+                    break
+                //Draw triangles as default
+                case WebGLRenderingContext.TRIANGLES:
+                default:
+                    indexToBind = this._geometry.getIndexBuffer();
+                    break;
             }
 
             // VBOs
             engine.bindMultiBuffers(this._geometry.getVertexBuffers(), indexToBind, effect);
         }
 
-        public _draw(subMesh: SubMesh, useTriangles: boolean, instancesCount?: number): void {
+        private _getStartIndexOfMesh(subMesh: SubMesh, drawAs: number) : number {
+            var start = 0;
+            switch (drawAs) {
+                case WebGLRenderingContext.LINES:
+                    start = 0;
+                    break;
+                case WebGLRenderingContext.POINTS:
+                    start = 0;
+                    break;
+
+                //Render as triangle as default
+                case WebGLRenderingContext.TRIANGLES:
+                default:
+                    start = subMesh.indexStart;
+                    break;
+            }
+
+            return start;
+        }
+
+        private _getCountOfMesh(subMesh: SubMesh, drawAs: number) : number {
+            var count = 0;
+            switch (drawAs) {
+                case WebGLRenderingContext.LINES:
+                    count = subMesh.linesIndexCount;
+                    break;
+                case WebGLRenderingContext.POINTS:
+                    count = subMesh.verticesCount;
+                    break;
+
+                //Render as triangle as default
+                case WebGLRenderingContext.TRIANGLES:
+                default:
+                    count = subMesh.indexCount;
+                    break;
+            }
+
+            return count;
+        }
+
+
+        public _draw(subMesh: SubMesh, drawAs: number, instancesCount?: number): void {
             if (!this._geometry || !this._geometry.getVertexBuffers() || !this._geometry.getIndexBuffer()) {
                 return;
             }
 
             var engine = this.getScene().getEngine();
 
+            var start = this._getStartIndexOfMesh(subMesh, drawAs);
+            var count = this._getCountOfMesh(subMesh, drawAs);
+           
             // Draw order
-            engine.draw(useTriangles, useTriangles ? subMesh.indexStart : 0, useTriangles ? subMesh.indexCount : subMesh.linesIndexCount, instancesCount);
+            engine.draw(drawAs, start, count, instancesCount);
         }
 
-        public _fullDraw(subMesh: SubMesh, useTriangles: boolean, instancesCount?: number): void {
+        public _fullDraw(subMesh: SubMesh, drawAs: number, instancesCount?: number): void {
             if (!this._geometry || !this._geometry.getVertexBuffers() || !this._geometry.getIndexBuffer()) {
                 return;
             }
 
             var engine = this.getScene().getEngine();
 
+            var start = this._getStartIndexOfMesh(subMesh, drawAs);
+            var count = this._getCountOfMesh(subMesh, drawAs);
+
             // Draw order
-            engine.draw(useTriangles, useTriangles ? subMesh.indexStart : 0, useTriangles ? subMesh.indexCount : subMesh.linesIndexCount, instancesCount);
+            engine.draw(drawAs, start, count, instancesCount);
         }
 
         public registerBeforeRender(func: () => void): void {
@@ -345,7 +402,7 @@
             return this._batchCache;
         }
 
-        public _renderWithInstances(subMesh: SubMesh, wireFrame: boolean, batch: _InstancesBatch, effect: Effect, engine: Engine): void {
+        public _renderWithInstances(subMesh: SubMesh, drawAs: number, batch: _InstancesBatch, effect: Effect, engine: Engine): void {
             var matricesCount = this.instances.length + 1;
             var bufferSize = matricesCount * 16 * 4;
 
@@ -392,7 +449,7 @@
 
             engine.updateAndBindInstancesBuffer(this._worldMatricesInstancesBuffer, this._worldMatricesInstancesArray, offsetLocations);
 
-            this._draw(subMesh, !wireFrame, instancesCount);
+            this._draw(subMesh, drawAs, instancesCount);
 
             engine.unBindInstancesBuffer(this._worldMatricesInstancesBuffer, offsetLocations);
         }
@@ -437,19 +494,20 @@
             var effect = effectiveMaterial.getEffect();
 
             // Bind
-            var wireFrame = engine.forceWireframe || effectiveMaterial.wireframe;
-            this._bind(subMesh, effect, wireFrame);
+            var drawAs = engine.forceWireframe ? WebGLRenderingContext.LINES : effectiveMaterial.drawAs;
+
+            this._bind(subMesh, effect, drawAs);
 
             var world = this.getWorldMatrix();
             effectiveMaterial.bind(world, this);
 
             // Instances rendering
             if (hardwareInstancedRendering) {
-                this._renderWithInstances(subMesh, wireFrame, batch, effect, engine);
+                this._renderWithInstances(subMesh, drawAs, batch, effect, engine);
             } else {
                 if (batch.renderSelf[subMesh._id]) {
                     // Draw
-                    this._draw(subMesh, !wireFrame);
+                    this._draw(subMesh, drawAs);
                 }
 
                 if (batch.visibleInstances[subMesh._id]) {
@@ -461,7 +519,7 @@
                         effectiveMaterial.bindOnlyWorldMatrix(world);
 
                         // Draw
-                        this._draw(subMesh, !wireFrame);
+                        this._draw(subMesh, drawAs);
                     }
                 }
             }

+ 1 - 1
Babylon/Particles/babylon.particleSystem.js

@@ -341,7 +341,7 @@
                 engine.setDepthWrite(true);
             }
 
-            engine.draw(true, 0, this.particles.length * 6);
+            engine.draw(WebGLRenderingContext.TRIANGLES, 0, this.particles.length * 6);
             engine.setAlphaMode(BABYLON.Engine.ALPHA_DISABLE);
 
             return this.particles.length;

+ 1 - 1
Babylon/Particles/babylon.particleSystem.ts

@@ -376,7 +376,7 @@
                 engine.setDepthWrite(true);
             }
 
-            engine.draw(true, 0, this.particles.length * 6);
+            engine.draw(WebGLRenderingContext.TRIANGLES, 0, this.particles.length * 6);
             engine.setAlphaMode(BABYLON.Engine.ALPHA_DISABLE);
 
             return this.particles.length;

+ 1 - 1
Babylon/PostProcess/babylon.postProcessManager.js

@@ -76,7 +76,7 @@
                     engine.bindBuffers(this._vertexBuffer, this._indexBuffer, this._vertexDeclaration, this._vertexStrideSize, effect);
 
                     // Draw order
-                    engine.draw(true, 0, 6);
+                    engine.draw(WebGLRenderingContext.TRIANGLES, 0, 6);
                 }
             }
 

+ 1 - 1
Babylon/PostProcess/babylon.postProcessManager.ts

@@ -80,7 +80,7 @@
                     engine.bindBuffers(this._vertexBuffer, this._indexBuffer, this._vertexDeclaration, this._vertexStrideSize, effect);
 
                     // Draw order
-                    engine.draw(true, 0, 6);
+                    engine.draw(WebGLRenderingContext.TRIANGLES, 0, 6);
                 }
             }
 

+ 2 - 2
Babylon/Rendering/babylon.boundingBoxRenderer.js

@@ -48,7 +48,7 @@
                     this._colorShader.bind(worldMatrix);
 
                     // Draw order
-                    engine.draw(false, 0, 24);
+                    engine.draw(WebGLRenderingContext.LINES, 0, 24);
                 }
 
                 // Front
@@ -57,7 +57,7 @@
                 this._colorShader.bind(worldMatrix);
 
                 // Draw order
-                engine.draw(false, 0, 24);
+                engine.draw(WebGLRenderingContext.LINES, 0, 24);
             }
             this._colorShader.unbind();
             engine.setDepthFunctionToLessOrEqual();

+ 2 - 2
Babylon/Rendering/babylon.boundingBoxRenderer.ts

@@ -59,7 +59,7 @@
                     this._colorShader.bind(worldMatrix);
 
                     // Draw order
-                    engine.draw(false, 0, 24);
+                    engine.draw(WebGLRenderingContext.LINES, 0, 24);
                 }
 
                 // Front
@@ -68,7 +68,7 @@
                 this._colorShader.bind(worldMatrix);
 
                 // Draw order
-                engine.draw(false, 0, 24);
+                engine.draw(WebGLRenderingContext.LINES, 0, 24);
             }
             this._colorShader.unbind();
             engine.setDepthFunctionToLessOrEqual();

+ 4 - 4
Babylon/Rendering/babylon.outlineRenderer.js

@@ -28,7 +28,7 @@
                 this._effect.setMatrices("mBones", mesh.skeleton.getTransformMatrices());
             }
 
-            mesh._bind(subMesh, this._effect, false);
+            mesh._bind(subMesh, this._effect, WebGLRenderingContext.TRIANGLES);
 
             // Alpha test
             if (material && material.needAlphaTesting()) {
@@ -38,13 +38,13 @@
             }
 
             if (hardwareInstancedRendering) {
-                mesh._renderWithInstances(subMesh, false, batch, this._effect, engine);
+                mesh._renderWithInstances(subMesh, WebGLRenderingContext.TRIANGLES, batch, this._effect, engine);
             } else {
                 if (batch.renderSelf[subMesh._id]) {
                     this._effect.setMatrix("world", mesh.getWorldMatrix());
 
                     // Draw
-                    mesh._draw(subMesh, true);
+                    mesh._draw(subMesh, WebGLRenderingContext.TRIANGLES);
                 }
 
                 if (batch.visibleInstances[subMesh._id]) {
@@ -54,7 +54,7 @@
                         this._effect.setMatrix("world", instance.getWorldMatrix());
 
                         // Draw
-                        mesh._draw(subMesh, true);
+                        mesh._draw(subMesh, WebGLRenderingContext.TRIANGLES);
                     }
                 }
             }

+ 4 - 4
Babylon/Rendering/babylon.outlineRenderer.ts

@@ -32,7 +32,7 @@
                 this._effect.setMatrices("mBones", mesh.skeleton.getTransformMatrices());
             }
 
-            mesh._bind(subMesh, this._effect, false);
+            mesh._bind(subMesh, this._effect, WebGLRenderingContext.TRIANGLES);
 
             // Alpha test
             if (material && material.needAlphaTesting()) {
@@ -43,13 +43,13 @@
 
 
             if (hardwareInstancedRendering) {
-                mesh._renderWithInstances(subMesh, false, batch, this._effect, engine);
+                mesh._renderWithInstances(subMesh, WebGLRenderingContext.TRIANGLES, batch, this._effect, engine);
             } else {
                 if (batch.renderSelf[subMesh._id]) {
                     this._effect.setMatrix("world", mesh.getWorldMatrix());
 
                     // Draw
-                    mesh._draw(subMesh, true);
+                    mesh._draw(subMesh, WebGLRenderingContext.TRIANGLES);
                 }
 
                 if (batch.visibleInstances[subMesh._id]) {
@@ -59,7 +59,7 @@
                         this._effect.setMatrix("world", instance.getWorldMatrix());
 
                         // Draw
-                        mesh._draw(subMesh, true);
+                        mesh._draw(subMesh, WebGLRenderingContext.TRIANGLES);
                     }
                 }
             }

+ 2 - 2
Babylon/Sprites/babylon.spriteManager.js

@@ -133,12 +133,12 @@
             // Draw order
             effect.setBool("alphaTest", true);
             engine.setColorWrite(false);
-            engine.draw(true, 0, max * 6);
+            engine.draw(WebGLRenderingContext.TRIANGLES, 0, max * 6);
             engine.setColorWrite(true);
             effect.setBool("alphaTest", false);
 
             engine.setAlphaMode(BABYLON.Engine.ALPHA_COMBINE);
-            engine.draw(true, 0, max * 6);
+            engine.draw(WebGLRenderingContext.TRIANGLES, 0, max * 6);
             engine.setAlphaMode(BABYLON.Engine.ALPHA_DISABLE);
         };
 

+ 2 - 2
Babylon/Sprites/babylon.spriteManager.ts

@@ -150,12 +150,12 @@
             // Draw order
             effect.setBool("alphaTest", true);
             engine.setColorWrite(false);
-            engine.draw(true, 0, max * 6);
+            engine.draw(WebGLRenderingContext.TRIANGLES, 0, max * 6);
             engine.setColorWrite(true);
             effect.setBool("alphaTest", false);
 
             engine.setAlphaMode(BABYLON.Engine.ALPHA_COMBINE);
-            engine.draw(true, 0, max * 6);
+            engine.draw(WebGLRenderingContext.TRIANGLES, 0, max * 6);
             engine.setAlphaMode(BABYLON.Engine.ALPHA_DISABLE);
         }
 

+ 31 - 8
Babylon/babylon.engine.js

@@ -837,7 +837,7 @@
                 }
             }
 
-            if (this._cachedIndexBuffer !== indexBuffer) {
+            if (indexBuffer != null && this._cachedIndexBuffer !== indexBuffer) {
                 this._cachedIndexBuffer = indexBuffer;
                 this._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
             }
@@ -894,19 +894,42 @@
             this._alphaState.apply(this._gl);
         };
 
-        Engine.prototype.draw = function (useTriangles, indexStart, indexCount, instancesCount) {
+        Engine.prototype.draw = function (drawAs, start, count, instancesCount) {
             // Apply states
             this.applyStates();
 
-            // Render
-            if (instancesCount) {
-                this._caps.instancedArrays.drawElementsInstancedANGLE(useTriangles ? this._gl.TRIANGLES : this._gl.LINES, indexCount, this._gl.UNSIGNED_SHORT, indexStart * 2, instancesCount);
-                return;
+            switch (drawAs) {
+                case this._gl.LINES:
+                case this._gl.TRIANGLES:
+                     {
+                        if (instancesCount) {
+                            this._caps.instancedArrays.drawElementsInstancedANGLE(drawAs, count, this._gl.UNSIGNED_SHORT, start * 2, instancesCount);
+                        } else {
+                            this._gl.drawElements(drawAs, count, this._gl.UNSIGNED_SHORT, start * 2);
+                        }
+                    }
+                    break;
+                case this._gl.POINTS:
+                     {
+                        this._gl.drawArrays(drawAs, 0, count);
+                    }
+                    break;
             }
-
-            this._gl.drawElements(useTriangles ? this._gl.TRIANGLES : this._gl.LINES, indexCount, this._gl.UNSIGNED_SHORT, indexStart * 2);
         };
 
+        /*
+        public draw(useTriangles: boolean, indexStart: number, indexCount: number, instancesCount?: number): void {
+        // Apply states
+        this.applyStates();
+        
+        // Render
+        if (instancesCount) {
+        this._caps.instancedArrays.drawElementsInstancedANGLE(useTriangles ? this._gl.TRIANGLES : this._gl.LINES, indexCount, this._gl.UNSIGNED_SHORT, indexStart * 2, instancesCount);
+        return;
+        }
+        
+        this._gl.drawElements(useTriangles ? this._gl.TRIANGLES : this._gl.LINES, indexCount, this._gl.UNSIGNED_SHORT, indexStart * 2);
+        }*/
         // Shaders
         Engine.prototype._releaseEffect = function (effect) {
             if (this._compiledEffects[effect._key]) {

+ 31 - 3
Babylon/babylon.engine.ts

@@ -845,8 +845,9 @@
                     }
                 }
             }
-
-            if (this._cachedIndexBuffer !== indexBuffer) {
+            
+            if (indexBuffer != null &&
+                this._cachedIndexBuffer !== indexBuffer) {
                 this._cachedIndexBuffer = indexBuffer;
                 this._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
             }
@@ -904,6 +905,33 @@
             this._alphaState.apply(this._gl);
         }
 
+
+        public draw(drawAs: number, start: number, count: number, instancesCount?: number): void {
+            // Apply states
+            this.applyStates();
+
+            // Render         
+            switch (drawAs) {
+                case this._gl.LINES:
+                case this._gl.TRIANGLES:
+                    {
+                        if (instancesCount) {
+                            this._caps.instancedArrays.drawElementsInstancedANGLE(drawAs, count, this._gl.UNSIGNED_SHORT, start * 2, instancesCount);
+                        }
+                        else {
+                            this._gl.drawElements(drawAs, count, this._gl.UNSIGNED_SHORT, start * 2);
+                        }
+                    }
+                    break;
+                case this._gl.POINTS:
+                    {
+                        this._gl.drawArrays(drawAs, 0, count);
+                    }
+                    break;
+            }
+        }
+
+        /*
         public draw(useTriangles: boolean, indexStart: number, indexCount: number, instancesCount?: number): void {
             // Apply states
             this.applyStates();
@@ -915,7 +943,7 @@
             }
 
             this._gl.drawElements(useTriangles ? this._gl.TRIANGLES : this._gl.LINES, indexCount, this._gl.UNSIGNED_SHORT, indexStart * 2);
-        }
+        }*/
 
         // Shaders
         public _releaseEffect(effect: Effect): void {

文件差異過大導致無法顯示
+ 26318 - 28
Tools/BuildOurOwnBabylonJS/BuildOurOwnBabylonJS/ourOwnBabylon.js