Selaa lähdekoodia

Fixed vertexAttributes cache issues

David Catuhe 8 vuotta sitten
vanhempi
commit
4a9514fb08

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 16 - 16
dist/preview release/babylon.core.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1984 - 1984
dist/preview release/babylon.d.ts


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 26 - 26
dist/preview release/babylon.js


+ 10 - 22
dist/preview release/babylon.max.js

@@ -7563,27 +7563,18 @@ var BABYLON;
                 this._cachedVertexBuffers = vertexBuffer;
                 this._cachedEffectForVertexBuffers = effect;
                 var attributesCount = effect.getAttributesCount();
+                this.unbindAllAttributes();
                 var offset = 0;
                 for (var index = 0; index < attributesCount; index++) {
                     if (index < vertexDeclaration.length) {
                         var order = effect.getAttributeLocation(index);
                         if (order >= 0) {
-                            if (!this._vertexAttribArraysEnabled[order]) {
-                                this._gl.enableVertexAttribArray(order);
-                                this._vertexAttribArraysEnabled[order] = true;
-                            }
+                            this._gl.enableVertexAttribArray(order);
+                            this._vertexAttribArraysEnabled[order] = true;
                             this.vertexAttribPointer(vertexBuffer, order, vertexDeclaration[index], this._gl.FLOAT, false, vertexStrideSize, offset);
                         }
                         offset += vertexDeclaration[index] * 4;
                     }
-                    else {
-                        //disable effect attributes that have no data
-                        var order = effect.getAttributeLocation(index);
-                        if (this._vertexAttribArraysEnabled[order]) {
-                            this._gl.disableVertexAttribArray(order);
-                            this._vertexAttribArraysEnabled[order] = false;
-                        }
-                    }
                 }
             }
             if (this._cachedIndexBuffer !== indexBuffer) {
@@ -7597,21 +7588,16 @@ var BABYLON;
                 this._cachedVertexBuffers = vertexBuffers;
                 this._cachedEffectForVertexBuffers = effect;
                 var attributes = effect.getAttributesNames();
+                this.unbindAllAttributes();
                 for (var index = 0; index < attributes.length; index++) {
                     var order = effect.getAttributeLocation(index);
                     if (order >= 0) {
                         var vertexBuffer = vertexBuffers[attributes[index]];
                         if (!vertexBuffer) {
-                            if (this._vertexAttribArraysEnabled[order]) {
-                                this._gl.disableVertexAttribArray(order);
-                                this._vertexAttribArraysEnabled[order] = false;
-                            }
                             continue;
                         }
-                        if (!this._vertexAttribArraysEnabled[order]) {
-                            this._gl.enableVertexAttribArray(order);
-                            this._vertexAttribArraysEnabled[order] = true;
-                        }
+                        this._gl.enableVertexAttribArray(order);
+                        this._vertexAttribArraysEnabled[order] = true;
                         var buffer = vertexBuffer.getBuffer();
                         this.vertexAttribPointer(buffer, order, vertexBuffer.getSize(), this._gl.FLOAT, false, vertexBuffer.getStrideSize() * 4, vertexBuffer.getOffset() * 4);
                         if (vertexBuffer.getIsInstanced()) {
@@ -8924,8 +8910,10 @@ var BABYLON;
                 if (i >= this._caps.maxVertexAttribs || !this._vertexAttribArraysEnabled[i]) {
                     continue;
                 }
-                this._gl.disableVertexAttribArray(i);
-                this._vertexAttribArraysEnabled[i] = false;
+                if (this._vertexAttribArraysEnabled[i]) {
+                    this._gl.disableVertexAttribArray(i);
+                    this._vertexAttribArraysEnabled[i] = false;
+                }
             }
         };
         // Dispose

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 16 - 16
dist/preview release/babylon.noworker.js


+ 13 - 25
src/babylon.engine.ts

@@ -1339,6 +1339,8 @@
 
                 let attributesCount = effect.getAttributesCount();
 
+                this.unbindAllAttributes();
+
                 var offset = 0;
                 for (var index = 0; index < attributesCount; index++) {
 
@@ -1347,26 +1349,13 @@
                         var order = effect.getAttributeLocation(index);
 
                         if (order >= 0) {
-                            if (!this._vertexAttribArraysEnabled[order]) {
-                                this._gl.enableVertexAttribArray(order);
-                                this._vertexAttribArraysEnabled[order] = true;
-                            }
+                            this._gl.enableVertexAttribArray(order);
+                            this._vertexAttribArraysEnabled[order] = true;
                             this.vertexAttribPointer(vertexBuffer, order, vertexDeclaration[index], this._gl.FLOAT, false, vertexStrideSize, offset);
                         }
 
                         offset += vertexDeclaration[index] * 4;
-
-                    } else {
-
-                        //disable effect attributes that have no data
-                        var order = effect.getAttributeLocation(index);
-                        if (this._vertexAttribArraysEnabled[order]) {
-                            this._gl.disableVertexAttribArray(order);
-                            this._vertexAttribArraysEnabled[order] = false;
-                        }
-
                     }
-
                 }
             }
 
@@ -1384,6 +1373,8 @@
 
                 var attributes = effect.getAttributesNames();
 
+                this.unbindAllAttributes();
+
                 for (var index = 0; index < attributes.length; index++) {
                     var order = effect.getAttributeLocation(index);
 
@@ -1391,17 +1382,11 @@
                         var vertexBuffer = vertexBuffers[attributes[index]];
 
                         if (!vertexBuffer) {
-                            if (this._vertexAttribArraysEnabled[order]) {
-                                this._gl.disableVertexAttribArray(order);
-                                this._vertexAttribArraysEnabled[order] = false;
-                            }
                             continue;
                         }
 
-                        if (!this._vertexAttribArraysEnabled[order]) {
-                            this._gl.enableVertexAttribArray(order);
-                            this._vertexAttribArraysEnabled[order] = true;
-                        }
+                        this._gl.enableVertexAttribArray(order);
+                        this._vertexAttribArraysEnabled[order] = true;
 
                         var buffer = vertexBuffer.getBuffer();
                         this.vertexAttribPointer(buffer, order, vertexBuffer.getSize(), this._gl.FLOAT, false, vertexBuffer.getStrideSize() * 4, vertexBuffer.getOffset() * 4);
@@ -3000,8 +2985,11 @@
                 if (i >= this._caps.maxVertexAttribs || !this._vertexAttribArraysEnabled[i]) {
                     continue;
                 }
-                this._gl.disableVertexAttribArray(i);
-                this._vertexAttribArraysEnabled[i] = false;
+
+                if (this._vertexAttribArraysEnabled[i]) {
+                    this._gl.disableVertexAttribArray(i);
+                    this._vertexAttribArraysEnabled[i] = false;
+                }
             }
         }