Browse Source

Fix for issue where Safari canvas is drawn Y down, workaround is discovered where premultiplying alpha causes correct canvas orientation. Added utility method to detect Safari browser

Nicholas Barlow 5 years ago
parent
commit
c0e4ad34cf
2 changed files with 13 additions and 1 deletions
  1. 5 1
      serializers/src/glTF/2.0/glTFExporter.ts
  2. 8 0
      src/Misc/tools.ts

+ 5 - 1
serializers/src/glTF/2.0/glTFExporter.ts

@@ -335,7 +335,11 @@ export class _Exporter {
             localCanvas.id = "WriteCanvas";
             localCanvas.width = 2048;
             localCanvas.height = 2048;
-            this._localEngine = new Engine(localCanvas, true, { premultipliedAlpha: false, preserveDrawingBuffer: true });
+            if (Tools.IsSafari()) {
+                this._localEngine = new Engine(localCanvas, true, { premultipliedAlpha: true, preserveDrawingBuffer: true });
+            } else {
+                this._localEngine = new Engine(localCanvas, true, { premultipliedAlpha: false, preserveDrawingBuffer: true });
+            }
             this._localEngine.setViewport(new Viewport(0, 0, 1, 1));
         }
 

+ 8 - 0
src/Misc/tools.ts

@@ -1215,6 +1215,14 @@ export class AsyncLoop {
             }
         }, callback);
     }
+
+    /**
+     * Utility function to detect if the current user agent is Safari
+     * @returns whether or not the current user agent is safari
+     */
+    public static IsSafari() : boolean {
+        return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
+    }
 }
 
 // Will only be define if Tools is imported freeing up some space when only engine is required