Преглед изворни кода

Fixing bug with ImageAssetTask

David Catuhe пре 11 година
родитељ
комит
a967c90b3d

+ 1 - 0
Babylon/Materials/textures/babylon.renderTargetTexture.ts

@@ -6,6 +6,7 @@
         public coordinatesMode = BABYLON.Texture.PROJECTION_MODE;
         public onBeforeRender: () => void;
         public onAfterRender: () => void;
+        public activeCamera: Camera;
         public customRenderFunction: (opaqueSubMeshes: SmartArray<SubMesh>, transparentSubMeshes: SmartArray<SubMesh>, alphaTestSubMeshes: SmartArray<SubMesh>, beforeTransparents?: () => void) => void;
 
         private _size: number;

+ 2 - 0
Babylon/Tools/babylon.assetsManager.js

@@ -120,6 +120,8 @@
 
                 onError();
             };
+
+            img.src = this.url;
         };
         return ImageAssetTask;
     })();

+ 2 - 0
Babylon/Tools/babylon.assetsManager.ts

@@ -138,6 +138,8 @@
 
                 onError();
             };
+
+            img.src = this.url;
         }
     }
 

+ 33 - 7
Babylon/babylon.scene.js

@@ -818,16 +818,11 @@
                 skeleton.prepare();
             }
 
-            for (var customIndex = 0; customIndex < this.customRenderTargets.length; customIndex++) {
-                var renderTarget = this.customRenderTargets[customIndex];
-                this._renderTargets.push(renderTarget);
-            }
-
             // Render targets
             var beforeRenderTargetDate = new Date().getTime();
             if (this.renderTargetsEnabled) {
                 for (var renderIndex = 0; renderIndex < this._renderTargets.length; renderIndex++) {
-                    renderTarget = this._renderTargets.data[renderIndex];
+                    var renderTarget = this._renderTargets.data[renderIndex];
                     if (renderTarget._shouldRender()) {
                         this._renderId++;
                         renderTarget.render();
@@ -839,7 +834,7 @@
             if (this._renderTargets.length > 0) {
                 engine.restoreDefaultFramebuffer();
             }
-            this._renderTargetsDuration = new Date().getTime() - beforeRenderTargetDate;
+            this._renderTargetsDuration += new Date().getTime() - beforeRenderTargetDate;
 
             // Prepare Frame
             this.postProcessManager._prepareFrame();
@@ -980,6 +975,37 @@
                 this._physicsEngine._runOneStep(deltaTime / 1000.0);
             }
 
+            // Customs render targets
+            var beforeRenderTargetDate = new Date().getTime();
+            var engine = this.getEngine();
+            if (this.renderTargetsEnabled) {
+                for (var customIndex = 0; customIndex < this.customRenderTargets.length; customIndex++) {
+                    var renderTarget = this.customRenderTargets[customIndex];
+                    if (renderTarget._shouldRender()) {
+                        this._renderId++;
+
+                        this.activeCamera = renderTarget.activeCamera || this.activeCamera;
+
+                        if (!this.activeCamera)
+                            throw new Error("Active camera not set");
+
+                        // Viewport
+                        engine.setViewport(this.activeCamera.viewport);
+
+                        // Camera
+                        this.updateTransformMatrix();
+
+                        renderTarget.render();
+                    }
+                }
+                this._renderId++;
+            }
+
+            if (this.customRenderTargets.length > 0) {
+                engine.restoreDefaultFramebuffer();
+            }
+            this._renderTargetsDuration += new Date().getTime() - beforeRenderTargetDate;
+
             // Clear
             this._engine.clear(this.clearColor, this.autoClear || this.forceWireframe, true);
 

+ 34 - 8
Babylon/babylon.scene.ts

@@ -894,17 +894,11 @@
                 skeleton.prepare();
             }
 
-            // Customs render targets registration
-            for (var customIndex = 0; customIndex < this.customRenderTargets.length; customIndex++) {
-                var renderTarget = this.customRenderTargets[customIndex];
-                this._renderTargets.push(renderTarget);
-            }
-
             // Render targets
             var beforeRenderTargetDate = new Date().getTime();
             if (this.renderTargetsEnabled) {
                 for (var renderIndex = 0; renderIndex < this._renderTargets.length; renderIndex++) {
-                    renderTarget = this._renderTargets.data[renderIndex];
+                    var renderTarget = this._renderTargets.data[renderIndex];
                     if (renderTarget._shouldRender()) {
                         this._renderId++;
                         renderTarget.render();
@@ -916,7 +910,7 @@
             if (this._renderTargets.length > 0) { // Restore back buffer
                 engine.restoreDefaultFramebuffer();
             }
-            this._renderTargetsDuration = new Date().getTime() - beforeRenderTargetDate;
+            this._renderTargetsDuration += new Date().getTime() - beforeRenderTargetDate;
 
             // Prepare Frame
             this.postProcessManager._prepareFrame();
@@ -1060,6 +1054,38 @@
                 this._physicsEngine._runOneStep(deltaTime / 1000.0);
             }
 
+            // Customs render targets
+            var beforeRenderTargetDate = new Date().getTime();
+            var engine = this.getEngine();
+            if (this.renderTargetsEnabled) {
+                for (var customIndex = 0; customIndex < this.customRenderTargets.length; customIndex++) {
+                    var renderTarget = this.customRenderTargets[customIndex];
+                    if (renderTarget._shouldRender()) {
+                        this._renderId++;
+
+                        this.activeCamera = renderTarget.activeCamera || this.activeCamera;
+
+                        if (!this.activeCamera)
+                            throw new Error("Active camera not set");
+
+                        // Viewport
+                        engine.setViewport(this.activeCamera.viewport);
+
+                        // Camera
+                        this.updateTransformMatrix();
+
+                        renderTarget.render();
+                    }
+                }
+                this._renderId++;
+            }
+
+            if (this.customRenderTargets.length > 0) { // Restore back buffer
+                engine.restoreDefaultFramebuffer();
+            }
+            this._renderTargetsDuration += new Date().getTime() - beforeRenderTargetDate;
+
+
             // Clear
             this._engine.clear(this.clearColor, this.autoClear || this.forceWireframe, true);
 

+ 35 - 7
babylon.1.14-beta-debug.js

@@ -8259,16 +8259,11 @@ var BABYLON;
                 skeleton.prepare();
             }
 
-            for (var customIndex = 0; customIndex < this.customRenderTargets.length; customIndex++) {
-                var renderTarget = this.customRenderTargets[customIndex];
-                this._renderTargets.push(renderTarget);
-            }
-
            
             var beforeRenderTargetDate = new Date().getTime();
             if (this.renderTargetsEnabled) {
                 for (var renderIndex = 0; renderIndex < this._renderTargets.length; renderIndex++) {
-                    renderTarget = this._renderTargets.data[renderIndex];
+                    var renderTarget = this._renderTargets.data[renderIndex];
                     if (renderTarget._shouldRender()) {
                         this._renderId++;
                         renderTarget.render();
@@ -8280,7 +8275,7 @@ var BABYLON;
             if (this._renderTargets.length > 0) {
                 engine.restoreDefaultFramebuffer();
             }
-            this._renderTargetsDuration = new Date().getTime() - beforeRenderTargetDate;
+            this._renderTargetsDuration += new Date().getTime() - beforeRenderTargetDate;
 
            
             this.postProcessManager._prepareFrame();
@@ -8422,6 +8417,37 @@ var BABYLON;
             }
 
            
+            var beforeRenderTargetDate = new Date().getTime();
+            var engine = this.getEngine();
+            if (this.renderTargetsEnabled) {
+                for (var customIndex = 0; customIndex < this.customRenderTargets.length; customIndex++) {
+                    var renderTarget = this.customRenderTargets[customIndex];
+                    if (renderTarget._shouldRender()) {
+                        this._renderId++;
+
+                        this.activeCamera = renderTarget.activeCamera || this.activeCamera;
+
+                        if (!this.activeCamera)
+                            throw new Error("Active camera not set");
+
+                       
+                        engine.setViewport(this.activeCamera.viewport);
+
+                       
+                        this.updateTransformMatrix();
+
+                        renderTarget.render();
+                    }
+                }
+                this._renderId++;
+            }
+
+            if (this.customRenderTargets.length > 0) {
+                engine.restoreDefaultFramebuffer();
+            }
+            this._renderTargetsDuration += new Date().getTime() - beforeRenderTargetDate;
+
+           
             this._engine.clear(this.clearColor, this.autoClear || this.forceWireframe, true);
 
             for (var lightIndex = 0; lightIndex < this.lights.length; lightIndex++) {
@@ -25283,6 +25309,8 @@ var BABYLON;
 
                 onError();
             };
+
+            img.src = this.url;
         };
         return ImageAssetTask;
     })();

Разлика између датотеке није приказан због своје велике величине
+ 5 - 4
babylon.1.14-beta.js