Sfoglia il codice sorgente

Fixing pick issue when hardware scaling != 1

David Catuhe 11 anni fa
parent
commit
f84147b655

+ 2 - 2
Babylon/Math/babylon.math.js

@@ -1758,8 +1758,8 @@
             this.height = height;
         }
         Viewport.prototype.toGlobal = function (engine) {
-            var width = engine.getRenderWidth() * engine.getHardwareScalingLevel();
-            var height = engine.getRenderHeight() * engine.getHardwareScalingLevel();
+            var width = engine.getRenderWidth();
+            var height = engine.getRenderHeight();
             return new Viewport(this.x * width, this.y * height, this.width * width, this.height * height);
         };
         return Viewport;

+ 2 - 2
Babylon/Math/babylon.math.ts

@@ -1767,8 +1767,8 @@
         }
 
         public toGlobal(engine) {
-            var width = engine.getRenderWidth() * engine.getHardwareScalingLevel();
-            var height = engine.getRenderHeight() * engine.getHardwareScalingLevel();
+            var width = engine.getRenderWidth();
+            var height = engine.getRenderHeight();
             return new Viewport(this.x * width, this.y * height, this.width * width, this.height * height);
         }
     }

+ 16 - 2
Babylon/Tools/babylon.tools.js

@@ -440,28 +440,42 @@
             texture.dispose();
         };
 
-        // Logs
         Tools._FormatMessage = function (message) {
             var padStr = function (i) {
                 return (i < 10) ? "0" + i : "" + i;
             };
 
             var date = new Date();
-            return "BJS - [" + padStr(date.getHours()) + ":" + padStr(date.getMinutes()) + ":" + padStr(date.getSeconds()) + "]:" + message;
+            return "BJS - [" + padStr(date.getHours()) + ":" + padStr(date.getMinutes()) + ":" + padStr(date.getSeconds()) + "]: " + message;
         };
 
         Tools.Log = function (message) {
+            if (Tools.CurrentLogLevel > Tools.MessageLogLevel) {
+                return;
+            }
             console.log(Tools._FormatMessage(message));
         };
 
         Tools.Warn = function (message) {
+            if (Tools.CurrentLogLevel > Tools.WarningLogLevel) {
+                return;
+            }
             console.warn(Tools._FormatMessage(message));
         };
 
         Tools.Error = function (message) {
+            if (Tools.CurrentLogLevel > Tools.ErrorLogLevel) {
+                return;
+            }
             console.error(Tools._FormatMessage(message));
         };
         Tools.BaseUrl = "";
+
+        Tools.MessageLogLevel = 0;
+        Tools.WarningLogLevel = 1;
+        Tools.ErrorLogLevel = 2;
+        Tools.NoneLogLevel = 3;
+        Tools.CurrentLogLevel = Tools.MessageLogLevel;
         return Tools;
     })();
     BABYLON.Tools = Tools;

+ 16 - 1
Babylon/Tools/babylon.tools.ts

@@ -474,22 +474,37 @@
         }
 
         // Logs
+        public static MessageLogLevel = 0;
+        public static WarningLogLevel = 1;
+        public static ErrorLogLevel = 2;
+        public static NoneLogLevel = 3;
+        public static CurrentLogLevel = Tools.MessageLogLevel;
+
         private static _FormatMessage(message: string): string {
             var padStr = i => (i < 10) ? "0" + i : "" + i;
 
             var date = new Date();
-            return "BJS - [" + padStr(date.getHours()) + ":" + padStr(date.getMinutes()) +  ":" + padStr(date.getSeconds()) + "]:" + message;
+            return "BJS - [" + padStr(date.getHours()) + ":" + padStr(date.getMinutes()) +  ":" + padStr(date.getSeconds()) + "]: " + message;
         }
 
         public static Log(message: string): void {
+            if (Tools.CurrentLogLevel > Tools.MessageLogLevel) {
+                return;
+            }
             console.log(Tools._FormatMessage(message));
         }
 
         public static Warn(message: string): void {
+            if (Tools.CurrentLogLevel > Tools.WarningLogLevel) {
+                return;
+            }
             console.warn(Tools._FormatMessage(message));
         }
 
         public static Error(message: string): void {
+            if (Tools.CurrentLogLevel > Tools.ErrorLogLevel) {
+                return;
+            }
             console.error(Tools._FormatMessage(message));
         }
     }

+ 2 - 1
Babylon/babylon.engine.js

@@ -538,8 +538,8 @@
             this._gl.attachShader(shaderProgram, fragmentShader);
 
             this._gl.linkProgram(shaderProgram);
-            
             var linked = this._gl.getProgramParameter(shaderProgram, this._gl.LINK_STATUS);
+
             if (!linked) {
                 var error = this._gl.getProgramInfoLog(shaderProgram);
                 if (error) {
@@ -752,6 +752,7 @@
         Engine.prototype.createTexture = function (url, noMipmap, invertY, scene) {
             var _this = this;
             var texture = this._gl.createTexture();
+
             var isDDS = this.getCaps().s3tc && (url.substr(url.length - 4, 4).toLowerCase() === ".dds");
 
             scene._addPendingData(texture);

+ 3 - 2
Babylon/babylon.engine.ts

@@ -597,8 +597,8 @@
             this._gl.attachShader(shaderProgram, fragmentShader);
 
             this._gl.linkProgram(shaderProgram);
-            
             var linked = this._gl.getProgramParameter(shaderProgram, this._gl.LINK_STATUS);
+
             if (!linked) {
                 var error = this._gl.getProgramInfoLog(shaderProgram);
                 if (error) {
@@ -811,6 +811,7 @@
 
         public createTexture(url: string, noMipmap: boolean, invertY: boolean, scene: Scene): WebGLTexture {
             var texture = this._gl.createTexture();
+
             var isDDS = this.getCaps().s3tc && (url.substr(url.length - 4, 4).toLowerCase() === ".dds");
 
             scene._addPendingData(texture);
@@ -826,7 +827,7 @@
                     var loadMipmap = info.mipmapCount > 1 && !noMipmap;
 
                     prepareWebGLTexture(texture, this._gl, scene, info.width, info.height, invertY, !loadMipmap, true, () => {
-                        BABYLON.Internals.DDSTools.UploadDDSLevels(this._gl, this.getCaps().s3tc, data, loadMipmap);
+                        Internals.DDSTools.UploadDDSLevels(this._gl, this.getCaps().s3tc, data, loadMipmap);
                     });
                 }, null, scene.database, true);
             } else {

+ 3 - 3
Babylon/babylon.scene.js

@@ -1056,10 +1056,10 @@
             var viewport = cameraViewport.toGlobal(engine);
 
             // Moving coordinates to local viewport world
-            x = x - viewport.x;
-            y = y - (this._engine.getRenderHeight() - viewport.y - viewport.height);
+            x = x / this._engine.getHardwareScalingLevel() - viewport.x;
+            y = y / this._engine.getHardwareScalingLevel() - (this._engine.getRenderHeight() - viewport.y - viewport.height);
 
-            return BABYLON.Ray.CreateNew(x * this._engine.getHardwareScalingLevel(), y * this._engine.getHardwareScalingLevel(), viewport.width, viewport.height, world ? world : BABYLON.Matrix.Identity(), camera.getViewMatrix(), camera.getProjectionMatrix());
+            return BABYLON.Ray.CreateNew(x, y, viewport.width, viewport.height, world ? world : BABYLON.Matrix.Identity(), camera.getViewMatrix(), camera.getProjectionMatrix());
         };
 
         Scene.prototype._internalPick = function (rayFunction, predicate, fastCheck) {

+ 3 - 3
Babylon/babylon.scene.ts

@@ -1133,10 +1133,10 @@
             var viewport = cameraViewport.toGlobal(engine);
 
             // Moving coordinates to local viewport world
-            x = x - viewport.x;
-            y = y - (this._engine.getRenderHeight() - viewport.y - viewport.height);
+            x = x / this._engine.getHardwareScalingLevel() - viewport.x;
+            y = y / this._engine.getHardwareScalingLevel() - (this._engine.getRenderHeight() - viewport.y - viewport.height);
 
-            return BABYLON.Ray.CreateNew(x * this._engine.getHardwareScalingLevel(), y * this._engine.getHardwareScalingLevel(), viewport.width, viewport.height, world ? world : BABYLON.Matrix.Identity(), camera.getViewMatrix(), camera.getProjectionMatrix());
+            return BABYLON.Ray.CreateNew(x, y, viewport.width, viewport.height, world ? world : BABYLON.Matrix.Identity(), camera.getViewMatrix(), camera.getProjectionMatrix());
         }
 
         private _internalPick(rayFunction: (world: Matrix) => Ray, predicate: (mesh: Mesh) => boolean, fastCheck?: boolean): PickingInfo {

File diff suppressed because it is too large
+ 7 - 7
babylon.1.12-beta.js