@babylonjs/core 7.25.2 → 7.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Engines/Extensions/engine.prefilteredCubeTexture.d.ts +0 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.js +0 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.readTexture.d.ts +2 -9
- package/Engines/Extensions/engine.readTexture.js +3 -76
- package/Engines/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.alpha.js +3 -3
- package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js +5 -5
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +10 -10
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.readTexture.js +3 -3
- package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +6 -6
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +2 -2
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetTexture.js +2 -2
- package/Engines/WebGPU/Extensions/engine.renderTargetTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +2 -2
- package/Engines/WebGPU/webgpuRenderTargetWrapper.js.map +1 -1
- package/Engines/abstractEngine.d.ts +2 -0
- package/Engines/abstractEngine.functions.d.ts +9 -0
- package/Engines/abstractEngine.functions.js +76 -0
- package/Engines/abstractEngine.functions.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.d.ts +7 -5
- package/Engines/engine.js +7 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +66 -0
- package/Engines/thinWebGPUEngine.js +120 -0
- package/Engines/thinWebGPUEngine.js.map +1 -0
- package/Engines/webgpuEngine.d.ts +9 -58
- package/Engines/webgpuEngine.js +9 -108
- package/Engines/webgpuEngine.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.d.ts +4 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +17 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.d.ts +2 -0
- package/Materials/Node/Blocks/Dual/textureBlock.js +30 -23
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorConverterBlock.d.ts +36 -0
- package/Materials/Node/Blocks/colorConverterBlock.js +192 -0
- package/Materials/Node/Blocks/colorConverterBlock.js.map +1 -0
- package/Materials/Node/Blocks/index.d.ts +4 -0
- package/Materials/Node/Blocks/index.js +4 -0
- package/Materials/Node/Blocks/index.js.map +1 -1
- package/Materials/Node/Blocks/loopBlock.d.ts +49 -0
- package/Materials/Node/Blocks/loopBlock.js +110 -0
- package/Materials/Node/Blocks/loopBlock.js.map +1 -0
- package/Materials/Node/Blocks/storageReadBlock.d.ts +27 -0
- package/Materials/Node/Blocks/storageReadBlock.js +52 -0
- package/Materials/Node/Blocks/storageReadBlock.js.map +1 -0
- package/Materials/Node/Blocks/storageWriteBlock.d.ts +31 -0
- package/Materials/Node/Blocks/storageWriteBlock.js +62 -0
- package/Materials/Node/Blocks/storageWriteBlock.js.map +1 -0
- package/Materials/Node/nodeMaterial.d.ts +1 -0
- package/Materials/Node/nodeMaterial.js +44 -12
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.d.ts +6 -0
- package/Materials/Node/nodeMaterialBlock.js +46 -3
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +6 -0
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +9 -0
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +4 -1
- package/Materials/Node/nodeMaterialBuildState.js +2 -0
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.d.ts +0 -1
- package/Materials/Textures/Filtering/hdrFiltering.js +0 -1
- package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
- package/Materials/Textures/Loaders/basisTextureLoader.d.ts +0 -1
- package/Materials/Textures/Loaders/basisTextureLoader.js +0 -1
- package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +0 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js +0 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +0 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +0 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.d.ts +0 -2
- package/Materials/Textures/Procedurals/proceduralTexture.js +0 -2
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +0 -1
- package/Materials/Textures/baseTexture.js +0 -1
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/colorGradingTexture.d.ts +0 -1
- package/Materials/Textures/colorGradingTexture.js +0 -2
- package/Materials/Textures/colorGradingTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.d.ts +0 -2
- package/Materials/Textures/cubeTexture.js +0 -2
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/equiRectangularCubeTexture.d.ts +0 -1
- package/Materials/Textures/equiRectangularCubeTexture.js +0 -1
- package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.d.ts +0 -1
- package/Materials/Textures/hdrCubeTexture.js +0 -1
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/rawCubeTexture.d.ts +0 -1
- package/Materials/Textures/rawCubeTexture.js +0 -1
- package/Materials/Textures/rawCubeTexture.js.map +1 -1
- package/Materials/Textures/rawTexture.d.ts +0 -1
- package/Materials/Textures/rawTexture.js +0 -1
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.d.ts +0 -1
- package/Materials/Textures/rawTexture2DArray.js +0 -1
- package/Materials/Textures/rawTexture2DArray.js.map +1 -1
- package/Materials/Textures/rawTexture3D.d.ts +0 -1
- package/Materials/Textures/rawTexture3D.js +0 -1
- package/Materials/Textures/rawTexture3D.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +2 -3
- package/Materials/Textures/renderTargetTexture.js +13 -5
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/effectRenderer.d.ts +0 -1
- package/Materials/effectRenderer.js +0 -2
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/material.detailMapConfiguration.d.ts +2 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +0 -1
- package/Materials/uniformBuffer.js +0 -1
- package/Materials/uniformBuffer.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +3 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +19 -8
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Misc/basis.d.ts +3 -3
- package/Misc/basis.js.map +1 -1
- package/Misc/dds.d.ts +0 -1
- package/Misc/dds.js +0 -1
- package/Misc/dds.js.map +1 -1
- package/Misc/dumpTools.js +103 -82
- package/Misc/dumpTools.js.map +1 -1
- package/Misc/environmentTextureTools.d.ts +0 -2
- package/Misc/environmentTextureTools.js +0 -2
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/index.d.ts +2 -0
- package/Misc/index.js +3 -0
- package/Misc/index.js.map +1 -1
- package/Misc/minMaxReducer.d.ts +0 -1
- package/Misc/minMaxReducer.js +0 -1
- package/Misc/minMaxReducer.js.map +1 -1
- package/Misc/rgbdTextureTools.d.ts +0 -2
- package/Misc/rgbdTextureTools.js +5 -10
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/screenshotTools.d.ts +0 -1
- package/Misc/screenshotTools.js +0 -1
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/textureTools.d.ts +0 -2
- package/Misc/textureTools.js +11 -2
- package/Misc/textureTools.js.map +1 -1
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.js.map +1 -1
- package/PostProcesses/anaglyphPostProcess.d.ts +2 -2
- package/PostProcesses/anaglyphPostProcess.js.map +1 -1
- package/PostProcesses/highlightsPostProcess.d.ts +2 -2
- package/PostProcesses/highlightsPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +0 -2
- package/PostProcesses/postProcess.js +0 -2
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/stereoscopicInterlacePostProcess.d.ts +3 -3
- package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +2 -2
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/package.json +1 -1
package/Misc/dds.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dds.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/dds.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,iCAAiC,EAAE,MAAM,uDAAuD,CAAC;AAE1G,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,0CAA0C,CAAC;AAElD,yFAAyF;AACzF,6CAA6C;AAC7C,yDAAyD;AACzD,MAAM,SAAS,GAAG,UAAU,CAAC;AAE7B,MAAM,kBAAkB;AACpB,oBAAoB;AACpB,mBAAmB;AACnB,mBAAmB;AACnB,4BAA4B;AAC5B,gBAAgB,GAAG,OAAO,CAAC;AAC/B,4BAA4B;AAC5B,wBAAwB;AAExB,6BAA6B;AAC7B,iCAAiC;AACjC,gCAAgC;AAEhC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,sCAAsC;AACtC,sCAAsC;AACtC,uCAAuC;AACvC,uCAAuC;AACvC,uCAAuC;AACvC,uCAAuC;AACvC,8BAA8B;AAE9B,MAAM,yBAAyB;AAC3B,mBAAmB;AACnB,WAAW,GAAG,GAAG,EACjB,QAAQ,GAAG,IAAI;AACf,mBAAmB;AACnB,cAAc,GAAG,OAAO,CAAC;AAE7B,SAAS,aAAa,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACxH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAChC,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9G,CAAC;AAED,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAExC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AACzC,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAC1C,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAEtC,MAAM,eAAe,GAAG,EAAE,CAAC,CAAC,mCAAmC;AAE/D,gCAAgC;AAChC,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,sBAAsB;AACtB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,sBAAsB;AACtB,sBAAsB;AACtB,MAAM,cAAc,GAAG,EAAE,CAAC;AAyD1B;;GAEG;AACH,MAAM,OAAO,QAAQ;IAMjB;;;;OAIG;IACI,MAAM,CAAC,UAAU,CAAC,IAAqB;QAC1C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;QAEzF,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,gBAAgB,EAAE;YACtC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;SACtD;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,IAAI,WAAW,GAAG,SAAS,CAAC,wBAAwB,CAAC;QAErD,QAAQ,MAAM,EAAE;YACZ,KAAK,2BAA2B;gBAC5B,WAAW,GAAG,SAAS,CAAC,sBAAsB,CAAC;gBAC/C,MAAM;YACV,KAAK,2BAA2B;gBAC5B,WAAW,GAAG,SAAS,CAAC,iBAAiB,CAAC;gBAC1C,MAAM;YACV,KAAK,WAAW;gBACZ,IAAI,UAAU,KAAK,8BAA8B,EAAE;oBAC/C,WAAW,GAAG,SAAS,CAAC,sBAAsB,CAAC;oBAC/C,MAAM;iBACT;gBACD,IAAI,UAAU,KAAK,8BAA8B,EAAE;oBAC/C,WAAW,GAAG,SAAS,CAAC,iBAAiB,CAAC;oBAC1C,MAAM;iBACT;SACR;QAED,OAAO;YACH,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;YACxB,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;YAC1B,WAAW,EAAE,WAAW;YACxB,QAAQ,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,KAAK,WAAW;YAC7D,KAAK,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,QAAQ;YACpD,WAAW,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,KAAK,cAAc;YACtE,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAAC,KAAK,gBAAgB;YACnE,YAAY,EAAE,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW;YACxF,UAAU,EAAE,UAAU;YACtB,WAAW,EAAE,WAAW;SAC3B,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,mCAAmC,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,UAAkB,EAAE,WAAwB,EAAE,GAAW;QAC3J,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACzD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnC,SAAS,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClD,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1D,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1D,IAAI,QAAQ,CAAC,sBAAsB,EAAE;oBACjC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;iBAC9B;qBAAM;oBACH,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC7D;gBACD,KAAK,IAAI,CAAC,CAAC;aACd;SACJ;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,4BAA4B,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,UAAkB,EAAE,WAAwB,EAAE,GAAW;QACpJ,IAAI,QAAQ,CAAC,sBAAsB,EAAE;YACjC,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YACzD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;oBACnC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC3C,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC3C,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;oBACxC,KAAK,IAAI,CAAC,CAAC;iBACd;aACJ;YAED,OAAO,SAAS,CAAC;SACpB;QAED,OAAO,IAAI,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAEO,MAAM,CAAC,wBAAwB,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,UAAkB,EAAE,WAAwB,EAAE,GAAW;QAChJ,IAAI,QAAQ,CAAC,sBAAsB,EAAE;YACjC,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAC1D,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;oBACnC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC3C,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC3C,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;oBAC3B,KAAK,IAAI,CAAC,CAAC;iBACd;aACJ;YAED,OAAO,SAAS,CAAC;SACpB;QACD,OAAO,IAAI,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,mCAAmC,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,UAAkB,EAAE,WAAwB,EAAE,GAAW;QAC3J,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC1D,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC5B,SAAS,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/C,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvD,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvD,IAAI,QAAQ,CAAC,sBAAsB,EAAE;oBACjC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;iBAC3C;qBAAM;oBACH,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC1D;gBACD,KAAK,IAAI,CAAC,CAAC;aACd;SACJ;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,8BAA8B,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,UAAkB,EAAE,WAAwB,EAAE,GAAW;QACtJ,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC1D,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;gBAChD,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACxD,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACxD,IAAI,QAAQ,CAAC,sBAAsB,EAAE;oBACjC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;iBAC9B;qBAAM;oBACH,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;iBAC3D;gBACD,KAAK,IAAI,CAAC,CAAC;aACd;SACJ;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,kCAAkC,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,UAAkB,EAAE,WAAwB,EAAE,GAAW;QAC1J,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACzD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC/D,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACvE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACvE,IAAI,QAAQ,CAAC,sBAAsB,EAAE;oBACjC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;iBAC9B;qBAAM;oBACH,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;iBAC1E;gBACD,KAAK,IAAI,CAAC,CAAC;aACd;SACJ;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAC9B,KAAa,EACb,MAAc,EACd,UAAkB,EAClB,UAAkB,EAClB,WAAwB,EACxB,OAAe,EACf,OAAe,EACf,OAAe,EACf,OAAe;QAEf,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEnC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;gBAC7C,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;gBACjD,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;gBACjD,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;gBACjD,KAAK,IAAI,CAAC,CAAC;aACd;SACJ;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,KAAa;QAC9C,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE;YACrD,OAAO,CAAC,CAAC;SACZ;QAED,OAAO,CAAC,GAAG,QAAQ,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEO,MAAM,CAAC,kBAAkB,CAC7B,KAAa,EACb,MAAc,EACd,UAAkB,EAClB,UAAkB,EAClB,WAAwB,EACxB,OAAe,EACf,OAAe,EACf,OAAe;QAEf,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEnC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;gBAC7C,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;gBACjD,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;gBACjD,KAAK,IAAI,CAAC,CAAC;aACd;SACJ;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,wBAAwB,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,UAAkB,EAAE,WAAwB;QACnI,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC7B,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnC,KAAK,EAAE,CAAC;aACX;SACJ;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,eAAe,CACzB,MAAsB,EACtB,OAAwB,EACxB,IAAqB,EACrB,IAAa,EACb,WAAoB,EACpB,KAAa,EACb,QAAQ,GAAG,CAAC,CAAC,EACb,WAAoB,EACpB,wBAAwB,GAAG,IAAI;QAE/B,IAAI,wBAAwB,GAAqC,IAAI,CAAC;QACtE,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,wBAAwB,GAAG,EAAuB,CAAC;SACtD;QACD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;QAEpC,0HAA0H;QAC1H,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;QAEtC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAC7E,IAAI,MAAc,EACd,KAAa,EACb,MAAc,EACd,UAAU,GAAW,CAAC,EACtB,UAAkB,CAAC;QACvB,IAAI,SAAqB,EAAE,WAAmB,EAAE,GAAW,CAAC;QAC5D,IAAI,wBAAwB,GAAG,CAAC,CAAC;QACjC,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE;YACjC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACnD,OAAO;SACV;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACpD,MAAM,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YACjF,OAAO;SACV;QAED,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,EAAE;YAC3B,MAAM,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACxE,OAAO;SACV;QAED,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAC7B,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9B,QAAQ,MAAM,EAAE;gBACZ,KAAK,WAAW;oBACZ,UAAU,GAAG,CAAC,CAAC;oBACf,wBAAwB,GAAG,SAAS,CAAC,uCAAuC,CAAC;oBAC7E,MAAM;gBACV,KAAK,WAAW;oBACZ,UAAU,GAAG,EAAE,CAAC;oBAChB,wBAAwB,GAAG,SAAS,CAAC,uCAAuC,CAAC;oBAC7E,MAAM;gBACV,KAAK,WAAW;oBACZ,UAAU,GAAG,EAAE,CAAC;oBAChB,wBAAwB,GAAG,SAAS,CAAC,uCAAuC,CAAC;oBAC7E,MAAM;gBACV,KAAK,2BAA2B;oBAC5B,cAAc,GAAG,IAAI,CAAC;oBACtB,GAAG,GAAG,EAAE,CAAC;oBACT,MAAM;gBACV,KAAK,2BAA2B;oBAC5B,cAAc,GAAG,IAAI,CAAC;oBACtB,GAAG,GAAG,GAAG,CAAC;oBACV,MAAM;gBACV,KAAK,WAAW,CAAC,CAAC;oBACd,kEAAkE;oBAClE,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;oBAE/B,IAAI,SAAS,GAAG,KAAK,CAAC;oBACtB,QAAQ,IAAI,CAAC,UAAU,EAAE;wBACrB,KAAK,8BAA8B;4BAC/B,cAAc,GAAG,IAAI,CAAC;4BACtB,GAAG,GAAG,EAAE,CAAC;4BACT,SAAS,GAAG,IAAI,CAAC;4BACjB,MAAM;wBACV,KAAK,8BAA8B;4BAC/B,cAAc,GAAG,IAAI,CAAC;4BACtB,GAAG,GAAG,GAAG,CAAC;4BACV,SAAS,GAAG,IAAI,CAAC;4BACjB,MAAM;wBACV,KAAK,0BAA0B;4BAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;4BAClB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;4BACtB,GAAG,GAAG,EAAE,CAAC;4BACT,SAAS,GAAG,IAAI,CAAC;4BACjB,MAAM;qBACb;oBAED,IAAI,SAAS,EAAE;wBACX,MAAM;qBACT;iBACJ;gBACD,0CAA0C;gBAC1C;oBACI,MAAM,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAClE,OAAO;aACd;SACJ;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAElE,IAAI,cAAc,EAAE;YAChB,wBAAwB,GAAG,MAAM,CAAC,iCAAiC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACzF;QAED,WAAW,GAAG,CAAC,CAAC;QAChB,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,gBAAgB,IAAI,WAAW,KAAK,KAAK,EAAE;YAC/D,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;SACtD;QAED,MAAM,SAAS,GAAG,WAAW,IAAI,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7C,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAC1B,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAE5B,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,EAAE,EAAE,GAAG,EAAE;gBACpC,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,GAAG,EAAE;oBACrC,uEAAuE;oBACvE,MAAM,CAAC,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEpC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;wBACrC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC;wBAC9C,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;wBAChC,IAAI,UAAU,GAA8B,IAAI,CAAC;wBAEjD,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;4BACzF,4EAA4E;4BAC5E,IAAI,GAAG,KAAK,GAAG,EAAE;gCACb,UAAU,GAAG,QAAQ,CAAC,8BAA8B,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gCAC9H,IAAI,wBAAwB,IAAI,CAAC,IAAI,CAAC,EAAE;oCACpC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;iCAC7I;6BACJ;iCAAM,IAAI,GAAG,KAAK,EAAE,EAAE;gCACnB,UAAU,GAAG,QAAQ,CAAC,kCAAkC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gCAClI,IAAI,wBAAwB,IAAI,CAAC,IAAI,CAAC,EAAE;oCACpC,wBAAwB,CAAC,IAAI,CACzB,QAAQ,CAAC,mCAAmC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CACxH,CAAC;iCACL;6BACJ;4BAED,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,wBAAwB,CAAC;yBACrD;6BAAM;4BACH,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,wBAAwB,IAAI,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;4BAC1I,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,wBAAwB,IAAI,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;4BAEtJ,MAAM,QAAQ,GACV,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,cAAc;gCAClE,CAAC,CAAC,SAAS,CAAC,iBAAiB;gCAC7B,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,kBAAkB;oCACtE,CAAC,CAAC,SAAS,CAAC,sBAAsB;oCAClC,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC;4BAEhD,IAAI,UAA6I,CAAC;4BAClJ,IAAI,oBAAoB,GAEpB,IAAI,CAAC;4BAET,QAAQ,GAAG,EAAE;gCACT,KAAK,GAAG,CAAC,CAAC;oCACN,QAAQ,QAAQ,EAAE;wCACd,KAAK,SAAS,CAAC,iBAAiB;4CAC5B,UAAU,GAAG,QAAQ,CAAC,wBAAwB,CAAC;4CAC/C,oBAAoB,GAAG,IAAI,CAAC;4CAC5B,MAAM;wCACV,KAAK,SAAS,CAAC,sBAAsB;4CACjC,UAAU,GAAG,QAAQ,CAAC,mCAAmC,CAAC;4CAC1D,oBAAoB,GAAG,QAAQ,CAAC,wBAAwB,CAAC;4CACzD,MAAM;wCACV,KAAK,SAAS,CAAC,yBAAyB;4CACpC,UAAU,GAAG,QAAQ,CAAC,8BAA8B,CAAC;4CACrD,oBAAoB,GAAG,QAAQ,CAAC,wBAAwB,CAAC;4CACzD,MAAM;qCACb;oCACD,MAAM;iCACT;gCACD,OAAO,CAAC,CAAC;oCACL,SAAS;oCACT,QAAQ,QAAQ,EAAE;wCACd,KAAK,SAAS,CAAC,iBAAiB;4CAC5B,UAAU,GAAG,QAAQ,CAAC,mCAAmC,CAAC;4CAC1D,oBAAoB,GAAG,IAAI,CAAC;4CAC5B,MAAM;wCACV,KAAK,SAAS,CAAC,sBAAsB;4CACjC,UAAU,GAAG,QAAQ,CAAC,4BAA4B,CAAC;4CACnD,oBAAoB,GAAG,QAAQ,CAAC,mCAAmC,CAAC;4CACpE,MAAM;wCACV,KAAK,SAAS,CAAC,yBAAyB;4CACpC,UAAU,GAAG,QAAQ,CAAC,kCAAkC,CAAC;4CACzD,oBAAoB,GAAG,QAAQ,CAAC,mCAAmC,CAAC;4CACpE,MAAM;qCACb;oCACD,MAAM;iCACT;6BACJ;4BAED,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;4BAExB,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;4BAEjG,IAAI,wBAAwB,IAAI,CAAC,IAAI,CAAC,EAAE;gCACpC,wBAAwB,CAAC,IAAI,CACzB,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CACpI,CAAC;6BACL;yBACJ;wBAED,IAAI,UAAU,EAAE;4BACZ,MAAM,CAAC,4BAA4B,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;yBACrE;qBACJ;yBAAM,IAAI,IAAI,CAAC,KAAK,EAAE;wBACnB,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,wBAAwB,CAAC;wBAClD,IAAI,GAAG,KAAK,EAAE,EAAE;4BACZ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,iBAAiB,CAAC;4BAC7C,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;4BAChC,SAAS,GAAG,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;4BACzI,MAAM,CAAC,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;yBACpE;6BAAM;4BACH,KAAK;4BACL,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC;4BAC9C,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;4BAChC,SAAS,GAAG,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;4BACnJ,MAAM,CAAC,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;yBACpE;qBACJ;yBAAM,IAAI,IAAI,CAAC,WAAW,EAAE;wBACzB,MAAM,eAAe,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;wBACtD,MAAM,eAAe,GAAG,KAAK,CAAC;wBAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,eAAe,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG,eAAe,CAAC;wBACpG,UAAU,GAAG,aAAa,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC;wBAE5D,SAAS,GAAG,QAAQ,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;wBACpH,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,uBAAuB,CAAC;wBACnD,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,wBAAwB,CAAC;wBAElD,MAAM,CAAC,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;qBACpE;yBAAM;wBACH,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;wBACjF,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,CAAC,CAAC;wBAElF,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,wBAAwB,CAAC;wBAClD,MAAM,CAAC,sCAAsC,CAAC,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;qBACvH;iBACJ;gBACD,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC5D,KAAK,IAAI,GAAG,CAAC;gBACb,MAAM,IAAI,GAAG,CAAC;gBAEd,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC7B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;aAClC;YAED,IAAI,WAAW,KAAK,SAAS,EAAE;gBAC3B,wBAAwB;gBACxB,MAAM;aACT;SACJ;QACD,IAAI,wBAAwB,IAAI,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE;YACjE,IAAI,CAAC,mBAAmB,GAAG,iCAAiC,CAAC,mCAAmC,CAAC;gBAC7F,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;gBACvB,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC;gBAClC,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC;gBACjC,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;gBAC/B,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC;gBACjC,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC;gBAClC,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC;gBACjC,MAAM,EAAE,SAAS,CAAC,kBAAkB;gBACpC,IAAI,EAAE,SAAS,CAAC,iBAAiB;gBACjC,UAAU,EAAE,KAAK;aACpB,CAAC,CAAC;SACN;aAAM;YACH,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;SACxC;IACL,CAAC;;AAziBD;;GAEG;AACW,+BAAsB,GAAG,KAAK,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { Clamp } from \"../Maths/math.scalar.functions\";\r\nimport type { SphericalPolynomial } from \"../Maths/sphericalPolynomial\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { CubeMapToSphericalPolynomialTools } from \"../Misc/HighDynamicRange/cubemapToSphericalPolynomial\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { FromHalfFloat, ToHalfFloat } from \"./textureTools\";\r\n\r\nimport \"../Engines/AbstractEngine/abstractEngine.cubeTexture\";\r\nimport \"../Engines/Extensions/engine.cubeTexture\";\r\n\r\n// Based on demo done by Brandon Jones - http://media.tojicode.com/webgl-samples/dds.html\r\n// All values and structures referenced from:\r\n// http://msdn.microsoft.com/en-us/library/bb943991.aspx/\r\nconst DDS_MAGIC = 0x20534444;\r\n\r\nconst //DDSD_CAPS = 0x1,\r\n //DDSD_HEIGHT = 0x2,\r\n //DDSD_WIDTH = 0x4,\r\n //DDSD_PITCH = 0x8,\r\n //DDSD_PIXELFORMAT = 0x1000,\r\n DDSD_MIPMAPCOUNT = 0x20000;\r\n//DDSD_LINEARSIZE = 0x80000,\r\n//DDSD_DEPTH = 0x800000;\r\n\r\n// var DDSCAPS_COMPLEX = 0x8,\r\n// DDSCAPS_MIPMAP = 0x400000,\r\n// DDSCAPS_TEXTURE = 0x1000;\r\n\r\nconst DDSCAPS2_CUBEMAP = 0x200;\r\n// DDSCAPS2_CUBEMAP_POSITIVEX = 0x400,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800,\r\n// DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000,\r\n// DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000,\r\n// DDSCAPS2_VOLUME = 0x200000;\r\n\r\nconst //DDPF_ALPHAPIXELS = 0x1,\r\n //DDPF_ALPHA = 0x2,\r\n DDPF_FOURCC = 0x4,\r\n DDPF_RGB = 0x40,\r\n //DDPF_YUV = 0x200,\r\n DDPF_LUMINANCE = 0x20000;\r\n\r\nfunction FourCCToInt32(value: string) {\r\n return value.charCodeAt(0) + (value.charCodeAt(1) << 8) + (value.charCodeAt(2) << 16) + (value.charCodeAt(3) << 24);\r\n}\r\n\r\nfunction Int32ToFourCC(value: number) {\r\n return String.fromCharCode(value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >> 24) & 0xff);\r\n}\r\n\r\nconst FOURCC_DXT1 = FourCCToInt32(\"DXT1\");\r\nconst FOURCC_DXT3 = FourCCToInt32(\"DXT3\");\r\nconst FOURCC_DXT5 = FourCCToInt32(\"DXT5\");\r\nconst FOURCC_DX10 = FourCCToInt32(\"DX10\");\r\nconst FOURCC_D3DFMT_R16G16B16A16F = 113;\r\nconst FOURCC_D3DFMT_R32G32B32A32F = 116;\r\n\r\nconst DXGI_FORMAT_R32G32B32A32_FLOAT = 2;\r\nconst DXGI_FORMAT_R16G16B16A16_FLOAT = 10;\r\nconst DXGI_FORMAT_B8G8R8X8_UNORM = 88;\r\n\r\nconst headerLengthInt = 31; // The header length in 32 bit ints\r\n\r\n// Offsets into the header array\r\nconst off_magic = 0;\r\n\r\nconst off_size = 1;\r\nconst off_flags = 2;\r\nconst off_height = 3;\r\nconst off_width = 4;\r\n\r\nconst off_mipmapCount = 7;\r\n\r\nconst off_pfFlags = 20;\r\nconst off_pfFourCC = 21;\r\nconst off_RGBbpp = 22;\r\nconst off_RMask = 23;\r\nconst off_GMask = 24;\r\nconst off_BMask = 25;\r\nconst off_AMask = 26;\r\n// var off_caps1 = 27;\r\nconst off_caps2 = 28;\r\n// var off_caps3 = 29;\r\n// var off_caps4 = 30;\r\nconst off_dxgiFormat = 32;\r\n\r\n/**\r\n * Direct draw surface info\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/direct3ddds/dx-graphics-dds-pguide\r\n */\r\nexport interface DDSInfo {\r\n /**\r\n * Width of the texture\r\n */\r\n width: number;\r\n /**\r\n * Width of the texture\r\n */\r\n height: number;\r\n /**\r\n * Number of Mipmaps for the texture\r\n * @see https://en.wikipedia.org/wiki/Mipmap\r\n */\r\n mipmapCount: number;\r\n /**\r\n * If the textures format is a known fourCC format\r\n * @see https://www.fourcc.org/\r\n */\r\n isFourCC: boolean;\r\n /**\r\n * If the texture is an RGB format eg. DXGI_FORMAT_B8G8R8X8_UNORM format\r\n */\r\n isRGB: boolean;\r\n /**\r\n * If the texture is a lumincance format\r\n */\r\n isLuminance: boolean;\r\n /**\r\n * If this is a cube texture\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/direct3ddds/dds-file-layout-for-cubic-environment-maps\r\n */\r\n isCube: boolean;\r\n /**\r\n * If the texture is a compressed format eg. FOURCC_DXT1\r\n */\r\n isCompressed: boolean;\r\n /**\r\n * The dxgiFormat of the texture\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/api/dxgiformat/ne-dxgiformat-dxgi_format\r\n */\r\n dxgiFormat: number;\r\n /**\r\n * Texture type eg. Engine.TEXTURETYPE_UNSIGNED_INT, Engine.TEXTURETYPE_FLOAT\r\n */\r\n textureType: number;\r\n /**\r\n * Sphericle polynomial created for the dds texture\r\n */\r\n sphericalPolynomial?: SphericalPolynomial;\r\n}\r\n\r\n/**\r\n * Class used to provide DDS decompression tools\r\n */\r\nexport class DDSTools {\r\n /**\r\n * Gets or sets a boolean indicating that LOD info is stored in alpha channel (false by default)\r\n */\r\n public static StoreLODInAlphaChannel = false;\r\n\r\n /**\r\n * Gets DDS information from an array buffer\r\n * @param data defines the array buffer view to read data from\r\n * @returns the DDS information\r\n */\r\n public static GetDDSInfo(data: ArrayBufferView): DDSInfo {\r\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\r\n const extendedHeader = new Int32Array(data.buffer, data.byteOffset, headerLengthInt + 4);\r\n\r\n let mipmapCount = 1;\r\n if (header[off_flags] & DDSD_MIPMAPCOUNT) {\r\n mipmapCount = Math.max(1, header[off_mipmapCount]);\r\n }\r\n\r\n const fourCC = header[off_pfFourCC];\r\n const dxgiFormat = fourCC === FOURCC_DX10 ? extendedHeader[off_dxgiFormat] : 0;\r\n let textureType = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n\r\n switch (fourCC) {\r\n case FOURCC_D3DFMT_R16G16B16A16F:\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n break;\r\n case FOURCC_D3DFMT_R32G32B32A32F:\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n break;\r\n case FOURCC_DX10:\r\n if (dxgiFormat === DXGI_FORMAT_R16G16B16A16_FLOAT) {\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n break;\r\n }\r\n if (dxgiFormat === DXGI_FORMAT_R32G32B32A32_FLOAT) {\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n width: header[off_width],\r\n height: header[off_height],\r\n mipmapCount: mipmapCount,\r\n isFourCC: (header[off_pfFlags] & DDPF_FOURCC) === DDPF_FOURCC,\r\n isRGB: (header[off_pfFlags] & DDPF_RGB) === DDPF_RGB,\r\n isLuminance: (header[off_pfFlags] & DDPF_LUMINANCE) === DDPF_LUMINANCE,\r\n isCube: (header[off_caps2] & DDSCAPS2_CUBEMAP) === DDSCAPS2_CUBEMAP,\r\n isCompressed: fourCC === FOURCC_DXT1 || fourCC === FOURCC_DXT3 || fourCC === FOURCC_DXT5,\r\n dxgiFormat: dxgiFormat,\r\n textureType: textureType,\r\n };\r\n }\r\n\r\n private static _GetHalfFloatAsFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Float32Array {\r\n const destArray = new Float32Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = FromHalfFloat(srcData[srcPos]);\r\n destArray[index + 1] = FromHalfFloat(srcData[srcPos + 1]);\r\n destArray[index + 2] = FromHalfFloat(srcData[srcPos + 2]);\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = FromHalfFloat(srcData[srcPos + 3]);\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetHalfFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint16Array {\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n const destArray = new Uint16Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = srcData[srcPos];\r\n destArray[index + 1] = srcData[srcPos + 1];\r\n destArray[index + 2] = srcData[srcPos + 2];\r\n destArray[index + 3] = ToHalfFloat(lod);\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n return new Uint16Array(arrayBuffer, dataOffset, dataLength);\r\n }\r\n\r\n private static _GetFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Float32Array {\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n const destArray = new Float32Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = srcData[srcPos];\r\n destArray[index + 1] = srcData[srcPos + 1];\r\n destArray[index + 2] = srcData[srcPos + 2];\r\n destArray[index + 3] = lod;\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n return new Float32Array(arrayBuffer, dataOffset, dataLength);\r\n }\r\n\r\n private static _GetFloatAsHalfFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint16Array {\r\n const destArray = new Uint16Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n destArray[index] = ToHalfFloat(srcData[index]);\r\n destArray[index + 1] = ToHalfFloat(srcData[index + 1]);\r\n destArray[index + 2] = ToHalfFloat(srcData[index + 2]);\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = ToHalfFloat(lod);\r\n } else {\r\n destArray[index + 3] = ToHalfFloat(srcData[index + 3]);\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetFloatAsUIntRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint8Array {\r\n const destArray = new Uint8Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = Clamp(srcData[srcPos]) * 255;\r\n destArray[index + 1] = Clamp(srcData[srcPos + 1]) * 255;\r\n destArray[index + 2] = Clamp(srcData[srcPos + 2]) * 255;\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = Clamp(srcData[srcPos + 3]) * 255;\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetHalfFloatAsUIntRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint8Array {\r\n const destArray = new Uint8Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = Clamp(FromHalfFloat(srcData[srcPos])) * 255;\r\n destArray[index + 1] = Clamp(FromHalfFloat(srcData[srcPos + 1])) * 255;\r\n destArray[index + 2] = Clamp(FromHalfFloat(srcData[srcPos + 2])) * 255;\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = Clamp(FromHalfFloat(srcData[srcPos + 3])) * 255;\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetRGBAArrayBuffer(\r\n width: number,\r\n height: number,\r\n dataOffset: number,\r\n dataLength: number,\r\n arrayBuffer: ArrayBuffer,\r\n rOffset: number,\r\n gOffset: number,\r\n bOffset: number,\r\n aOffset: number\r\n ): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n\r\n byteArray[index] = srcData[srcPos + rOffset];\r\n byteArray[index + 1] = srcData[srcPos + gOffset];\r\n byteArray[index + 2] = srcData[srcPos + bOffset];\r\n byteArray[index + 3] = srcData[srcPos + aOffset];\r\n index += 4;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n private static _ExtractLongWordOrder(value: number): number {\r\n if (value === 0 || value === 255 || value === -16777216) {\r\n return 0;\r\n }\r\n\r\n return 1 + DDSTools._ExtractLongWordOrder(value >> 8);\r\n }\r\n\r\n private static _GetRGBArrayBuffer(\r\n width: number,\r\n height: number,\r\n dataOffset: number,\r\n dataLength: number,\r\n arrayBuffer: ArrayBuffer,\r\n rOffset: number,\r\n gOffset: number,\r\n bOffset: number\r\n ): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 3;\r\n\r\n byteArray[index] = srcData[srcPos + rOffset];\r\n byteArray[index + 1] = srcData[srcPos + gOffset];\r\n byteArray[index + 2] = srcData[srcPos + bOffset];\r\n index += 3;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n private static _GetLuminanceArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = x + y * width;\r\n byteArray[index] = srcData[srcPos];\r\n index++;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n /**\r\n * Uploads DDS Levels to a Babylon Texture\r\n * @internal\r\n */\r\n public static UploadDDSLevels(\r\n engine: AbstractEngine,\r\n texture: InternalTexture,\r\n data: ArrayBufferView,\r\n info: DDSInfo,\r\n loadMipmaps: boolean,\r\n faces: number,\r\n lodIndex = -1,\r\n currentFace?: number,\r\n destTypeMustBeFilterable = true\r\n ) {\r\n let sphericalPolynomialFaces: Nullable<Array<ArrayBufferView>> = null;\r\n if (info.sphericalPolynomial) {\r\n sphericalPolynomialFaces = [] as ArrayBufferView[];\r\n }\r\n const ext = !!engine.getCaps().s3tc;\r\n\r\n // TODO WEBGPU Once generateMipMaps is split into generateMipMaps + hasMipMaps in InternalTexture this line can be removed\r\n texture.generateMipMaps = loadMipmaps;\r\n\r\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\r\n let fourCC: number,\r\n width: number,\r\n height: number,\r\n dataLength: number = 0,\r\n dataOffset: number;\r\n let byteArray: Uint8Array, mipmapCount: number, mip: number;\r\n let internalCompressedFormat = 0;\r\n let blockBytes = 1;\r\n\r\n if (header[off_magic] !== DDS_MAGIC) {\r\n Logger.Error(\"Invalid magic number in DDS header\");\r\n return;\r\n }\r\n\r\n if (!info.isFourCC && !info.isRGB && !info.isLuminance) {\r\n Logger.Error(\"Unsupported format, must contain a FourCC, RGB or LUMINANCE code\");\r\n return;\r\n }\r\n\r\n if (info.isCompressed && !ext) {\r\n Logger.Error(\"Compressed textures are not supported on this platform.\");\r\n return;\r\n }\r\n\r\n let bpp = header[off_RGBbpp];\r\n dataOffset = header[off_size] + 4;\r\n\r\n let computeFormats = false;\r\n\r\n if (info.isFourCC) {\r\n fourCC = header[off_pfFourCC];\r\n switch (fourCC) {\r\n case FOURCC_DXT1:\r\n blockBytes = 8;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1;\r\n break;\r\n case FOURCC_DXT3:\r\n blockBytes = 16;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3;\r\n break;\r\n case FOURCC_DXT5:\r\n blockBytes = 16;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n break;\r\n case FOURCC_D3DFMT_R16G16B16A16F:\r\n computeFormats = true;\r\n bpp = 64;\r\n break;\r\n case FOURCC_D3DFMT_R32G32B32A32F:\r\n computeFormats = true;\r\n bpp = 128;\r\n break;\r\n case FOURCC_DX10: {\r\n // There is an additionnal header so dataOffset need to be changed\r\n dataOffset += 5 * 4; // 5 uints\r\n\r\n let supported = false;\r\n switch (info.dxgiFormat) {\r\n case DXGI_FORMAT_R16G16B16A16_FLOAT:\r\n computeFormats = true;\r\n bpp = 64;\r\n supported = true;\r\n break;\r\n case DXGI_FORMAT_R32G32B32A32_FLOAT:\r\n computeFormats = true;\r\n bpp = 128;\r\n supported = true;\r\n break;\r\n case DXGI_FORMAT_B8G8R8X8_UNORM:\r\n info.isRGB = true;\r\n info.isFourCC = false;\r\n bpp = 32;\r\n supported = true;\r\n break;\r\n }\r\n\r\n if (supported) {\r\n break;\r\n }\r\n }\r\n // eslint-disable-next-line no-fallthrough\r\n default:\r\n Logger.Error([\"Unsupported FourCC code:\", Int32ToFourCC(fourCC)]);\r\n return;\r\n }\r\n }\r\n\r\n const rOffset = DDSTools._ExtractLongWordOrder(header[off_RMask]);\r\n const gOffset = DDSTools._ExtractLongWordOrder(header[off_GMask]);\r\n const bOffset = DDSTools._ExtractLongWordOrder(header[off_BMask]);\r\n const aOffset = DDSTools._ExtractLongWordOrder(header[off_AMask]);\r\n\r\n if (computeFormats) {\r\n internalCompressedFormat = engine._getRGBABufferInternalSizedFormat(info.textureType);\r\n }\r\n\r\n mipmapCount = 1;\r\n if (header[off_flags] & DDSD_MIPMAPCOUNT && loadMipmaps !== false) {\r\n mipmapCount = Math.max(1, header[off_mipmapCount]);\r\n }\r\n\r\n const startFace = currentFace || 0;\r\n const caps = engine.getCaps();\r\n for (let face = startFace; face < faces; face++) {\r\n width = header[off_width];\r\n height = header[off_height];\r\n\r\n for (mip = 0; mip < mipmapCount; ++mip) {\r\n if (lodIndex === -1 || lodIndex === mip) {\r\n // In case of fixed LOD, if the lod has just been uploaded, early exit.\r\n const i = lodIndex === -1 ? mip : 0;\r\n\r\n if (!info.isCompressed && info.isFourCC) {\r\n texture.format = Constants.TEXTUREFORMAT_RGBA;\r\n dataLength = width * height * 4;\r\n let floatArray: Nullable<ArrayBufferView> = null;\r\n\r\n if (engine._badOS || engine._badDesktopOS || (!caps.textureHalfFloat && !caps.textureFloat)) {\r\n // Required because iOS has many issues with float and half float generation\r\n if (bpp === 128) {\r\n floatArray = DDSTools._GetFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(DDSTools._GetFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i));\r\n }\r\n } else if (bpp === 64) {\r\n floatArray = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(\r\n DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i)\r\n );\r\n }\r\n }\r\n\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n } else {\r\n const floatAvailable = caps.textureFloat && ((destTypeMustBeFilterable && caps.textureFloatLinearFiltering) || !destTypeMustBeFilterable);\r\n const halfFloatAvailable = caps.textureHalfFloat && ((destTypeMustBeFilterable && caps.textureHalfFloatLinearFiltering) || !destTypeMustBeFilterable);\r\n\r\n const destType =\r\n (bpp === 128 || (bpp === 64 && !halfFloatAvailable)) && floatAvailable\r\n ? Constants.TEXTURETYPE_FLOAT\r\n : (bpp === 64 || (bpp === 128 && !floatAvailable)) && halfFloatAvailable\r\n ? Constants.TEXTURETYPE_HALF_FLOAT\r\n : Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n\r\n let dataGetter: (width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number) => ArrayBufferView;\r\n let dataGetterPolynomial: Nullable<\r\n (width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number) => ArrayBufferView\r\n > = null;\r\n\r\n switch (bpp) {\r\n case 128: {\r\n switch (destType) {\r\n case Constants.TEXTURETYPE_FLOAT:\r\n dataGetter = DDSTools._GetFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = null;\r\n break;\r\n case Constants.TEXTURETYPE_HALF_FLOAT:\r\n dataGetter = DDSTools._GetFloatAsHalfFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\r\n break;\r\n case Constants.TEXTURETYPE_UNSIGNED_BYTE:\r\n dataGetter = DDSTools._GetFloatAsUIntRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\r\n break;\r\n }\r\n break;\r\n }\r\n default: {\r\n // 64 bpp\r\n switch (destType) {\r\n case Constants.TEXTURETYPE_FLOAT:\r\n dataGetter = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = null;\r\n break;\r\n case Constants.TEXTURETYPE_HALF_FLOAT:\r\n dataGetter = DDSTools._GetHalfFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n break;\r\n case Constants.TEXTURETYPE_UNSIGNED_BYTE:\r\n dataGetter = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n break;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n texture.type = destType;\r\n\r\n floatArray = dataGetter(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(\r\n dataGetterPolynomial ? dataGetterPolynomial(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i) : floatArray\r\n );\r\n }\r\n }\r\n\r\n if (floatArray) {\r\n engine._uploadDataToTextureDirectly(texture, floatArray, face, i);\r\n }\r\n } else if (info.isRGB) {\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n if (bpp === 24) {\r\n texture.format = Constants.TEXTUREFORMAT_RGB;\r\n dataLength = width * height * 3;\r\n byteArray = DDSTools._GetRGBArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset);\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n } else {\r\n // 32\r\n texture.format = Constants.TEXTUREFORMAT_RGBA;\r\n dataLength = width * height * 4;\r\n byteArray = DDSTools._GetRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset, aOffset);\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n }\r\n } else if (info.isLuminance) {\r\n const unpackAlignment = engine._getUnpackAlignement();\r\n const unpaddedRowSize = width;\r\n const paddedRowSize = Math.floor((width + unpackAlignment - 1) / unpackAlignment) * unpackAlignment;\r\n dataLength = paddedRowSize * (height - 1) + unpaddedRowSize;\r\n\r\n byteArray = DDSTools._GetLuminanceArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer);\r\n texture.format = Constants.TEXTUREFORMAT_LUMINANCE;\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n } else {\r\n dataLength = (((Math.max(4, width) / 4) * Math.max(4, height)) / 4) * blockBytes;\r\n byteArray = new Uint8Array(data.buffer, data.byteOffset + dataOffset, dataLength);\r\n\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n engine._uploadCompressedDataToTextureDirectly(texture, internalCompressedFormat, width, height, byteArray, face, i);\r\n }\r\n }\r\n dataOffset += bpp ? width * height * (bpp / 8) : dataLength;\r\n width *= 0.5;\r\n height *= 0.5;\r\n\r\n width = Math.max(1.0, width);\r\n height = Math.max(1.0, height);\r\n }\r\n\r\n if (currentFace !== undefined) {\r\n // Loading a single face\r\n break;\r\n }\r\n }\r\n if (sphericalPolynomialFaces && sphericalPolynomialFaces.length > 0) {\r\n info.sphericalPolynomial = CubeMapToSphericalPolynomialTools.ConvertCubeMapToSphericalPolynomial({\r\n size: header[off_width],\r\n right: sphericalPolynomialFaces[0],\r\n left: sphericalPolynomialFaces[1],\r\n up: sphericalPolynomialFaces[2],\r\n down: sphericalPolynomialFaces[3],\r\n front: sphericalPolynomialFaces[4],\r\n back: sphericalPolynomialFaces[5],\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n type: Constants.TEXTURETYPE_FLOAT,\r\n gammaSpace: false,\r\n });\r\n } else {\r\n info.sphericalPolynomial = undefined;\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"dds.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/dds.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { Clamp } from \"../Maths/math.scalar.functions\";\r\nimport type { SphericalPolynomial } from \"../Maths/sphericalPolynomial\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { CubeMapToSphericalPolynomialTools } from \"../Misc/HighDynamicRange/cubemapToSphericalPolynomial\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { FromHalfFloat, ToHalfFloat } from \"./textureTools\";\r\n\r\nimport \"../Engines/AbstractEngine/abstractEngine.cubeTexture\";\r\n\r\n// Based on demo done by Brandon Jones - http://media.tojicode.com/webgl-samples/dds.html\r\n// All values and structures referenced from:\r\n// http://msdn.microsoft.com/en-us/library/bb943991.aspx/\r\nconst DDS_MAGIC = 0x20534444;\r\n\r\nconst //DDSD_CAPS = 0x1,\r\n //DDSD_HEIGHT = 0x2,\r\n //DDSD_WIDTH = 0x4,\r\n //DDSD_PITCH = 0x8,\r\n //DDSD_PIXELFORMAT = 0x1000,\r\n DDSD_MIPMAPCOUNT = 0x20000;\r\n//DDSD_LINEARSIZE = 0x80000,\r\n//DDSD_DEPTH = 0x800000;\r\n\r\n// var DDSCAPS_COMPLEX = 0x8,\r\n// DDSCAPS_MIPMAP = 0x400000,\r\n// DDSCAPS_TEXTURE = 0x1000;\r\n\r\nconst DDSCAPS2_CUBEMAP = 0x200;\r\n// DDSCAPS2_CUBEMAP_POSITIVEX = 0x400,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800,\r\n// DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000,\r\n// DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000,\r\n// DDSCAPS2_VOLUME = 0x200000;\r\n\r\nconst //DDPF_ALPHAPIXELS = 0x1,\r\n //DDPF_ALPHA = 0x2,\r\n DDPF_FOURCC = 0x4,\r\n DDPF_RGB = 0x40,\r\n //DDPF_YUV = 0x200,\r\n DDPF_LUMINANCE = 0x20000;\r\n\r\nfunction FourCCToInt32(value: string) {\r\n return value.charCodeAt(0) + (value.charCodeAt(1) << 8) + (value.charCodeAt(2) << 16) + (value.charCodeAt(3) << 24);\r\n}\r\n\r\nfunction Int32ToFourCC(value: number) {\r\n return String.fromCharCode(value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >> 24) & 0xff);\r\n}\r\n\r\nconst FOURCC_DXT1 = FourCCToInt32(\"DXT1\");\r\nconst FOURCC_DXT3 = FourCCToInt32(\"DXT3\");\r\nconst FOURCC_DXT5 = FourCCToInt32(\"DXT5\");\r\nconst FOURCC_DX10 = FourCCToInt32(\"DX10\");\r\nconst FOURCC_D3DFMT_R16G16B16A16F = 113;\r\nconst FOURCC_D3DFMT_R32G32B32A32F = 116;\r\n\r\nconst DXGI_FORMAT_R32G32B32A32_FLOAT = 2;\r\nconst DXGI_FORMAT_R16G16B16A16_FLOAT = 10;\r\nconst DXGI_FORMAT_B8G8R8X8_UNORM = 88;\r\n\r\nconst headerLengthInt = 31; // The header length in 32 bit ints\r\n\r\n// Offsets into the header array\r\nconst off_magic = 0;\r\n\r\nconst off_size = 1;\r\nconst off_flags = 2;\r\nconst off_height = 3;\r\nconst off_width = 4;\r\n\r\nconst off_mipmapCount = 7;\r\n\r\nconst off_pfFlags = 20;\r\nconst off_pfFourCC = 21;\r\nconst off_RGBbpp = 22;\r\nconst off_RMask = 23;\r\nconst off_GMask = 24;\r\nconst off_BMask = 25;\r\nconst off_AMask = 26;\r\n// var off_caps1 = 27;\r\nconst off_caps2 = 28;\r\n// var off_caps3 = 29;\r\n// var off_caps4 = 30;\r\nconst off_dxgiFormat = 32;\r\n\r\n/**\r\n * Direct draw surface info\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/direct3ddds/dx-graphics-dds-pguide\r\n */\r\nexport interface DDSInfo {\r\n /**\r\n * Width of the texture\r\n */\r\n width: number;\r\n /**\r\n * Width of the texture\r\n */\r\n height: number;\r\n /**\r\n * Number of Mipmaps for the texture\r\n * @see https://en.wikipedia.org/wiki/Mipmap\r\n */\r\n mipmapCount: number;\r\n /**\r\n * If the textures format is a known fourCC format\r\n * @see https://www.fourcc.org/\r\n */\r\n isFourCC: boolean;\r\n /**\r\n * If the texture is an RGB format eg. DXGI_FORMAT_B8G8R8X8_UNORM format\r\n */\r\n isRGB: boolean;\r\n /**\r\n * If the texture is a lumincance format\r\n */\r\n isLuminance: boolean;\r\n /**\r\n * If this is a cube texture\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/direct3ddds/dds-file-layout-for-cubic-environment-maps\r\n */\r\n isCube: boolean;\r\n /**\r\n * If the texture is a compressed format eg. FOURCC_DXT1\r\n */\r\n isCompressed: boolean;\r\n /**\r\n * The dxgiFormat of the texture\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/api/dxgiformat/ne-dxgiformat-dxgi_format\r\n */\r\n dxgiFormat: number;\r\n /**\r\n * Texture type eg. Engine.TEXTURETYPE_UNSIGNED_INT, Engine.TEXTURETYPE_FLOAT\r\n */\r\n textureType: number;\r\n /**\r\n * Sphericle polynomial created for the dds texture\r\n */\r\n sphericalPolynomial?: SphericalPolynomial;\r\n}\r\n\r\n/**\r\n * Class used to provide DDS decompression tools\r\n */\r\nexport class DDSTools {\r\n /**\r\n * Gets or sets a boolean indicating that LOD info is stored in alpha channel (false by default)\r\n */\r\n public static StoreLODInAlphaChannel = false;\r\n\r\n /**\r\n * Gets DDS information from an array buffer\r\n * @param data defines the array buffer view to read data from\r\n * @returns the DDS information\r\n */\r\n public static GetDDSInfo(data: ArrayBufferView): DDSInfo {\r\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\r\n const extendedHeader = new Int32Array(data.buffer, data.byteOffset, headerLengthInt + 4);\r\n\r\n let mipmapCount = 1;\r\n if (header[off_flags] & DDSD_MIPMAPCOUNT) {\r\n mipmapCount = Math.max(1, header[off_mipmapCount]);\r\n }\r\n\r\n const fourCC = header[off_pfFourCC];\r\n const dxgiFormat = fourCC === FOURCC_DX10 ? extendedHeader[off_dxgiFormat] : 0;\r\n let textureType = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n\r\n switch (fourCC) {\r\n case FOURCC_D3DFMT_R16G16B16A16F:\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n break;\r\n case FOURCC_D3DFMT_R32G32B32A32F:\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n break;\r\n case FOURCC_DX10:\r\n if (dxgiFormat === DXGI_FORMAT_R16G16B16A16_FLOAT) {\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n break;\r\n }\r\n if (dxgiFormat === DXGI_FORMAT_R32G32B32A32_FLOAT) {\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n width: header[off_width],\r\n height: header[off_height],\r\n mipmapCount: mipmapCount,\r\n isFourCC: (header[off_pfFlags] & DDPF_FOURCC) === DDPF_FOURCC,\r\n isRGB: (header[off_pfFlags] & DDPF_RGB) === DDPF_RGB,\r\n isLuminance: (header[off_pfFlags] & DDPF_LUMINANCE) === DDPF_LUMINANCE,\r\n isCube: (header[off_caps2] & DDSCAPS2_CUBEMAP) === DDSCAPS2_CUBEMAP,\r\n isCompressed: fourCC === FOURCC_DXT1 || fourCC === FOURCC_DXT3 || fourCC === FOURCC_DXT5,\r\n dxgiFormat: dxgiFormat,\r\n textureType: textureType,\r\n };\r\n }\r\n\r\n private static _GetHalfFloatAsFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Float32Array {\r\n const destArray = new Float32Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = FromHalfFloat(srcData[srcPos]);\r\n destArray[index + 1] = FromHalfFloat(srcData[srcPos + 1]);\r\n destArray[index + 2] = FromHalfFloat(srcData[srcPos + 2]);\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = FromHalfFloat(srcData[srcPos + 3]);\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetHalfFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint16Array {\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n const destArray = new Uint16Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = srcData[srcPos];\r\n destArray[index + 1] = srcData[srcPos + 1];\r\n destArray[index + 2] = srcData[srcPos + 2];\r\n destArray[index + 3] = ToHalfFloat(lod);\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n return new Uint16Array(arrayBuffer, dataOffset, dataLength);\r\n }\r\n\r\n private static _GetFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Float32Array {\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n const destArray = new Float32Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = srcData[srcPos];\r\n destArray[index + 1] = srcData[srcPos + 1];\r\n destArray[index + 2] = srcData[srcPos + 2];\r\n destArray[index + 3] = lod;\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n return new Float32Array(arrayBuffer, dataOffset, dataLength);\r\n }\r\n\r\n private static _GetFloatAsHalfFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint16Array {\r\n const destArray = new Uint16Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n destArray[index] = ToHalfFloat(srcData[index]);\r\n destArray[index + 1] = ToHalfFloat(srcData[index + 1]);\r\n destArray[index + 2] = ToHalfFloat(srcData[index + 2]);\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = ToHalfFloat(lod);\r\n } else {\r\n destArray[index + 3] = ToHalfFloat(srcData[index + 3]);\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetFloatAsUIntRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint8Array {\r\n const destArray = new Uint8Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = Clamp(srcData[srcPos]) * 255;\r\n destArray[index + 1] = Clamp(srcData[srcPos + 1]) * 255;\r\n destArray[index + 2] = Clamp(srcData[srcPos + 2]) * 255;\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = Clamp(srcData[srcPos + 3]) * 255;\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetHalfFloatAsUIntRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint8Array {\r\n const destArray = new Uint8Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = Clamp(FromHalfFloat(srcData[srcPos])) * 255;\r\n destArray[index + 1] = Clamp(FromHalfFloat(srcData[srcPos + 1])) * 255;\r\n destArray[index + 2] = Clamp(FromHalfFloat(srcData[srcPos + 2])) * 255;\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = Clamp(FromHalfFloat(srcData[srcPos + 3])) * 255;\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetRGBAArrayBuffer(\r\n width: number,\r\n height: number,\r\n dataOffset: number,\r\n dataLength: number,\r\n arrayBuffer: ArrayBuffer,\r\n rOffset: number,\r\n gOffset: number,\r\n bOffset: number,\r\n aOffset: number\r\n ): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n\r\n byteArray[index] = srcData[srcPos + rOffset];\r\n byteArray[index + 1] = srcData[srcPos + gOffset];\r\n byteArray[index + 2] = srcData[srcPos + bOffset];\r\n byteArray[index + 3] = srcData[srcPos + aOffset];\r\n index += 4;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n private static _ExtractLongWordOrder(value: number): number {\r\n if (value === 0 || value === 255 || value === -16777216) {\r\n return 0;\r\n }\r\n\r\n return 1 + DDSTools._ExtractLongWordOrder(value >> 8);\r\n }\r\n\r\n private static _GetRGBArrayBuffer(\r\n width: number,\r\n height: number,\r\n dataOffset: number,\r\n dataLength: number,\r\n arrayBuffer: ArrayBuffer,\r\n rOffset: number,\r\n gOffset: number,\r\n bOffset: number\r\n ): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 3;\r\n\r\n byteArray[index] = srcData[srcPos + rOffset];\r\n byteArray[index + 1] = srcData[srcPos + gOffset];\r\n byteArray[index + 2] = srcData[srcPos + bOffset];\r\n index += 3;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n private static _GetLuminanceArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = x + y * width;\r\n byteArray[index] = srcData[srcPos];\r\n index++;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n /**\r\n * Uploads DDS Levels to a Babylon Texture\r\n * @internal\r\n */\r\n public static UploadDDSLevels(\r\n engine: AbstractEngine,\r\n texture: InternalTexture,\r\n data: ArrayBufferView,\r\n info: DDSInfo,\r\n loadMipmaps: boolean,\r\n faces: number,\r\n lodIndex = -1,\r\n currentFace?: number,\r\n destTypeMustBeFilterable = true\r\n ) {\r\n let sphericalPolynomialFaces: Nullable<Array<ArrayBufferView>> = null;\r\n if (info.sphericalPolynomial) {\r\n sphericalPolynomialFaces = [] as ArrayBufferView[];\r\n }\r\n const ext = !!engine.getCaps().s3tc;\r\n\r\n // TODO WEBGPU Once generateMipMaps is split into generateMipMaps + hasMipMaps in InternalTexture this line can be removed\r\n texture.generateMipMaps = loadMipmaps;\r\n\r\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\r\n let fourCC: number,\r\n width: number,\r\n height: number,\r\n dataLength: number = 0,\r\n dataOffset: number;\r\n let byteArray: Uint8Array, mipmapCount: number, mip: number;\r\n let internalCompressedFormat = 0;\r\n let blockBytes = 1;\r\n\r\n if (header[off_magic] !== DDS_MAGIC) {\r\n Logger.Error(\"Invalid magic number in DDS header\");\r\n return;\r\n }\r\n\r\n if (!info.isFourCC && !info.isRGB && !info.isLuminance) {\r\n Logger.Error(\"Unsupported format, must contain a FourCC, RGB or LUMINANCE code\");\r\n return;\r\n }\r\n\r\n if (info.isCompressed && !ext) {\r\n Logger.Error(\"Compressed textures are not supported on this platform.\");\r\n return;\r\n }\r\n\r\n let bpp = header[off_RGBbpp];\r\n dataOffset = header[off_size] + 4;\r\n\r\n let computeFormats = false;\r\n\r\n if (info.isFourCC) {\r\n fourCC = header[off_pfFourCC];\r\n switch (fourCC) {\r\n case FOURCC_DXT1:\r\n blockBytes = 8;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1;\r\n break;\r\n case FOURCC_DXT3:\r\n blockBytes = 16;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3;\r\n break;\r\n case FOURCC_DXT5:\r\n blockBytes = 16;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n break;\r\n case FOURCC_D3DFMT_R16G16B16A16F:\r\n computeFormats = true;\r\n bpp = 64;\r\n break;\r\n case FOURCC_D3DFMT_R32G32B32A32F:\r\n computeFormats = true;\r\n bpp = 128;\r\n break;\r\n case FOURCC_DX10: {\r\n // There is an additionnal header so dataOffset need to be changed\r\n dataOffset += 5 * 4; // 5 uints\r\n\r\n let supported = false;\r\n switch (info.dxgiFormat) {\r\n case DXGI_FORMAT_R16G16B16A16_FLOAT:\r\n computeFormats = true;\r\n bpp = 64;\r\n supported = true;\r\n break;\r\n case DXGI_FORMAT_R32G32B32A32_FLOAT:\r\n computeFormats = true;\r\n bpp = 128;\r\n supported = true;\r\n break;\r\n case DXGI_FORMAT_B8G8R8X8_UNORM:\r\n info.isRGB = true;\r\n info.isFourCC = false;\r\n bpp = 32;\r\n supported = true;\r\n break;\r\n }\r\n\r\n if (supported) {\r\n break;\r\n }\r\n }\r\n // eslint-disable-next-line no-fallthrough\r\n default:\r\n Logger.Error([\"Unsupported FourCC code:\", Int32ToFourCC(fourCC)]);\r\n return;\r\n }\r\n }\r\n\r\n const rOffset = DDSTools._ExtractLongWordOrder(header[off_RMask]);\r\n const gOffset = DDSTools._ExtractLongWordOrder(header[off_GMask]);\r\n const bOffset = DDSTools._ExtractLongWordOrder(header[off_BMask]);\r\n const aOffset = DDSTools._ExtractLongWordOrder(header[off_AMask]);\r\n\r\n if (computeFormats) {\r\n internalCompressedFormat = engine._getRGBABufferInternalSizedFormat(info.textureType);\r\n }\r\n\r\n mipmapCount = 1;\r\n if (header[off_flags] & DDSD_MIPMAPCOUNT && loadMipmaps !== false) {\r\n mipmapCount = Math.max(1, header[off_mipmapCount]);\r\n }\r\n\r\n const startFace = currentFace || 0;\r\n const caps = engine.getCaps();\r\n for (let face = startFace; face < faces; face++) {\r\n width = header[off_width];\r\n height = header[off_height];\r\n\r\n for (mip = 0; mip < mipmapCount; ++mip) {\r\n if (lodIndex === -1 || lodIndex === mip) {\r\n // In case of fixed LOD, if the lod has just been uploaded, early exit.\r\n const i = lodIndex === -1 ? mip : 0;\r\n\r\n if (!info.isCompressed && info.isFourCC) {\r\n texture.format = Constants.TEXTUREFORMAT_RGBA;\r\n dataLength = width * height * 4;\r\n let floatArray: Nullable<ArrayBufferView> = null;\r\n\r\n if (engine._badOS || engine._badDesktopOS || (!caps.textureHalfFloat && !caps.textureFloat)) {\r\n // Required because iOS has many issues with float and half float generation\r\n if (bpp === 128) {\r\n floatArray = DDSTools._GetFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(DDSTools._GetFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i));\r\n }\r\n } else if (bpp === 64) {\r\n floatArray = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(\r\n DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i)\r\n );\r\n }\r\n }\r\n\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n } else {\r\n const floatAvailable = caps.textureFloat && ((destTypeMustBeFilterable && caps.textureFloatLinearFiltering) || !destTypeMustBeFilterable);\r\n const halfFloatAvailable = caps.textureHalfFloat && ((destTypeMustBeFilterable && caps.textureHalfFloatLinearFiltering) || !destTypeMustBeFilterable);\r\n\r\n const destType =\r\n (bpp === 128 || (bpp === 64 && !halfFloatAvailable)) && floatAvailable\r\n ? Constants.TEXTURETYPE_FLOAT\r\n : (bpp === 64 || (bpp === 128 && !floatAvailable)) && halfFloatAvailable\r\n ? Constants.TEXTURETYPE_HALF_FLOAT\r\n : Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n\r\n let dataGetter: (width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number) => ArrayBufferView;\r\n let dataGetterPolynomial: Nullable<\r\n (width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number) => ArrayBufferView\r\n > = null;\r\n\r\n switch (bpp) {\r\n case 128: {\r\n switch (destType) {\r\n case Constants.TEXTURETYPE_FLOAT:\r\n dataGetter = DDSTools._GetFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = null;\r\n break;\r\n case Constants.TEXTURETYPE_HALF_FLOAT:\r\n dataGetter = DDSTools._GetFloatAsHalfFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\r\n break;\r\n case Constants.TEXTURETYPE_UNSIGNED_BYTE:\r\n dataGetter = DDSTools._GetFloatAsUIntRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\r\n break;\r\n }\r\n break;\r\n }\r\n default: {\r\n // 64 bpp\r\n switch (destType) {\r\n case Constants.TEXTURETYPE_FLOAT:\r\n dataGetter = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = null;\r\n break;\r\n case Constants.TEXTURETYPE_HALF_FLOAT:\r\n dataGetter = DDSTools._GetHalfFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n break;\r\n case Constants.TEXTURETYPE_UNSIGNED_BYTE:\r\n dataGetter = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n break;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n texture.type = destType;\r\n\r\n floatArray = dataGetter(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(\r\n dataGetterPolynomial ? dataGetterPolynomial(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i) : floatArray\r\n );\r\n }\r\n }\r\n\r\n if (floatArray) {\r\n engine._uploadDataToTextureDirectly(texture, floatArray, face, i);\r\n }\r\n } else if (info.isRGB) {\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n if (bpp === 24) {\r\n texture.format = Constants.TEXTUREFORMAT_RGB;\r\n dataLength = width * height * 3;\r\n byteArray = DDSTools._GetRGBArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset);\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n } else {\r\n // 32\r\n texture.format = Constants.TEXTUREFORMAT_RGBA;\r\n dataLength = width * height * 4;\r\n byteArray = DDSTools._GetRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset, aOffset);\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n }\r\n } else if (info.isLuminance) {\r\n const unpackAlignment = engine._getUnpackAlignement();\r\n const unpaddedRowSize = width;\r\n const paddedRowSize = Math.floor((width + unpackAlignment - 1) / unpackAlignment) * unpackAlignment;\r\n dataLength = paddedRowSize * (height - 1) + unpaddedRowSize;\r\n\r\n byteArray = DDSTools._GetLuminanceArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer);\r\n texture.format = Constants.TEXTUREFORMAT_LUMINANCE;\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n } else {\r\n dataLength = (((Math.max(4, width) / 4) * Math.max(4, height)) / 4) * blockBytes;\r\n byteArray = new Uint8Array(data.buffer, data.byteOffset + dataOffset, dataLength);\r\n\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n engine._uploadCompressedDataToTextureDirectly(texture, internalCompressedFormat, width, height, byteArray, face, i);\r\n }\r\n }\r\n dataOffset += bpp ? width * height * (bpp / 8) : dataLength;\r\n width *= 0.5;\r\n height *= 0.5;\r\n\r\n width = Math.max(1.0, width);\r\n height = Math.max(1.0, height);\r\n }\r\n\r\n if (currentFace !== undefined) {\r\n // Loading a single face\r\n break;\r\n }\r\n }\r\n if (sphericalPolynomialFaces && sphericalPolynomialFaces.length > 0) {\r\n info.sphericalPolynomial = CubeMapToSphericalPolynomialTools.ConvertCubeMapToSphericalPolynomial({\r\n size: header[off_width],\r\n right: sphericalPolynomialFaces[0],\r\n left: sphericalPolynomialFaces[1],\r\n up: sphericalPolynomialFaces[2],\r\n down: sphericalPolynomialFaces[3],\r\n front: sphericalPolynomialFaces[4],\r\n back: sphericalPolynomialFaces[5],\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n type: Constants.TEXTURETYPE_FLOAT,\r\n gammaSpace: false,\r\n });\r\n } else {\r\n info.sphericalPolynomial = undefined;\r\n }\r\n }\r\n}\r\n"]}
|
package/Misc/dumpTools.js
CHANGED
|
@@ -1,60 +1,72 @@
|
|
|
1
|
-
import { ThinEngine } from "../Engines/thinEngine.js";
|
|
2
1
|
|
|
3
2
|
import { EffectRenderer, EffectWrapper } from "../Materials/effectRenderer.js";
|
|
4
3
|
import { Tools } from "./tools.js";
|
|
5
|
-
import { passPixelShader } from "../Shaders/pass.fragment.js";
|
|
6
4
|
import { Clamp } from "../Maths/math.scalar.functions.js";
|
|
7
5
|
import { EngineStore } from "../Engines/engineStore.js";
|
|
8
6
|
let _dumpToolsEngine;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
7
|
+
let _enginePromise = null;
|
|
8
|
+
async function _CreateDumpRenderer() {
|
|
9
|
+
if (!_enginePromise) {
|
|
10
|
+
_enginePromise = new Promise((resolve, reject) => {
|
|
11
|
+
let canvas;
|
|
12
|
+
let engine = null;
|
|
13
|
+
const options = {
|
|
14
|
+
preserveDrawingBuffer: true,
|
|
15
|
+
depth: false,
|
|
16
|
+
stencil: false,
|
|
17
|
+
alpha: true,
|
|
18
|
+
premultipliedAlpha: false,
|
|
19
|
+
antialias: false,
|
|
20
|
+
failIfMajorPerformanceCaveat: false,
|
|
21
|
+
};
|
|
22
|
+
import("../Engines/thinEngine.js")
|
|
23
|
+
.then(({ ThinEngine: thinEngineClass }) => {
|
|
24
|
+
try {
|
|
25
|
+
canvas = new OffscreenCanvas(100, 100); // will be resized later
|
|
26
|
+
engine = new thinEngineClass(canvas, false, options);
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
// The browser either does not support OffscreenCanvas or WebGL context in OffscreenCanvas, fallback on a regular canvas
|
|
30
|
+
canvas = document.createElement("canvas");
|
|
31
|
+
engine = new thinEngineClass(canvas, false, options);
|
|
32
|
+
}
|
|
33
|
+
// remove this engine from the list of instances to avoid using it for other purposes
|
|
34
|
+
EngineStore.Instances.pop();
|
|
35
|
+
// However, make sure to dispose it when no other engines are left
|
|
36
|
+
EngineStore.OnEnginesDisposedObservable.add((e) => {
|
|
37
|
+
// guaranteed to run when no other instances are left
|
|
38
|
+
// only dispose if it's not the current engine
|
|
39
|
+
if (engine && e !== engine && !engine.isDisposed && EngineStore.Instances.length === 0) {
|
|
40
|
+
// Dump the engine and the associated resources
|
|
41
|
+
Dispose();
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
engine.getCaps().parallelShaderCompile = undefined;
|
|
45
|
+
const renderer = new EffectRenderer(engine);
|
|
46
|
+
import("../Shaders/pass.fragment.js").then(({ passPixelShader }) => {
|
|
47
|
+
if (!engine) {
|
|
48
|
+
reject("Engine is not defined");
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const wrapper = new EffectWrapper({
|
|
52
|
+
engine,
|
|
53
|
+
name: passPixelShader.name,
|
|
54
|
+
fragmentShader: passPixelShader.shader,
|
|
55
|
+
samplerNames: ["textureSampler"],
|
|
56
|
+
});
|
|
57
|
+
_dumpToolsEngine = {
|
|
58
|
+
canvas,
|
|
59
|
+
engine,
|
|
60
|
+
renderer,
|
|
61
|
+
wrapper,
|
|
62
|
+
};
|
|
63
|
+
resolve(_dumpToolsEngine);
|
|
64
|
+
});
|
|
65
|
+
})
|
|
66
|
+
.catch(reject);
|
|
49
67
|
});
|
|
50
|
-
_dumpToolsEngine = {
|
|
51
|
-
canvas,
|
|
52
|
-
engine,
|
|
53
|
-
renderer,
|
|
54
|
-
wrapper,
|
|
55
|
-
};
|
|
56
68
|
}
|
|
57
|
-
return
|
|
69
|
+
return await _enginePromise;
|
|
58
70
|
}
|
|
59
71
|
/**
|
|
60
72
|
* Dumps the current bound framebuffer
|
|
@@ -103,40 +115,41 @@ export function DumpDataAsync(width, height, data, mimeType = "image/png", fileN
|
|
|
103
115
|
* @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.
|
|
104
116
|
*/
|
|
105
117
|
export function DumpData(width, height, data, successCallback, mimeType = "image/png", fileName, invertY = false, toArrayBuffer = false, quality) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
118
|
+
_CreateDumpRenderer().then((renderer) => {
|
|
119
|
+
renderer.engine.setSize(width, height, true);
|
|
120
|
+
// Convert if data are float32
|
|
121
|
+
if (data instanceof Float32Array) {
|
|
122
|
+
const data2 = new Uint8Array(data.length);
|
|
123
|
+
let n = data.length;
|
|
124
|
+
while (n--) {
|
|
125
|
+
const v = data[n];
|
|
126
|
+
data2[n] = Math.round(Clamp(v) * 255);
|
|
127
|
+
}
|
|
128
|
+
data = data2;
|
|
115
129
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
texture.dispose();
|
|
130
|
+
// Create the image
|
|
131
|
+
const texture = renderer.engine.createRawTexture(data, width, height, 5, false, !invertY, 1);
|
|
132
|
+
renderer.renderer.setViewport();
|
|
133
|
+
renderer.renderer.applyEffectWrapper(renderer.wrapper);
|
|
134
|
+
renderer.wrapper.effect._bindTexture("textureSampler", texture);
|
|
135
|
+
renderer.renderer.draw();
|
|
136
|
+
if (toArrayBuffer) {
|
|
137
|
+
Tools.ToBlob(renderer.canvas, (blob) => {
|
|
138
|
+
const fileReader = new FileReader();
|
|
139
|
+
fileReader.onload = (event) => {
|
|
140
|
+
const arrayBuffer = event.target.result;
|
|
141
|
+
if (successCallback) {
|
|
142
|
+
successCallback(arrayBuffer);
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
fileReader.readAsArrayBuffer(blob);
|
|
146
|
+
}, mimeType, quality);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
Tools.EncodeScreenshotCanvasData(renderer.canvas, successCallback, mimeType, fileName, quality);
|
|
150
|
+
}
|
|
151
|
+
texture.dispose();
|
|
152
|
+
});
|
|
140
153
|
}
|
|
141
154
|
/**
|
|
142
155
|
* Dispose the dump tools associated resources
|
|
@@ -147,6 +160,14 @@ export function Dispose() {
|
|
|
147
160
|
_dumpToolsEngine.renderer.dispose();
|
|
148
161
|
_dumpToolsEngine.engine.dispose();
|
|
149
162
|
}
|
|
163
|
+
else {
|
|
164
|
+
// in cases where the engine is not yet created, we need to wait for it to dispose it
|
|
165
|
+
_enginePromise?.then((dumpToolsEngine) => {
|
|
166
|
+
dumpToolsEngine.wrapper.dispose();
|
|
167
|
+
dumpToolsEngine.renderer.dispose();
|
|
168
|
+
dumpToolsEngine.engine.dispose();
|
|
169
|
+
});
|
|
170
|
+
}
|
|
150
171
|
_dumpToolsEngine = null;
|
|
151
172
|
}
|
|
152
173
|
/**
|
package/Misc/dumpTools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dumpTools.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/dumpTools.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { _WarnImport } from \"./devTools\";\r\n\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { EffectRenderer, EffectWrapper } from \"../Materials/effectRenderer\";\r\nimport { Tools } from \"./tools\";\r\nimport type { Nullable } from \"../types\";\r\n\r\nimport { passPixelShader } from \"../Shaders/pass.fragment\";\r\nimport { Clamp } from \"../Maths/math.scalar.functions\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\ntype DumpToolsEngine = {\r\n canvas: HTMLCanvasElement | OffscreenCanvas;\r\n engine: ThinEngine;\r\n renderer: EffectRenderer;\r\n wrapper: EffectWrapper;\r\n};\r\n\r\nlet _dumpToolsEngine: Nullable<DumpToolsEngine>;\r\n\r\nfunction _CreateDumpRenderer(): DumpToolsEngine {\r\n if (!_dumpToolsEngine) {\r\n let canvas: HTMLCanvasElement | OffscreenCanvas;\r\n let engine: Nullable<ThinEngine> = null;\r\n const options = {\r\n preserveDrawingBuffer: true,\r\n depth: false,\r\n stencil: false,\r\n alpha: true,\r\n premultipliedAlpha: false,\r\n antialias: false,\r\n failIfMajorPerformanceCaveat: false,\r\n };\r\n try {\r\n canvas = new OffscreenCanvas(100, 100); // will be resized later\r\n engine = new ThinEngine(canvas, false, options);\r\n } catch (e) {\r\n // The browser either does not support OffscreenCanvas or WebGL context in OffscreenCanvas, fallback on a regular canvas\r\n canvas = document.createElement(\"canvas\");\r\n engine = new ThinEngine(canvas, false, options);\r\n }\r\n // remove this engine from the list of instances to avoid using it for other purposes\r\n EngineStore.Instances.pop();\r\n // However, make sure to dispose it when no other engines are left\r\n EngineStore.OnEnginesDisposedObservable.add((e) => {\r\n // guaranteed to run when no other instances are left\r\n // only dispose if it's not the current engine\r\n if (engine && e !== engine && !engine.isDisposed && EngineStore.Instances.length === 0) {\r\n // Dump the engine and the associated resources\r\n Dispose();\r\n }\r\n });\r\n engine.getCaps().parallelShaderCompile = undefined;\r\n const renderer = new EffectRenderer(engine);\r\n const wrapper = new EffectWrapper({\r\n engine,\r\n name: passPixelShader.name,\r\n fragmentShader: passPixelShader.shader,\r\n samplerNames: [\"textureSampler\"],\r\n });\r\n _dumpToolsEngine = {\r\n canvas,\r\n engine,\r\n renderer,\r\n wrapper,\r\n };\r\n }\r\n return _dumpToolsEngine;\r\n}\r\n\r\n/**\r\n * Dumps the current bound framebuffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param engine defines the hosting engine\r\n * @param successCallback defines the callback triggered once the data are available\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.\r\n * @returns a void promise\r\n */\r\nexport async function DumpFramebuffer(\r\n width: number,\r\n height: number,\r\n engine: AbstractEngine,\r\n successCallback?: (data: string) => void,\r\n mimeType = \"image/png\",\r\n fileName?: string,\r\n quality?: number\r\n) {\r\n // Read the contents of the framebuffer\r\n const bufferView = await engine.readPixels(0, 0, width, height);\r\n\r\n const data = new Uint8Array(bufferView.buffer);\r\n\r\n DumpData(width, height, data, successCallback as (data: string | ArrayBuffer) => void, mimeType, fileName, true, undefined, quality);\r\n}\r\n\r\n/**\r\n * Dumps an array buffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param data the data array\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @param invertY true to invert the picture in the Y dimension\r\n * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string\r\n * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.\r\n * @returns a promise that resolve to the final data\r\n */\r\nexport function DumpDataAsync(\r\n width: number,\r\n height: number,\r\n data: ArrayBufferView,\r\n mimeType = \"image/png\",\r\n fileName?: string,\r\n invertY = false,\r\n toArrayBuffer = false,\r\n quality?: number\r\n): Promise<string | ArrayBuffer> {\r\n return new Promise((resolve) => {\r\n DumpData(width, height, data, (result) => resolve(result), mimeType, fileName, invertY, toArrayBuffer, quality);\r\n });\r\n}\r\n\r\n/**\r\n * Dumps an array buffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param data the data array\r\n * @param successCallback defines the callback triggered once the data are available\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @param invertY true to invert the picture in the Y dimension\r\n * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string\r\n * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.\r\n */\r\nexport function DumpData(\r\n width: number,\r\n height: number,\r\n data: ArrayBufferView,\r\n successCallback?: (data: string | ArrayBuffer) => void,\r\n mimeType = \"image/png\",\r\n fileName?: string,\r\n invertY = false,\r\n toArrayBuffer = false,\r\n quality?: number\r\n) {\r\n const renderer = _CreateDumpRenderer();\r\n renderer.engine.setSize(width, height, true);\r\n\r\n // Convert if data are float32\r\n if (data instanceof Float32Array) {\r\n const data2 = new Uint8Array(data.length);\r\n let n = data.length;\r\n while (n--) {\r\n const v = data[n];\r\n data2[n] = Math.round(Clamp(v) * 255);\r\n }\r\n data = data2;\r\n }\r\n\r\n // Create the image\r\n const texture = renderer.engine.createRawTexture(data, width, height, Constants.TEXTUREFORMAT_RGBA, false, !invertY, Constants.TEXTURE_NEAREST_NEAREST);\r\n\r\n renderer.renderer.setViewport();\r\n renderer.renderer.applyEffectWrapper(renderer.wrapper);\r\n renderer.wrapper.effect._bindTexture(\"textureSampler\", texture);\r\n renderer.renderer.draw();\r\n\r\n if (toArrayBuffer) {\r\n Tools.ToBlob(\r\n renderer.canvas,\r\n (blob) => {\r\n const fileReader = new FileReader();\r\n fileReader.onload = (event: any) => {\r\n const arrayBuffer = event.target!.result as ArrayBuffer;\r\n if (successCallback) {\r\n successCallback(arrayBuffer);\r\n }\r\n };\r\n fileReader.readAsArrayBuffer(blob!);\r\n },\r\n mimeType,\r\n quality\r\n );\r\n } else {\r\n Tools.EncodeScreenshotCanvasData(renderer.canvas, successCallback, mimeType, fileName, quality);\r\n }\r\n\r\n texture.dispose();\r\n}\r\n\r\n/**\r\n * Dispose the dump tools associated resources\r\n */\r\nexport function Dispose() {\r\n if (_dumpToolsEngine) {\r\n _dumpToolsEngine.wrapper.dispose();\r\n _dumpToolsEngine.renderer.dispose();\r\n _dumpToolsEngine.engine.dispose();\r\n }\r\n _dumpToolsEngine = null;\r\n}\r\n\r\n/**\r\n * Object containing a set of static utilities functions to dump data from a canvas\r\n * @deprecated use functions\r\n */\r\nexport const DumpTools = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n DumpData,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n DumpDataAsync,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n DumpFramebuffer,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n Dispose,\r\n};\r\n\r\n/**\r\n * This will be executed automatically for UMD and es5.\r\n * If esm dev wants the side effects to execute they will have to run it manually\r\n * Once we build native modules those need to be exported.\r\n * @internal\r\n */\r\nconst initSideEffects = () => {\r\n // References the dependencies.\r\n Tools.DumpData = DumpData;\r\n Tools.DumpDataAsync = DumpDataAsync;\r\n Tools.DumpFramebuffer = DumpFramebuffer;\r\n};\r\n\r\ninitSideEffects();\r\n"]}
|
|
1
|
+
{"version":3,"file":"dumpTools.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/dumpTools.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { _WarnImport } from \"./devTools\";\r\n\r\nimport type { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { EffectRenderer, EffectWrapper } from \"../Materials/effectRenderer\";\r\nimport { Tools } from \"./tools\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Clamp } from \"../Maths/math.scalar.functions\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\ntype DumpToolsEngine = {\r\n canvas: HTMLCanvasElement | OffscreenCanvas;\r\n engine: ThinEngine;\r\n renderer: EffectRenderer;\r\n wrapper: EffectWrapper;\r\n};\r\n\r\nlet _dumpToolsEngine: Nullable<DumpToolsEngine>;\r\n\r\nlet _enginePromise: Promise<DumpToolsEngine> | null = null;\r\n\r\nasync function _CreateDumpRenderer(): Promise<DumpToolsEngine> {\r\n if (!_enginePromise) {\r\n _enginePromise = new Promise((resolve, reject) => {\r\n let canvas: HTMLCanvasElement | OffscreenCanvas;\r\n let engine: Nullable<ThinEngine> = null;\r\n const options = {\r\n preserveDrawingBuffer: true,\r\n depth: false,\r\n stencil: false,\r\n alpha: true,\r\n premultipliedAlpha: false,\r\n antialias: false,\r\n failIfMajorPerformanceCaveat: false,\r\n };\r\n import(\"../Engines/thinEngine\")\r\n .then(({ ThinEngine: thinEngineClass }) => {\r\n try {\r\n canvas = new OffscreenCanvas(100, 100); // will be resized later\r\n engine = new thinEngineClass(canvas, false, options);\r\n } catch (e) {\r\n // The browser either does not support OffscreenCanvas or WebGL context in OffscreenCanvas, fallback on a regular canvas\r\n canvas = document.createElement(\"canvas\");\r\n engine = new thinEngineClass(canvas, false, options);\r\n }\r\n // remove this engine from the list of instances to avoid using it for other purposes\r\n EngineStore.Instances.pop();\r\n // However, make sure to dispose it when no other engines are left\r\n EngineStore.OnEnginesDisposedObservable.add((e) => {\r\n // guaranteed to run when no other instances are left\r\n // only dispose if it's not the current engine\r\n if (engine && e !== engine && !engine.isDisposed && EngineStore.Instances.length === 0) {\r\n // Dump the engine and the associated resources\r\n Dispose();\r\n }\r\n });\r\n engine.getCaps().parallelShaderCompile = undefined;\r\n const renderer = new EffectRenderer(engine);\r\n import(\"../Shaders/pass.fragment\").then(({ passPixelShader }) => {\r\n if (!engine) {\r\n reject(\"Engine is not defined\");\r\n return;\r\n }\r\n const wrapper = new EffectWrapper({\r\n engine,\r\n name: passPixelShader.name,\r\n fragmentShader: passPixelShader.shader,\r\n samplerNames: [\"textureSampler\"],\r\n });\r\n _dumpToolsEngine = {\r\n canvas,\r\n engine,\r\n renderer,\r\n wrapper,\r\n };\r\n resolve(_dumpToolsEngine);\r\n });\r\n })\r\n .catch(reject);\r\n });\r\n }\r\n return await _enginePromise;\r\n}\r\n\r\n/**\r\n * Dumps the current bound framebuffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param engine defines the hosting engine\r\n * @param successCallback defines the callback triggered once the data are available\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.\r\n * @returns a void promise\r\n */\r\nexport async function DumpFramebuffer(\r\n width: number,\r\n height: number,\r\n engine: AbstractEngine,\r\n successCallback?: (data: string) => void,\r\n mimeType = \"image/png\",\r\n fileName?: string,\r\n quality?: number\r\n) {\r\n // Read the contents of the framebuffer\r\n const bufferView = await engine.readPixels(0, 0, width, height);\r\n\r\n const data = new Uint8Array(bufferView.buffer);\r\n\r\n DumpData(width, height, data, successCallback as (data: string | ArrayBuffer) => void, mimeType, fileName, true, undefined, quality);\r\n}\r\n\r\n/**\r\n * Dumps an array buffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param data the data array\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @param invertY true to invert the picture in the Y dimension\r\n * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string\r\n * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.\r\n * @returns a promise that resolve to the final data\r\n */\r\nexport function DumpDataAsync(\r\n width: number,\r\n height: number,\r\n data: ArrayBufferView,\r\n mimeType = \"image/png\",\r\n fileName?: string,\r\n invertY = false,\r\n toArrayBuffer = false,\r\n quality?: number\r\n): Promise<string | ArrayBuffer> {\r\n return new Promise((resolve) => {\r\n DumpData(width, height, data, (result) => resolve(result), mimeType, fileName, invertY, toArrayBuffer, quality);\r\n });\r\n}\r\n\r\n/**\r\n * Dumps an array buffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param data the data array\r\n * @param successCallback defines the callback triggered once the data are available\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @param invertY true to invert the picture in the Y dimension\r\n * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string\r\n * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.\r\n */\r\nexport function DumpData(\r\n width: number,\r\n height: number,\r\n data: ArrayBufferView,\r\n successCallback?: (data: string | ArrayBuffer) => void,\r\n mimeType = \"image/png\",\r\n fileName?: string,\r\n invertY = false,\r\n toArrayBuffer = false,\r\n quality?: number\r\n): void {\r\n _CreateDumpRenderer().then((renderer) => {\r\n renderer.engine.setSize(width, height, true);\r\n\r\n // Convert if data are float32\r\n if (data instanceof Float32Array) {\r\n const data2 = new Uint8Array(data.length);\r\n let n = data.length;\r\n while (n--) {\r\n const v = data[n];\r\n data2[n] = Math.round(Clamp(v) * 255);\r\n }\r\n data = data2;\r\n }\r\n\r\n // Create the image\r\n const texture = renderer.engine.createRawTexture(data, width, height, Constants.TEXTUREFORMAT_RGBA, false, !invertY, Constants.TEXTURE_NEAREST_NEAREST);\r\n\r\n renderer.renderer.setViewport();\r\n renderer.renderer.applyEffectWrapper(renderer.wrapper);\r\n renderer.wrapper.effect._bindTexture(\"textureSampler\", texture);\r\n renderer.renderer.draw();\r\n\r\n if (toArrayBuffer) {\r\n Tools.ToBlob(\r\n renderer.canvas,\r\n (blob) => {\r\n const fileReader = new FileReader();\r\n fileReader.onload = (event: any) => {\r\n const arrayBuffer = event.target!.result as ArrayBuffer;\r\n if (successCallback) {\r\n successCallback(arrayBuffer);\r\n }\r\n };\r\n fileReader.readAsArrayBuffer(blob!);\r\n },\r\n mimeType,\r\n quality\r\n );\r\n } else {\r\n Tools.EncodeScreenshotCanvasData(renderer.canvas, successCallback, mimeType, fileName, quality);\r\n }\r\n\r\n texture.dispose();\r\n });\r\n}\r\n\r\n/**\r\n * Dispose the dump tools associated resources\r\n */\r\nexport function Dispose() {\r\n if (_dumpToolsEngine) {\r\n _dumpToolsEngine.wrapper.dispose();\r\n _dumpToolsEngine.renderer.dispose();\r\n _dumpToolsEngine.engine.dispose();\r\n } else {\r\n // in cases where the engine is not yet created, we need to wait for it to dispose it\r\n _enginePromise?.then((dumpToolsEngine) => {\r\n dumpToolsEngine.wrapper.dispose();\r\n dumpToolsEngine.renderer.dispose();\r\n dumpToolsEngine.engine.dispose();\r\n });\r\n }\r\n _dumpToolsEngine = null;\r\n}\r\n\r\n/**\r\n * Object containing a set of static utilities functions to dump data from a canvas\r\n * @deprecated use functions\r\n */\r\nexport const DumpTools = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n DumpData,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n DumpDataAsync,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n DumpFramebuffer,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n Dispose,\r\n};\r\n\r\n/**\r\n * This will be executed automatically for UMD and es5.\r\n * If esm dev wants the side effects to execute they will have to run it manually\r\n * Once we build native modules those need to be exported.\r\n * @internal\r\n */\r\nconst initSideEffects = () => {\r\n // References the dependencies.\r\n Tools.DumpData = DumpData;\r\n Tools.DumpDataAsync = DumpDataAsync;\r\n Tools.DumpFramebuffer = DumpFramebuffer;\r\n};\r\n\r\ninitSideEffects();\r\n"]}
|
|
@@ -2,8 +2,6 @@ import type { Nullable } from "../types";
|
|
|
2
2
|
import { SphericalPolynomial } from "../Maths/sphericalPolynomial";
|
|
3
3
|
import { InternalTexture } from "../Materials/Textures/internalTexture";
|
|
4
4
|
import { BaseTexture } from "../Materials/Textures/baseTexture";
|
|
5
|
-
import "../Engines/Extensions/engine.renderTargetCube";
|
|
6
|
-
import "../Engines/Extensions/engine.readTexture";
|
|
7
5
|
import "../Materials/Textures/baseTexture.polynomial";
|
|
8
6
|
/**
|
|
9
7
|
* Raw texture data and descriptor sufficient for WebGL texture upload
|
|
@@ -9,8 +9,6 @@ import { Scene } from "../scene.js";
|
|
|
9
9
|
import { PostProcess } from "../PostProcesses/postProcess.js";
|
|
10
10
|
import { Logger } from "../Misc/logger.js";
|
|
11
11
|
import { RGBDTextureTools } from "./rgbdTextureTools.js";
|
|
12
|
-
import "../Engines/Extensions/engine.renderTargetCube.js";
|
|
13
|
-
import "../Engines/Extensions/engine.readTexture.js";
|
|
14
12
|
import "../Materials/Textures/baseTexture.polynomial.js";
|
|
15
13
|
import { DumpDataAsync } from "../Misc/dumpTools.js";
|
|
16
14
|
const DefaultEnvironmentTextureImageType = "image/png";
|