Ver código fonte

Merge pull request #5257 from kcoley/glTFSerializerFixMaterialExporter

glTFSerializer: Remove unnecessary blob conversion
David Catuhe 7 anos atrás
pai
commit
4a1dc6091b

+ 24 - 17
serializers/src/glTF/2.0/babylon.glTFMaterialExporter.ts

@@ -479,14 +479,14 @@ module BABYLON.GLTF2.Exporter {
             return new Promise<string>((resolve, reject) => {
             return new Promise<string>((resolve, reject) => {
                 let hostingScene: Scene;
                 let hostingScene: Scene;
 
 
-                let textureType = Engine.TEXTURETYPE_UNSIGNED_INT;
+                const textureType = Engine.TEXTURETYPE_UNSIGNED_INT;
                 const engine = this._exporter._getLocalEngine();
                 const engine = this._exporter._getLocalEngine();
 
 
                 hostingScene = new Scene(engine);
                 hostingScene = new Scene(engine);
 
 
                 // Create a temporary texture with the texture buffer data
                 // Create a temporary texture with the texture buffer data
-                let tempTexture = engine.createRawTexture(buffer, width, height, Engine.TEXTUREFORMAT_RGBA, false, true, Texture.NEAREST_SAMPLINGMODE, null, textureType);
-                let postProcess = new PostProcess("pass", "pass", null, null, 1, null, Texture.NEAREST_SAMPLINGMODE, engine, false, undefined, Engine.TEXTURETYPE_UNSIGNED_INT, undefined, null, false);
+                const tempTexture = engine.createRawTexture(buffer, width, height, Engine.TEXTUREFORMAT_RGBA, false, true, Texture.NEAREST_SAMPLINGMODE, null, textureType);
+                const postProcess = new PostProcess("pass", "pass", null, null, 1, null, Texture.NEAREST_SAMPLINGMODE, engine, false, undefined, Engine.TEXTURETYPE_UNSIGNED_INT, undefined, null, false);
                 postProcess.getEffect().executeWhenCompiled(() => {
                 postProcess.getEffect().executeWhenCompiled(() => {
                     postProcess.onApply = (effect) => {
                     postProcess.onApply = (effect) => {
                         effect._bindTexture("textureSampler", tempTexture);
                         effect._bindTexture("textureSampler", tempTexture);
@@ -500,21 +500,28 @@ module BABYLON.GLTF2.Exporter {
 
 
                     // Read data from WebGL
                     // Read data from WebGL
                     const canvas = engine.getRenderingCanvas();
                     const canvas = engine.getRenderingCanvas();
+
                     if (canvas) {
                     if (canvas) {
-                        BABYLON.Tools.ToBlob(canvas, blob => {
-                            if (blob) {
-                                let fileReader = new FileReader();
-                                fileReader.onload = (event: any) => {
-                                    let base64String = event.target.result as string;
-                                    hostingScene.dispose();
-                                    resolve(base64String);
-                                };
-                                fileReader.readAsDataURL(blob);
-                            }
-                            else {
-                                reject("gltfMaterialExporter: Failed to get blob from image canvas!");
-                            }
-                        });
+                        if (!canvas.toBlob) { // fallback for browsers without "canvas.toBlob"
+                            const dataURL = canvas.toDataURL();
+                            resolve(dataURL);
+                        } 
+                        else {
+                            BABYLON.Tools.ToBlob(canvas, blob => {
+                                if (blob) {
+                                    let fileReader = new FileReader();
+                                    fileReader.onload = (event: any) => {
+                                        let base64String = event.target.result as string;
+                                        hostingScene.dispose();
+                                        resolve(base64String);
+                                    };
+                                    fileReader.readAsDataURL(blob);
+                                }
+                                else {
+                                    reject("gltfMaterialExporter: Failed to get blob from image canvas!");
+                                }
+                            });
+                        }
                     }
                     }
                     else {
                     else {
                         reject("Engine is missing a canvas!");
                         reject("Engine is missing a canvas!");