Explorar el Código

Fix texture matrix cache

David Catuhe hace 8 años
padre
commit
c20f8e42d7
Se han modificado 3 ficheros con 8465 adiciones y 8453 borrados
  1. 4226 4225
      dist/preview release/babylon.d.ts
  2. 4226 4225
      dist/preview release/babylon.module.d.ts
  3. 13 3
      src/Materials/Textures/babylon.texture.ts

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 4226 - 4225
dist/preview release/babylon.d.ts


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 4226 - 4225
dist/preview release/babylon.module.d.ts


+ 13 - 3
src/Materials/Textures/babylon.texture.ts

@@ -80,6 +80,7 @@
         private _cachedUAng: number;
         private _cachedVAng: number;
         private _cachedWAng: number;
+        private _cachedProjectionMatrixId: number;
         private _cachedCoordinatesMode: number;
         public _samplingMode: number;
         private _buffer: any;
@@ -260,13 +261,20 @@
         }
 
         public getReflectionTextureMatrix(): Matrix {
+            let scene = this.getScene();
             if (
                 this.uOffset === this._cachedUOffset &&
                 this.vOffset === this._cachedVOffset &&
                 this.uScale === this._cachedUScale &&
                 this.vScale === this._cachedVScale &&
                 this.coordinatesMode === this._cachedCoordinatesMode) {
-                return this._cachedTextureMatrix;
+                    if (this.coordinatesMode === Texture.PROJECTION_MODE) {
+                        if (this._cachedProjectionMatrixId === scene.getProjectionMatrix().updateFlag) {
+                            return this._cachedTextureMatrix;
+                        }
+                    } else {
+                        return this._cachedTextureMatrix;
+                    }
             }
 
             if (!this._cachedTextureMatrix) {
@@ -299,14 +307,16 @@
                     this._projectionModeMatrix.m[14] = 1.0;
                     this._projectionModeMatrix.m[15] = 1.0;
 
-                    this.getScene().getProjectionMatrix().multiplyToRef(this._projectionModeMatrix, this._cachedTextureMatrix);
+                    let projectionMatrix = scene.getProjectionMatrix();
+                    this._cachedProjectionMatrixId = projectionMatrix.updateFlag;
+                    projectionMatrix.multiplyToRef(this._projectionModeMatrix, this._cachedTextureMatrix);
                     break;
                 default:
                     Matrix.IdentityToRef(this._cachedTextureMatrix);
                     break;
             }
             
-            this.getScene().markAllMaterialsAsDirty(Material.TextureDirtyFlag, (mat) => {
+            scene.markAllMaterialsAsDirty(Material.TextureDirtyFlag, (mat) => {
                 return (mat.getActiveTextures().indexOf(this) !== -1);
             });