Bläddra i källkod

Merge branch 'master' of https://github.com/BabylonJS/Babylon.js

sebavan 4 år sedan
förälder
incheckning
8b05050b05

+ 15 - 0
Playground/index-local.html

@@ -55,6 +55,12 @@
         <div id="host-element">
         </div>
         <script>
+            function GetAbsoluteUrl(url) {
+                const a = document.createElement("a");
+                a.href = url;
+                return a.href;
+            }
+
             // Load the scripts + map file to allow vscode debug.
             BABYLONDEVTOOLS.Loader       
                 .require("index.js")
@@ -69,6 +75,15 @@
                     };
                     BABYLON.GLTF2.Loader.Extensions.EXT_meshopt_compression.DecoderPath =
                         "../dist/preview%20release/meshopt_decoder.module.js";
+                    BABYLON.KhronosTextureContainer2.URLConfig = {
+                        jsDecoderModule: GetAbsoluteUrl("../dist/preview%20release/babylon.ktx2Decoder.js"),
+                        wasmUASTCToASTC: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_astc.wasm"),
+                        wasmUASTCToBC7: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_bc7.wasm"),
+                        wasmUASTCToRGBA_UNORM: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_rgba32_unorm.wasm"),
+                        wasmUASTCToRGBA_SRGB: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_rgba32_srgb.wasm"),
+                        jsMSCTranscoder: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/msc_basis_transcoder.js"),
+                        wasmMSCTranscoder: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/msc_basis_transcoder.wasm")
+                    };
                 });
         </script>
     </body>

+ 1 - 0
dist/preview release/what's new.md

@@ -48,3 +48,4 @@
 ## Breaking changes
 
 - Use both `mesh.visibility` and `material.alpha` values to compute the global alpha value used by the soft transparent shadow rendering code. Formerly was only using `mesh.visibility` ([Popov72](https://github.com/Popov72))
+- The `Texture.hasAlpha` property is automatically set by the KTX2 loader if the texture has an alpha channel ([Popov72](https://github.com/Popov72))

+ 2 - 1
ktx2Decoder/src/ktx2Decoder.ts

@@ -35,6 +35,7 @@ export interface IDecodedData {
     transcodedFormat: number;
     mipmaps: Array<IMipmap>;
     isInGammaSpace: boolean;
+    hasAlpha: boolean;
     errors?: string;
     transcoderName?: string;
 }
@@ -165,7 +166,7 @@ export class KTX2Decoder {
 
         const mipmaps: Array<IMipmap> = [];
         const dataPromises: Array<Promise<Uint8Array | null>> = [];
-        const decodedData: IDecodedData = { width: 0, height: 0, transcodedFormat, mipmaps, isInGammaSpace: kfr.isInGammaSpace, transcoderName: transcoder.getName() };
+        const decodedData: IDecodedData = { width: 0, height: 0, transcodedFormat, mipmaps, isInGammaSpace: kfr.isInGammaSpace, hasAlpha: kfr.hasAlpha, transcoderName: transcoder.getName() };
 
         let firstImageDescIndex = 0;
 

+ 15 - 0
localDev/index-views.html

@@ -87,6 +87,12 @@
     </div>
 
     <script>
+        function GetAbsoluteUrl(url) {
+            const a = document.createElement("a");
+            a.href = url;
+            return a.href;
+        }
+
         var canvas = document.createElement("canvas");
         //	canvas = WebGLDebugUtils.makeLostContextSimulatingCanvas(canvas);
         var divFps = document.getElementById("fps");
@@ -120,6 +126,15 @@
                 };
                 BABYLON.GLTF2.Loader.Extensions.EXT_meshopt_compression.DecoderPath =
                     "../dist/preview%20release/meshopt_decoder.module.js";
+                BABYLON.KhronosTextureContainer2.URLConfig = {
+                    jsDecoderModule: GetAbsoluteUrl("../dist/preview%20release/babylon.ktx2Decoder.js"),
+                    wasmUASTCToASTC: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_astc.wasm"),
+                    wasmUASTCToBC7: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_bc7.wasm"),
+                    wasmUASTCToRGBA_UNORM: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_rgba32_unorm.wasm"),
+                    wasmUASTCToRGBA_SRGB: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_rgba32_srgb.wasm"),
+                    jsMSCTranscoder: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/msc_basis_transcoder.js"),
+                    wasmMSCTranscoder: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/msc_basis_transcoder.wasm")
+                };
 
                 if (BABYLON.Engine.isSupported()) {
                     if (typeof createEngine !== "undefined") {

+ 15 - 0
localDev/index.html

@@ -56,6 +56,12 @@
     <canvas id="renderCanvas" touch-action="none"></canvas>
 
     <script>
+        function GetAbsoluteUrl(url) {
+            const a = document.createElement("a");
+            a.href = url;
+            return a.href;
+        }
+
         var canvas = document.getElementById("renderCanvas");
         //	canvas = WebGLDebugUtils.makeLostContextSimulatingCanvas(canvas);
         var divFps = document.getElementById("fps");
@@ -89,6 +95,15 @@
                 };
                 BABYLON.GLTF2.Loader.Extensions.EXT_meshopt_compression.DecoderPath =
                     "../dist/preview%20release/meshopt_decoder.module.js";
+                BABYLON.KhronosTextureContainer2.URLConfig = {
+                    jsDecoderModule: GetAbsoluteUrl("../dist/preview%20release/babylon.ktx2Decoder.js"),
+                    wasmUASTCToASTC: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_astc.wasm"),
+                    wasmUASTCToBC7: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_bc7.wasm"),
+                    wasmUASTCToRGBA_UNORM: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_rgba32_unorm.wasm"),
+                    wasmUASTCToRGBA_SRGB: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_rgba32_srgb.wasm"),
+                    jsMSCTranscoder: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/msc_basis_transcoder.js"),
+                    wasmMSCTranscoder: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/msc_basis_transcoder.wasm")
+                };
 
                 if (BABYLON.Engine.isSupported()) {
                     if (typeof createEngine !== "undefined") {

+ 15 - 0
sandbox/public/index-local.html

@@ -31,6 +31,12 @@
     <div id="host-element">
     </div>
     <script>
+        function GetAbsoluteUrl(url) {
+            const a = document.createElement("a");
+            a.href = url;
+            return a.href;
+        }
+
         // Load the scripts + map file to allow vscode debug.
         BABYLONDEVTOOLS.Loader
             .require("index.js")
@@ -45,6 +51,15 @@
                 };
                 BABYLON.GLTF2.Loader.Extensions.EXT_meshopt_compression.DecoderPath =
                     "../../dist/preview%20release/meshopt_decoder.module.js";
+                BABYLON.KhronosTextureContainer2.URLConfig = {
+                    jsDecoderModule: GetAbsoluteUrl("../dist/preview%20release/babylon.ktx2Decoder.js"),
+                    wasmUASTCToASTC: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_astc.wasm"),
+                    wasmUASTCToBC7: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_bc7.wasm"),
+                    wasmUASTCToRGBA_UNORM: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_rgba32_unorm.wasm"),
+                    wasmUASTCToRGBA_SRGB: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/uastc_rgba32_srgb.wasm"),
+                    jsMSCTranscoder: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/msc_basis_transcoder.js"),
+                    wasmMSCTranscoder: GetAbsoluteUrl("../dist/preview%20release/ktx2Transcoders/msc_basis_transcoder.wasm")
+                };
             });
     </script>
 </body>

+ 25 - 7
src/Materials/Textures/baseTexture.ts

@@ -50,23 +50,41 @@ export class BaseTexture extends ThinTexture implements IAnimatable {
      */
     public reservedDataStore: any = null;
 
-    @serialize("hasAlpha")
     private _hasAlpha = false;
     /**
      * Define if the texture is having a usable alpha value (can be use for transparency or glossiness for instance).
      */
+    @serialize()
+    public get hasAlpha(): boolean {
+        if (!this._texture) {
+            return this._hasAlpha;
+        } else {
+            if (this._texture._hasAlpha === null) {
+                this._texture._hasAlpha = this._hasAlpha;
+            }
+        }
+
+        return this._texture._hasAlpha;
+    }
+
     public set hasAlpha(value: boolean) {
-        if (this._hasAlpha === value) {
-            return;
+        if (!this._texture) {
+            if (this._hasAlpha === value) {
+                return;
+            }
+
+            this._hasAlpha = value;
+        } else {
+            if (this._texture._hasAlpha === value) {
+                return;
+            }
+            this._texture._hasAlpha = value;
         }
-        this._hasAlpha = value;
+
         if (this._scene) {
             this._scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag | Constants.MATERIAL_MiscDirtyFlag);
         }
     }
-    public get hasAlpha(): boolean {
-        return this._hasAlpha;
-    }
 
     /**
      * Defines if the alpha value should be determined via the rgb values.

+ 2 - 0
src/Materials/Textures/internalTexture.ts

@@ -257,6 +257,8 @@ export class InternalTexture {
 
     /** @hidden */
     public _gammaSpace: Nullable<boolean> = null;
+    /** @hidden */
+    public _hasAlpha: Nullable<boolean> = null;
 
     private _engine: ThinEngine;
 

+ 2 - 0
src/Misc/khronosTextureContainer2.ts

@@ -198,6 +198,7 @@ export class KhronosTextureContainer2 {
             // return back some information about the decoded data
             options.transcodedFormat = data.transcodedFormat;
             options.isInGammaSpace = data.isInGammaSpace;
+            options.hasAlpha = data.hasAlpha;
             options.transcoderName = data.transcoderName;
         }
 
@@ -209,6 +210,7 @@ export class KhronosTextureContainer2 {
         }
 
         internalTexture._gammaSpace = data.isInGammaSpace;
+        internalTexture._hasAlpha = data.hasAlpha;
 
         if (data.errors) {
             throw new Error("KTX2 container - could not transcode the data. " + data.errors);

BIN
tests/validation/ReferenceImages/ktx2decoder.png


+ 1 - 1
tests/validation/config.json

@@ -921,7 +921,7 @@
         },
         {
             "title": "KTX2 decoder test",
-            "playgroundId": "#EIJH8L#1",
+            "playgroundId": "#EIJH8L#26",
             "referenceImage": "ktx2decoder.png",
             "excludeFromAutomaticTesting": true
         },