@babylonjs/core 6.44.0 → 6.45.0
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/Buffers/buffer.d.ts +22 -22
- package/Buffers/buffer.js +16 -15
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/camera.d.ts +5 -5
- package/Cameras/camera.js +19 -19
- package/Cameras/camera.js.map +1 -1
- package/Engines/ICanvas.d.ts +2 -1
- package/Engines/ICanvas.js.map +1 -1
- package/Engines/constants.d.ts +96 -0
- package/Engines/constants.js +96 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Gizmos/gizmo.d.ts +14 -0
- package/Gizmos/gizmo.js +16 -0
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.d.ts +12 -0
- package/Gizmos/gizmoManager.js +26 -0
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +16 -2
- package/Gizmos/positionGizmo.js +12 -2
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +8 -0
- package/Gizmos/rotationGizmo.js +9 -0
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +15 -1
- package/Gizmos/scaleGizmo.js +11 -1
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Layers/effectLayer.js +4 -4
- package/Layers/effectLayer.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +5 -5
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +16 -16
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +8 -8
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js +2 -2
- package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +6 -6
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +2 -2
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +7 -7
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/bonesBlock.js +3 -3
- package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +3 -3
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +3 -3
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.js +3 -3
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +41 -41
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +10 -10
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +6 -6
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +6 -6
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +7 -7
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/dynamicTexture.js +1 -1
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/texture.js +1 -1
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/index.d.ts +1 -0
- package/Materials/index.js +1 -0
- package/Materials/index.js.map +1 -1
- package/Materials/material.decalMapConfiguration.js +3 -3
- package/Materials/material.decalMapConfiguration.js.map +1 -1
- package/Materials/material.detailMapConfiguration.js +3 -3
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +2 -2
- package/Materials/material.js.map +1 -1
- package/Materials/materialHelper.d.ts +1 -4
- package/Materials/materialHelper.functions.d.ts +275 -0
- package/Materials/materialHelper.functions.js +823 -0
- package/Materials/materialHelper.functions.js.map +1 -0
- package/Materials/materialHelper.js +64 -589
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/materialPluginBase.d.ts +1 -1
- package/Materials/materialPluginBase.js +1 -1
- package/Materials/materialPluginBase.js.map +1 -1
- package/Materials/shaderMaterial.js +8 -8
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/standardMaterial.js +33 -33
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/Compression/dracoCompression.d.ts +23 -2
- package/Meshes/Compression/dracoCompression.js +76 -236
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/Compression/dracoCompressionWorker.d.ts +44 -0
- package/Meshes/Compression/dracoCompressionWorker.js +189 -0
- package/Meshes/Compression/dracoCompressionWorker.js.map +1 -0
- package/Meshes/trailMesh.js +1 -1
- package/Meshes/trailMesh.js.map +1 -1
- package/Misc/basis.d.ts +6 -1
- package/Misc/basis.js +11 -231
- package/Misc/basis.js.map +1 -1
- package/Misc/basisWorker.d.ts +13 -0
- package/Misc/basisWorker.js +249 -0
- package/Misc/basisWorker.js.map +1 -0
- package/Misc/khronosTextureContainer2.d.ts +25 -3
- package/Misc/khronosTextureContainer2.js +35 -106
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/khronosTextureContainer2Worker.d.ts +12 -0
- package/Misc/khronosTextureContainer2Worker.js +136 -0
- package/Misc/khronosTextureContainer2Worker.js.map +1 -0
- package/Navigation/Plugins/recastJSPlugin.d.ts +1 -1
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/Particles/gpuParticleSystem.js +3 -3
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js +7 -3
- package/Particles/particleSystem.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +8 -0
- package/Physics/v2/IPhysicsEnginePlugin.js +9 -0
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.d.ts +7 -1
- package/Physics/v2/Plugins/havokPlugin.js +19 -1
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +2 -2
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/Rendering/depthRenderer.js +4 -4
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +5 -5
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js +4 -4
- package/Rendering/outlineRenderer.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +4 -4
- package/scene.js.map +1 -1
package/Misc/basis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basis.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/basis.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD;;GAEG;AACH,MAAM,aAAa;CASlB;AAED;;GAEG;AACH,MAAM,eAAe;CASpB;AAED;;GAEG;AACH,MAAM,OAAO,2BAA2B;CAsCvC;AAED;;;GAGG;AACH,IAAK,aAsBJ;AAtBD,WAAK,aAAa;IACd,uDAAW,CAAA;IACX,uDAAW,CAAA;IACX,qDAAU,CAAA;IACV,qDAAU,CAAA;IACV,qDAAU,CAAA;IACV,qDAAU,CAAA;IACV,qDAAU,CAAA;IACV,uEAAmB,CAAA;IACnB,yEAAoB,CAAA;IACpB,gEAAgB,CAAA;IAChB,8DAAe,CAAA;IACf,sGAAmC,CAAA;IACnC,4DAAc,CAAA;IACd,4DAAc,CAAA;IACd,4DAAc,CAAA;IACd,gEAAgB,CAAA;IAChB,gEAAgB,CAAA;IAChB,wEAAoB,CAAA;IACpB,0EAAqB,CAAA;IACrB,wEAAoB,CAAA;IACpB,0EAAqB,CAAA;AACzB,CAAC,EAtBI,aAAa,KAAb,aAAa,QAsBjB;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B;;OAEG;IACH,WAAW,EAAE,GAAG,KAAK,CAAC,cAAc,wCAAwC;IAC5E;;OAEG;IACH,aAAa,EAAE,GAAG,KAAK,CAAC,cAAc,0CAA0C;CACnF,CAAC;AAEF;;;;;GAKG;AACH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,WAAmB,EAAE,MAAc,EAAE,EAAE;IACpF,IAAI,MAAM,CAAC;IACX,QAAQ,WAAW,EAAE;QACjB,KAAK,aAAa,CAAC,OAAO;YACtB,MAAM,GAAG,SAAS,CAAC,uCAAuC,CAAC;YAC3D,MAAM;QACV,KAAK,aAAa,CAAC,MAAM;YACrB,MAAM,GAAG,SAAS,CAAC,sCAAsC,CAAC;YAC1D,MAAM;QACV,KAAK,aAAa,CAAC,MAAM;YACrB,MAAM,GAAG,SAAS,CAAC,uCAAuC,CAAC;YAC3D,MAAM;QACV,KAAK,aAAa,CAAC,WAAW;YAC1B,MAAM,GAAG,SAAS,CAAC,sCAAsC,CAAC;YAC1D,MAAM;QACV,KAAK,aAAa,CAAC,OAAO;YACtB,MAAM,GAAG,SAAS,CAAC,uCAAuC,CAAC;YAC3D,MAAM;QACV,KAAK,aAAa,CAAC,MAAM;YACrB,MAAM,GAAG,SAAS,CAAC,wCAAwC,CAAC;YAC5D,MAAM;KACb;IAED,IAAI,MAAM,KAAK,SAAS,EAAE;QACtB,4CAA4C;QAC5C,MAAM,+DAA+D,CAAC;KACzE;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,IAAI,cAAc,GAA8B,IAAI,CAAC;AACrD,IAAI,OAAO,GAAqB,IAAI,CAAC;AACrC,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,MAAM,uBAAuB,GAAG,KAAK,CAAC;AACtC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IAC5B,IAAI,CAAC,cAAc,EAAE;QACjB,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,OAAO,EAAE;gBACT,GAAG,CAAC,OAAO,CAAC,CAAC;aAChB;iBAAM;gBACH,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;qBAC1E,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;oBACjB,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;wBAC3B,OAAO,MAAM,CAAC,iEAAiE,CAAC,CAAC;qBACpF;oBACD,MAAM,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC;oBAC/G,OAAO,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;oBAEpC,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,EAAE;wBAC7B,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;4BAC5B,OAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;4BACrD,GAAG,CAAC,OAAQ,CAAC,CAAC;yBACjB;6BAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;4BACpC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,2BAA2B,CAAC,CAAC;yBACzD;oBACL,CAAC,CAAC;oBACF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;oBACjD,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;gBACnI,CAAC,CAAC;qBACD,KAAK,CAAC,MAAM,CAAC,CAAC;aACtB;QACL,CAAC,CAAC,CAAC;KACN;IACD,OAAO,cAAc,CAAC;AAC1B,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAmC,EAAE,MAAmC,EAA4B,EAAE;IACjI,MAAM,QAAQ,GAAG,IAAI,YAAY,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3E,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5B,kBAAkB,EAAE,CAAC,IAAI,CACrB,GAAG,EAAE;YACD,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;YAC7B,MAAM,cAAc,GAAG,CAAC,GAAQ,EAAE,EAAE;gBAChC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE;oBAC7D,OAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;oBACxD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;wBACnB,GAAG,CAAC,2CAA2C,CAAC,CAAC;qBACpD;yBAAM;wBACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;qBACjB;iBACJ;YACL,CAAC,CAAC;YACF,OAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAErD,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACzD,YAAY,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5F,OAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,EAAE;gBAClJ,YAAY,CAAC,MAAM;aACtB,CAAC,CAAC;QACP,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACN,GAAG,CAAC,KAAK,CAAC,CAAC;QACf,CAAC,CACJ,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,GAAG,CAAC,OAAwB,EAAE,MAAc,EAAQ,EAAE;IACnE,IAAI,MAAM,GAAW,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC;IAC5C,IAAI,OAAO,CAAC,MAAM,EAAE;QAChB,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAC;KACzC;IAED,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,OAAwB,EAAE,eAAgC,EAAE,EAAE;IACzG,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAY,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;QACxC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,aAAa,CAAC,SAAS,EAAE;YACrF,yDAAyD;YACzD,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,gCAAgC,CAAC;YAC1D,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,iBAAiB,CAAC;YAE7C,IAAI,MAAM,CAAC,SAAS,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;gBACvH,kCAAkC;gBAClC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAEvE,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;gBACxC,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,gCAAgC,CAAC;gBACzD,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,iBAAiB,CAAC;gBAC5C,yCAAyC;gBACzC,MAAM,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5C,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC5B,MAAM,CAAC,4BAA4B,CAAC,MAAM,EAAE,IAAI,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;gBAEzI,yBAAyB;gBACzB,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE;oBACnH,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBAC/B,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,+BAA+B;gBAC/B,OAAO,CAAC,aAAa,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;gBAEzC,kBAAkB;gBAClB,OAAO,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,qBAAqB,CAAC;gBACvD,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7B,MAAM,CAAC,4BAA4B,CAAC,OAAO,EAAE,IAAI,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;aAC7I;SACJ;aAAM;YACH,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YAChC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAClC,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAE/E,MAAM,MAAM,GAAG,UAAU,CAAC,gCAAgC,CAAC,eAAe,CAAC,MAAO,EAAE,MAAM,CAAC,CAAC;YAC5F,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YAExB,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAE7B,oCAAoC;YACpC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,KAAa,EAAE,EAAE;gBAC5E,MAAM,CAAC,sCAAsC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAChI,CAAC,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,SAAS,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;gBACnH,KAAK,CAAC,IAAI,CACN,wMAAwM,CAC3M,CAAC;gBACF,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;gBACjD,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;aACpD;SACJ;KACJ;AACL,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB;;OAEG;IACH,WAAW,EAAE,iBAAiB,CAAC,WAAW;IAC1C;;OAEG;IACH,aAAa,EAAE,iBAAiB,CAAC,aAAa;IAE9C;;;;OAIG;IACH,gCAAgC;IAEhC;;;;;OAKG;IACH,cAAc;IAEd;;;;OAIG;IACH,8BAA8B;CACjC,CAAC;AAMF,SAAS,UAAU;IACf,MAAM,aAAa,GAAG;QAClB,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,eAAe,EAAE,CAAC;QAClB,gBAAgB,EAAE,CAAC;QACnB,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,EAAE;QACd,8BAA8B,EAAE,EAAE;QAClC,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,EAAE;QACnB,gBAAgB,EAAE,EAAE;QACpB,eAAe,EAAE,EAAE;QACnB,gBAAgB,EAAE,EAAE;KACvB,CAAC;IACF,IAAI,uBAAuB,GAA+B,IAAI,CAAC;IAC/D,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;QAClB,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;YAC9B,4CAA4C;YAC5C,IAAI,CAAC,uBAAuB,EAAE;gBAC1B,2CAA2C;gBAC3C,IAAI;oBACA,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACjC;gBAAC,OAAO,CAAC,EAAE;oBACR,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;iBAC9C;gBACD,uBAAuB,GAAG,KAAK,CAAC;oBAC5B,uBAAuB;oBACvB,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU;iBACpC,CAAC,CAAC;aACN;YACD,IAAI,uBAAuB,KAAK,IAAI,EAAE;gBAClC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC/B,KAAK,GAAG,CAAC,CAAC;oBACV,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpB,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACpC,CAAC,CAAC,CAAC;aACN;SACJ;aAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE;YAC1C,4DAA4D;YAC5D,MAAM,MAAM,GAAgC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YACrC,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEjH,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,IAAI,MAAM,KAAK,IAAI,EAAE;gBACjB,eAAe,GAAG,IAAI,CAAC;gBACvB,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;aAC5E;YAED,kBAAkB;YAClB,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE;gBAChC,OAAO,GAAG,KAAK,CAAC;aACnB;YAED,MAAM,OAAO,GAAe,EAAE,CAAC;YAC/B,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;gBACxE,IAAI,CAAC,OAAO,EAAE;oBACV,MAAM;iBACT;gBACD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,IAAI,MAAM,CAAC,eAAe,KAAK,UAAU,EAAE;oBAC/E,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;oBACnC,IAAI,MAAM,CAAC,gBAAgB,KAAK,KAAK,EAAE;wBACnC,QAAQ,GAAG,CAAC,CAAC;qBAChB;oBACD,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,EAAE,UAAU,EAAE,EAAE;wBAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;wBAE3C,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAO,EAAE,eAAe,CAAC,CAAC;wBAC5F,IAAI,CAAC,MAAM,EAAE;4BACT,OAAO,GAAG,KAAK,CAAC;4BAChB,MAAM;yBACT;wBACD,SAAS,CAAC,gBAAgB,GAAG,MAAM,CAAC;wBACpC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;qBACnD;iBACJ;aACJ;YACD,aAAa;YACb,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,UAAU,CAAC,MAAM,EAAE,CAAC;YAEpB,IAAI,eAAe,EAAE;gBACjB,MAAM,GAAG,CAAC,CAAC,CAAC;aACf;YACD,IAAI,CAAC,OAAO,EAAE;gBACV,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;aAC7E;iBAAM;gBACH,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;aAC1H;SACJ;IACL,CAAC,CAAC;IAEF;;;;;OAKG;IACH,SAAS,2BAA2B,CAAC,MAAmC,EAAE,QAAuB;QAC7F,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,MAAM,CAAC,2BAA2B,EAAE;YACpC,IAAI,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE;gBACzC,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC;aACtC;iBAAM,IAAI,MAAM,CAAC,2BAA2B,CAAC,GAAG,EAAE;gBAC/C,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;aACjC;iBAAM,IAAI,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE;gBAChD,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;aAC5E;iBAAM,IAAI,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE;gBACjD,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC;aAC/F;iBAAM,IAAI,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE;gBAChD,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;aAClC;iBAAM,IAAI,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE;gBAChD,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;aAClC;iBAAM;gBACH,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC;aACpC;SACJ;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,SAAS,WAAW,CAAC,SAAc;QAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,SAAS,GAAG;gBACd,MAAM,EAAE,EAAgB;aAC3B,CAAC;YACF,MAAM,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,EAAE,EAAE;gBAC7C,MAAM,SAAS,GAAG;oBACd,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC;oBACxC,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC;iBAC7C,CAAC;gBACF,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACpC;YACD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC1B;QACD,MAAM,IAAI,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,cAAc,CAAC,UAAe,EAAE,UAAkB,EAAE,UAAkB,EAAE,MAAc,EAAE,eAAwB;QACrH,MAAM,OAAO,GAAG,UAAU,CAAC,6BAA6B,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACzF,IAAI,GAAG,GAA6B,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YACvE,OAAO,IAAI,CAAC;SACf;QACD,qEAAqE;QACrE,IAAI,eAAe,EAAE;YACjB,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjF,MAAM,aAAa,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnF,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;SACjE;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;;;;;;OAUG;IACH,SAAS,kBAAkB,CAAC,GAAe,EAAE,aAAqB,EAAE,KAAa,EAAE,MAAc;QAC7F,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QAE5C,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;QAC7B,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC;QAC/B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,MAAM,EAAE,EAAE;YACjD,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,MAAM,EAAE,EAAE;gBAChD,MAAM,CAAC,GAAG,aAAa,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC,CAAC;oBACA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;wBAC7C,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;wBACzD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC,CAAC;oBACA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;wBAC7C,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;wBACzD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;gBACjE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;oBAC9B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;oBAC3B,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;oBACnD,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;oBACzB,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;oBAChC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;oBAChC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;iBACnC;aACJ;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;AACL,CAAC;AAED,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE;IAC7C,GAAG,EAAE;QACD,OAAO,iBAAiB,CAAC,WAAW,CAAC;IACzC,CAAC;IACD,GAAG,EAAE,UAAsB,KAAa;QACpC,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC;IAC1C,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,eAAe,EAAE;IAC/C,GAAG,EAAE;QACD,OAAO,iBAAiB,CAAC,aAAa,CAAC;IAC3C,CAAC;IACD,GAAG,EAAE,UAAsB,KAAa;QACpC,iBAAiB,CAAC,aAAa,GAAG,KAAK,CAAC;IAC5C,CAAC;CACJ,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../types\";\r\nimport { Tools } from \"./tools\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Engine } from \"../Engines/engine\";\r\n\r\n/**\r\n * Info about the .basis files\r\n */\r\nclass BasisFileInfo {\r\n /**\r\n * If the file has alpha\r\n */\r\n public hasAlpha: boolean;\r\n /**\r\n * Info about each image of the basis file\r\n */\r\n public images: Array<{ levels: Array<{ width: number; height: number; transcodedPixels: ArrayBufferView }> }>;\r\n}\r\n\r\n/**\r\n * Result of transcoding a basis file\r\n */\r\nclass TranscodeResult {\r\n /**\r\n * Info about the .basis file\r\n */\r\n public fileInfo: BasisFileInfo;\r\n /**\r\n * Format to use when loading the file\r\n */\r\n public format: number;\r\n}\r\n\r\n/**\r\n * Configuration options for the Basis transcoder\r\n */\r\nexport class BasisTranscodeConfiguration {\r\n /**\r\n * Supported compression formats used to determine the supported output format of the transcoder\r\n */\r\n supportedCompressionFormats?: {\r\n /**\r\n * etc1 compression format\r\n */\r\n etc1?: boolean;\r\n /**\r\n * s3tc compression format\r\n */\r\n s3tc?: boolean;\r\n /**\r\n * pvrtc compression format\r\n */\r\n pvrtc?: boolean;\r\n /**\r\n * etc2 compression format\r\n */\r\n etc2?: boolean;\r\n /**\r\n * astc compression format\r\n */\r\n astc?: boolean;\r\n /**\r\n * bc7 compression format\r\n */\r\n bc7?: boolean;\r\n };\r\n /**\r\n * If mipmap levels should be loaded for transcoded images (Default: true)\r\n */\r\n loadMipmapLevels?: boolean;\r\n /**\r\n * Index of a single image to load (Default: all images)\r\n */\r\n loadSingleImage?: number;\r\n}\r\n\r\n/**\r\n * @internal\r\n * Enum of basis transcoder formats\r\n */\r\nenum BASIS_FORMATS {\r\n cTFETC1 = 0,\r\n cTFETC2 = 1,\r\n cTFBC1 = 2,\r\n cTFBC3 = 3,\r\n cTFBC4 = 4,\r\n cTFBC5 = 5,\r\n cTFBC7 = 6,\r\n cTFPVRTC1_4_RGB = 8,\r\n cTFPVRTC1_4_RGBA = 9,\r\n cTFASTC_4x4 = 10,\r\n cTFATC_RGB = 11,\r\n cTFATC_RGBA_INTERPOLATED_ALPHA = 12,\r\n cTFRGBA32 = 13,\r\n cTFRGB565 = 14,\r\n cTFBGR565 = 15,\r\n cTFRGBA4444 = 16,\r\n cTFFXT1_RGB = 17,\r\n cTFPVRTC2_4_RGB = 18,\r\n cTFPVRTC2_4_RGBA = 19,\r\n cTFETC2_EAC_R11 = 20,\r\n cTFETC2_EAC_RG11 = 21,\r\n}\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisToolsOptions = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`,\r\n};\r\n\r\n/**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @param engine\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport const GetInternalFormatFromBasisFormat = (basisFormat: number, engine: Engine) => {\r\n let format;\r\n switch (basisFormat) {\r\n case BASIS_FORMATS.cTFETC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL;\r\n break;\r\n case BASIS_FORMATS.cTFBC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1;\r\n break;\r\n case BASIS_FORMATS.cTFBC4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n break;\r\n case BASIS_FORMATS.cTFASTC_4x4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4;\r\n break;\r\n case BASIS_FORMATS.cTFETC2:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC;\r\n break;\r\n case BASIS_FORMATS.cTFBC7:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM;\r\n break;\r\n }\r\n\r\n if (format === undefined) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"The chosen Basis transcoder format is not currently supported\";\r\n }\r\n\r\n return format;\r\n};\r\n\r\nlet _WorkerPromise: Nullable<Promise<Worker>> = null;\r\nlet _Worker: Nullable<Worker> = null;\r\nlet _actionId = 0;\r\nconst _IgnoreSupportedFormats = false;\r\nconst _CreateWorkerAsync = () => {\r\n if (!_WorkerPromise) {\r\n _WorkerPromise = new Promise((res, reject) => {\r\n if (_Worker) {\r\n res(_Worker);\r\n } else {\r\n Tools.LoadFileAsync(Tools.GetBabylonScriptURL(BasisToolsOptions.WasmModuleURL))\r\n .then((wasmBinary) => {\r\n if (typeof URL !== \"function\") {\r\n return reject(\"Basis transcoder requires an environment with a URL constructor\");\r\n }\r\n const workerBlobUrl = URL.createObjectURL(new Blob([`(${workerFunc})()`], { type: \"application/javascript\" }));\r\n _Worker = new Worker(workerBlobUrl);\r\n\r\n const initHandler = (msg: any) => {\r\n if (msg.data.action === \"init\") {\r\n _Worker!.removeEventListener(\"message\", initHandler);\r\n res(_Worker!);\r\n } else if (msg.data.action === \"error\") {\r\n reject(msg.data.error || \"error initializing worker\");\r\n }\r\n };\r\n _Worker.addEventListener(\"message\", initHandler);\r\n _Worker.postMessage({ action: \"init\", url: Tools.GetBabylonScriptURL(BasisToolsOptions.JSModuleURL), wasmBinary: wasmBinary });\r\n })\r\n .catch(reject);\r\n }\r\n });\r\n }\r\n return _WorkerPromise;\r\n};\r\n\r\n/**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\nexport const TranscodeAsync = (data: ArrayBuffer | ArrayBufferView, config: BasisTranscodeConfiguration): Promise<TranscodeResult> => {\r\n const dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\r\n\r\n return new Promise((res, rej) => {\r\n _CreateWorkerAsync().then(\r\n () => {\r\n const actionId = _actionId++;\r\n const messageHandler = (msg: any) => {\r\n if (msg.data.action === \"transcode\" && msg.data.id === actionId) {\r\n _Worker!.removeEventListener(\"message\", messageHandler);\r\n if (!msg.data.success) {\r\n rej(\"Transcode is not supported on this device\");\r\n } else {\r\n res(msg.data);\r\n }\r\n }\r\n };\r\n _Worker!.addEventListener(\"message\", messageHandler);\r\n\r\n const dataViewCopy = new Uint8Array(dataView.byteLength);\r\n dataViewCopy.set(new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength));\r\n _Worker!.postMessage({ action: \"transcode\", id: actionId, imageData: dataViewCopy, config: config, ignoreSupportedFormats: _IgnoreSupportedFormats }, [\r\n dataViewCopy.buffer,\r\n ]);\r\n },\r\n (error) => {\r\n rej(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Binds a texture according to its underlying target.\r\n * @param texture texture to bind\r\n * @param engine the engine to bind the texture in\r\n */\r\nconst BindTexture = (texture: InternalTexture, engine: Engine): void => {\r\n let target: GLenum = engine._gl?.TEXTURE_2D;\r\n if (texture.isCube) {\r\n target = engine._gl?.TEXTURE_CUBE_MAP;\r\n }\r\n\r\n engine._bindTextureDirectly(target, texture, true);\r\n};\r\n\r\n/**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\nexport const LoadTextureFromTranscodeResult = (texture: InternalTexture, transcodeResult: TranscodeResult) => {\r\n const engine = texture.getEngine() as Engine;\r\n for (let i = 0; i < transcodeResult.fileInfo.images.length; i++) {\r\n const rootImage = transcodeResult.fileInfo.images[i].levels[0];\r\n texture._invertVScale = texture.invertY;\r\n if (transcodeResult.format === -1 || transcodeResult.format === BASIS_FORMATS.cTFRGB565) {\r\n // No compatable compressed format found, fallback to RGB\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n texture.format = Constants.TEXTUREFORMAT_RGB;\r\n\r\n if (engine._features.basisNeedsPOT && (Scalar.Log2(rootImage.width) % 1 !== 0 || Scalar.Log2(rootImage.height) % 1 !== 0)) {\r\n // Create non power of two texture\r\n const source = new InternalTexture(engine, InternalTextureSource.Temp);\r\n\r\n texture._invertVScale = texture.invertY;\r\n source.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n source.format = Constants.TEXTUREFORMAT_RGB;\r\n // Fallback requires aligned width/height\r\n source.width = (rootImage.width + 3) & ~3;\r\n source.height = (rootImage.height + 3) & ~3;\r\n BindTexture(source, engine);\r\n engine._uploadDataToTextureDirectly(source, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n\r\n // Resize to power of two\r\n engine._rescaleTexture(source, texture, engine.scenes[0], engine._getInternalFormat(Constants.TEXTUREFORMAT_RGB), () => {\r\n engine._releaseTexture(source);\r\n BindTexture(texture, engine);\r\n });\r\n } else {\r\n // Fallback is already inverted\r\n texture._invertVScale = !texture.invertY;\r\n\r\n // Upload directly\r\n texture.width = (rootImage.width + 3) & ~3;\r\n texture.height = (rootImage.height + 3) & ~3;\r\n texture.samplingMode = Constants.TEXTURE_LINEAR_LINEAR;\r\n BindTexture(texture, engine);\r\n engine._uploadDataToTextureDirectly(texture, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n }\r\n } else {\r\n texture.width = rootImage.width;\r\n texture.height = rootImage.height;\r\n texture.generateMipMaps = transcodeResult.fileInfo.images[i].levels.length > 1;\r\n\r\n const format = BasisTools.GetInternalFormatFromBasisFormat(transcodeResult.format!, engine);\r\n texture.format = format;\r\n\r\n BindTexture(texture, engine);\r\n\r\n // Upload all mip levels in the file\r\n transcodeResult.fileInfo.images[i].levels.forEach((level: any, index: number) => {\r\n engine._uploadCompressedDataToTextureDirectly(texture, format, level.width, level.height, level.transcodedPixels, i, index);\r\n });\r\n\r\n if (engine._features.basisNeedsPOT && (Scalar.Log2(texture.width) % 1 !== 0 || Scalar.Log2(texture.height) % 1 !== 0)) {\r\n Tools.Warn(\r\n \"Loaded .basis texture width and height are not a power of two. Texture wrapping will be set to Texture.CLAMP_ADDRESSMODE as other modes are not supported with non power of two dimensions in webGL 1.\"\r\n );\r\n texture._cachedWrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture._cachedWrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisTools = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: BasisToolsOptions.JSModuleURL,\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: BasisToolsOptions.WasmModuleURL,\r\n\r\n /**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n GetInternalFormatFromBasisFormat,\r\n\r\n /**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\n TranscodeAsync,\r\n\r\n /**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\n LoadTextureFromTranscodeResult,\r\n};\r\n\r\n// WorkerGlobalScope\r\ndeclare function importScripts(...urls: string[]): void;\r\ndeclare function postMessage(message: any, transfer?: any[]): void;\r\ndeclare let BASIS: any;\r\nfunction workerFunc(): void {\r\n const _BASIS_FORMAT = {\r\n cTFETC1: 0,\r\n cTFETC2: 1,\r\n cTFBC1: 2,\r\n cTFBC3: 3,\r\n cTFBC4: 4,\r\n cTFBC5: 5,\r\n cTFBC7: 6,\r\n cTFPVRTC1_4_RGB: 8,\r\n cTFPVRTC1_4_RGBA: 9,\r\n cTFASTC_4x4: 10,\r\n cTFATC_RGB: 11,\r\n cTFATC_RGBA_INTERPOLATED_ALPHA: 12,\r\n cTFRGBA32: 13,\r\n cTFRGB565: 14,\r\n cTFBGR565: 15,\r\n cTFRGBA4444: 16,\r\n cTFFXT1_RGB: 17,\r\n cTFPVRTC2_4_RGB: 18,\r\n cTFPVRTC2_4_RGBA: 19,\r\n cTFETC2_EAC_R11: 20,\r\n cTFETC2_EAC_RG11: 21,\r\n };\r\n let transcoderModulePromise: Nullable<PromiseLike<any>> = null;\r\n onmessage = (event) => {\r\n if (event.data.action === \"init\") {\r\n // Load the transcoder if it hasn't been yet\r\n if (!transcoderModulePromise) {\r\n // make sure we loaded the script correctly\r\n try {\r\n importScripts(event.data.url);\r\n } catch (e) {\r\n postMessage({ action: \"error\", error: e });\r\n }\r\n transcoderModulePromise = BASIS({\r\n // Override wasm binary\r\n wasmBinary: event.data.wasmBinary,\r\n });\r\n }\r\n if (transcoderModulePromise !== null) {\r\n transcoderModulePromise.then((m) => {\r\n BASIS = m;\r\n m.initializeBasis();\r\n postMessage({ action: \"init\" });\r\n });\r\n }\r\n } else if (event.data.action === \"transcode\") {\r\n // Transcode the basis image and return the resulting pixels\r\n const config: BasisTranscodeConfiguration = event.data.config;\r\n const imgData = event.data.imageData;\r\n const loadedFile = new BASIS.BasisFile(imgData);\r\n const fileInfo = GetFileInfo(loadedFile);\r\n let format = event.data.ignoreSupportedFormats ? null : GetSupportedTranscodeFormat(event.data.config, fileInfo);\r\n\r\n let needsConversion = false;\r\n if (format === null) {\r\n needsConversion = true;\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\r\n }\r\n\r\n // Begin transcode\r\n let success = true;\r\n if (!loadedFile.startTranscoding()) {\r\n success = false;\r\n }\r\n\r\n const buffers: Array<any> = [];\r\n for (let imageIndex = 0; imageIndex < fileInfo.images.length; imageIndex++) {\r\n if (!success) {\r\n break;\r\n }\r\n const image = fileInfo.images[imageIndex];\r\n if (config.loadSingleImage === undefined || config.loadSingleImage === imageIndex) {\r\n let mipCount = image.levels.length;\r\n if (config.loadMipmapLevels === false) {\r\n mipCount = 1;\r\n }\r\n for (let levelIndex = 0; levelIndex < mipCount; levelIndex++) {\r\n const levelInfo = image.levels[levelIndex];\r\n\r\n const pixels = TranscodeLevel(loadedFile, imageIndex, levelIndex, format!, needsConversion);\r\n if (!pixels) {\r\n success = false;\r\n break;\r\n }\r\n levelInfo.transcodedPixels = pixels;\r\n buffers.push(levelInfo.transcodedPixels.buffer);\r\n }\r\n }\r\n }\r\n // Close file\r\n loadedFile.close();\r\n loadedFile.delete();\r\n\r\n if (needsConversion) {\r\n format = -1;\r\n }\r\n if (!success) {\r\n postMessage({ action: \"transcode\", success: success, id: event.data.id });\r\n } else {\r\n postMessage({ action: \"transcode\", success: success, id: event.data.id, fileInfo: fileInfo, format: format }, buffers);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Detects the supported transcode format for the file\r\n * @param config transcode config\r\n * @param fileInfo info about the file\r\n * @returns the chosed format or null if none are supported\r\n */\r\n function GetSupportedTranscodeFormat(config: BasisTranscodeConfiguration, fileInfo: BasisFileInfo): Nullable<number> {\r\n let format = null;\r\n if (config.supportedCompressionFormats) {\r\n if (config.supportedCompressionFormats.astc) {\r\n format = _BASIS_FORMAT.cTFASTC_4x4;\r\n } else if (config.supportedCompressionFormats.bc7) {\r\n format = _BASIS_FORMAT.cTFBC7;\r\n } else if (config.supportedCompressionFormats.s3tc) {\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\r\n } else if (config.supportedCompressionFormats.pvrtc) {\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFPVRTC1_4_RGBA : _BASIS_FORMAT.cTFPVRTC1_4_RGB;\r\n } else if (config.supportedCompressionFormats.etc2) {\r\n format = _BASIS_FORMAT.cTFETC2;\r\n } else if (config.supportedCompressionFormats.etc1) {\r\n format = _BASIS_FORMAT.cTFETC1;\r\n } else {\r\n format = _BASIS_FORMAT.cTFRGB565;\r\n }\r\n }\r\n return format;\r\n }\r\n\r\n /**\r\n * Retrieves information about the basis file eg. dimensions\r\n * @param basisFile the basis file to get the info from\r\n * @returns information about the basis file\r\n */\r\n function GetFileInfo(basisFile: any): BasisFileInfo {\r\n const hasAlpha = basisFile.getHasAlpha();\r\n const imageCount = basisFile.getNumImages();\r\n const images = [];\r\n for (let i = 0; i < imageCount; i++) {\r\n const imageInfo = {\r\n levels: [] as Array<any>,\r\n };\r\n const levelCount = basisFile.getNumLevels(i);\r\n for (let level = 0; level < levelCount; level++) {\r\n const levelInfo = {\r\n width: basisFile.getImageWidth(i, level),\r\n height: basisFile.getImageHeight(i, level),\r\n };\r\n imageInfo.levels.push(levelInfo);\r\n }\r\n images.push(imageInfo);\r\n }\r\n const info = { hasAlpha, images };\r\n return info;\r\n }\r\n\r\n function TranscodeLevel(loadedFile: any, imageIndex: number, levelIndex: number, format: number, convertToRgb565: boolean): Nullable<Uint8Array | Uint16Array> {\r\n const dstSize = loadedFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, format);\r\n let dst: Uint8Array | Uint16Array = new Uint8Array(dstSize);\r\n if (!loadedFile.transcodeImage(dst, imageIndex, levelIndex, format, 1, 0)) {\r\n return null;\r\n }\r\n // If no supported format is found, load as dxt and convert to rgb565\r\n if (convertToRgb565) {\r\n const alignedWidth = (loadedFile.getImageWidth(imageIndex, levelIndex) + 3) & ~3;\r\n const alignedHeight = (loadedFile.getImageHeight(imageIndex, levelIndex) + 3) & ~3;\r\n dst = ConvertDxtToRgb565(dst, 0, alignedWidth, alignedHeight);\r\n }\r\n return dst;\r\n }\r\n\r\n /**\r\n * From https://github.com/BinomialLLC/basis_universal/blob/master/webgl/texture/dxt-to-rgb565.js\r\n * An unoptimized version of dxtToRgb565. Also, the floating\r\n * point math used to compute the colors actually results in\r\n * slightly different colors compared to hardware DXT decoders.\r\n * @param src dxt src pixels\r\n * @param srcByteOffset offset for the start of src\r\n * @param width aligned width of the image\r\n * @param height aligned height of the image\r\n * @returns the converted pixels\r\n */\r\n function ConvertDxtToRgb565(src: Uint8Array, srcByteOffset: number, width: number, height: number): Uint16Array {\r\n const c = new Uint16Array(4);\r\n const dst = new Uint16Array(width * height);\r\n\r\n const blockWidth = width / 4;\r\n const blockHeight = height / 4;\r\n for (let blockY = 0; blockY < blockHeight; blockY++) {\r\n for (let blockX = 0; blockX < blockWidth; blockX++) {\r\n const i = srcByteOffset + 8 * (blockY * blockWidth + blockX);\r\n c[0] = src[i] | (src[i + 1] << 8);\r\n c[1] = src[i + 2] | (src[i + 3] << 8);\r\n c[2] =\r\n ((2 * (c[0] & 0x1f) + 1 * (c[1] & 0x1f)) / 3) |\r\n (((2 * (c[0] & 0x7e0) + 1 * (c[1] & 0x7e0)) / 3) & 0x7e0) |\r\n (((2 * (c[0] & 0xf800) + 1 * (c[1] & 0xf800)) / 3) & 0xf800);\r\n c[3] =\r\n ((2 * (c[1] & 0x1f) + 1 * (c[0] & 0x1f)) / 3) |\r\n (((2 * (c[1] & 0x7e0) + 1 * (c[0] & 0x7e0)) / 3) & 0x7e0) |\r\n (((2 * (c[1] & 0xf800) + 1 * (c[0] & 0xf800)) / 3) & 0xf800);\r\n for (let row = 0; row < 4; row++) {\r\n const m = src[i + 4 + row];\r\n let dstI = (blockY * 4 + row) * width + blockX * 4;\r\n dst[dstI++] = c[m & 0x3];\r\n dst[dstI++] = c[(m >> 2) & 0x3];\r\n dst[dstI++] = c[(m >> 4) & 0x3];\r\n dst[dstI++] = c[(m >> 6) & 0x3];\r\n }\r\n }\r\n }\r\n return dst;\r\n }\r\n}\r\n\r\nObject.defineProperty(BasisTools, \"JSModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.JSModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.JSModuleURL = value;\r\n },\r\n});\r\n\r\nObject.defineProperty(BasisTools, \"WasmModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.WasmModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.WasmModuleURL = value;\r\n },\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"basis.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/basis.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../types\";\r\nimport { Tools } from \"./tools\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport { initializeWebWorker, workerFunction } from \"./basisWorker\";\r\n\r\n/**\r\n * Info about the .basis files\r\n */\r\nexport class BasisFileInfo {\r\n /**\r\n * If the file has alpha\r\n */\r\n public hasAlpha: boolean;\r\n /**\r\n * Info about each image of the basis file\r\n */\r\n public images: Array<{ levels: Array<{ width: number; height: number; transcodedPixels: ArrayBufferView }> }>;\r\n}\r\n\r\n/**\r\n * Result of transcoding a basis file\r\n */\r\nclass TranscodeResult {\r\n /**\r\n * Info about the .basis file\r\n */\r\n public fileInfo: BasisFileInfo;\r\n /**\r\n * Format to use when loading the file\r\n */\r\n public format: number;\r\n}\r\n\r\n/**\r\n * Configuration options for the Basis transcoder\r\n */\r\nexport class BasisTranscodeConfiguration {\r\n /**\r\n * Supported compression formats used to determine the supported output format of the transcoder\r\n */\r\n supportedCompressionFormats?: {\r\n /**\r\n * etc1 compression format\r\n */\r\n etc1?: boolean;\r\n /**\r\n * s3tc compression format\r\n */\r\n s3tc?: boolean;\r\n /**\r\n * pvrtc compression format\r\n */\r\n pvrtc?: boolean;\r\n /**\r\n * etc2 compression format\r\n */\r\n etc2?: boolean;\r\n /**\r\n * astc compression format\r\n */\r\n astc?: boolean;\r\n /**\r\n * bc7 compression format\r\n */\r\n bc7?: boolean;\r\n };\r\n /**\r\n * If mipmap levels should be loaded for transcoded images (Default: true)\r\n */\r\n loadMipmapLevels?: boolean;\r\n /**\r\n * Index of a single image to load (Default: all images)\r\n */\r\n loadSingleImage?: number;\r\n}\r\n\r\n/**\r\n * @internal\r\n * Enum of basis transcoder formats\r\n */\r\nenum BASIS_FORMATS {\r\n cTFETC1 = 0,\r\n cTFETC2 = 1,\r\n cTFBC1 = 2,\r\n cTFBC3 = 3,\r\n cTFBC4 = 4,\r\n cTFBC5 = 5,\r\n cTFBC7 = 6,\r\n cTFPVRTC1_4_RGB = 8,\r\n cTFPVRTC1_4_RGBA = 9,\r\n cTFASTC_4x4 = 10,\r\n cTFATC_RGB = 11,\r\n cTFATC_RGBA_INTERPOLATED_ALPHA = 12,\r\n cTFRGBA32 = 13,\r\n cTFRGB565 = 14,\r\n cTFBGR565 = 15,\r\n cTFRGBA4444 = 16,\r\n cTFFXT1_RGB = 17,\r\n cTFPVRTC2_4_RGB = 18,\r\n cTFPVRTC2_4_RGBA = 19,\r\n cTFETC2_EAC_R11 = 20,\r\n cTFETC2_EAC_RG11 = 21,\r\n}\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisToolsOptions = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`,\r\n};\r\n\r\n/**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @param engine\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport const GetInternalFormatFromBasisFormat = (basisFormat: number, engine: Engine) => {\r\n let format;\r\n switch (basisFormat) {\r\n case BASIS_FORMATS.cTFETC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL;\r\n break;\r\n case BASIS_FORMATS.cTFBC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1;\r\n break;\r\n case BASIS_FORMATS.cTFBC4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n break;\r\n case BASIS_FORMATS.cTFASTC_4x4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4;\r\n break;\r\n case BASIS_FORMATS.cTFETC2:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC;\r\n break;\r\n case BASIS_FORMATS.cTFBC7:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM;\r\n break;\r\n }\r\n\r\n if (format === undefined) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"The chosen Basis transcoder format is not currently supported\";\r\n }\r\n\r\n return format;\r\n};\r\n\r\nlet _WorkerPromise: Nullable<Promise<Worker>> = null;\r\nlet _Worker: Nullable<Worker> = null;\r\nlet _actionId = 0;\r\nconst _IgnoreSupportedFormats = false;\r\nconst _CreateWorkerAsync = () => {\r\n if (!_WorkerPromise) {\r\n _WorkerPromise = new Promise((res, reject) => {\r\n if (_Worker) {\r\n res(_Worker);\r\n } else {\r\n Tools.LoadFileAsync(Tools.GetBabylonScriptURL(BasisToolsOptions.WasmModuleURL))\r\n .then((wasmBinary) => {\r\n if (typeof URL !== \"function\") {\r\n return reject(\"Basis transcoder requires an environment with a URL constructor\");\r\n }\r\n const workerBlobUrl = URL.createObjectURL(new Blob([`(${workerFunction})()`], { type: \"application/javascript\" }));\r\n _Worker = new Worker(workerBlobUrl);\r\n initializeWebWorker(_Worker, wasmBinary, BasisToolsOptions.JSModuleURL).then(res, reject);\r\n })\r\n .catch(reject);\r\n }\r\n });\r\n }\r\n return _WorkerPromise;\r\n};\r\n\r\n/**\r\n * Set the worker to use for transcoding\r\n * @param worker The worker that will be used for transcoding\r\n */\r\nexport const SetBasisTranscoderWorker = (worker: Worker) => {\r\n _Worker = worker;\r\n};\r\n\r\n/**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\nexport const TranscodeAsync = (data: ArrayBuffer | ArrayBufferView, config: BasisTranscodeConfiguration): Promise<TranscodeResult> => {\r\n const dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\r\n\r\n return new Promise((res, rej) => {\r\n _CreateWorkerAsync().then(\r\n () => {\r\n const actionId = _actionId++;\r\n const messageHandler = (msg: any) => {\r\n if (msg.data.action === \"transcode\" && msg.data.id === actionId) {\r\n _Worker!.removeEventListener(\"message\", messageHandler);\r\n if (!msg.data.success) {\r\n rej(\"Transcode is not supported on this device\");\r\n } else {\r\n res(msg.data);\r\n }\r\n }\r\n };\r\n _Worker!.addEventListener(\"message\", messageHandler);\r\n\r\n const dataViewCopy = new Uint8Array(dataView.byteLength);\r\n dataViewCopy.set(new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength));\r\n _Worker!.postMessage({ action: \"transcode\", id: actionId, imageData: dataViewCopy, config: config, ignoreSupportedFormats: _IgnoreSupportedFormats }, [\r\n dataViewCopy.buffer,\r\n ]);\r\n },\r\n (error) => {\r\n rej(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Binds a texture according to its underlying target.\r\n * @param texture texture to bind\r\n * @param engine the engine to bind the texture in\r\n */\r\nconst BindTexture = (texture: InternalTexture, engine: Engine): void => {\r\n let target: GLenum = engine._gl?.TEXTURE_2D;\r\n if (texture.isCube) {\r\n target = engine._gl?.TEXTURE_CUBE_MAP;\r\n }\r\n\r\n engine._bindTextureDirectly(target, texture, true);\r\n};\r\n\r\n/**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\nexport const LoadTextureFromTranscodeResult = (texture: InternalTexture, transcodeResult: TranscodeResult) => {\r\n const engine = texture.getEngine() as Engine;\r\n for (let i = 0; i < transcodeResult.fileInfo.images.length; i++) {\r\n const rootImage = transcodeResult.fileInfo.images[i].levels[0];\r\n texture._invertVScale = texture.invertY;\r\n if (transcodeResult.format === -1 || transcodeResult.format === BASIS_FORMATS.cTFRGB565) {\r\n // No compatable compressed format found, fallback to RGB\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n texture.format = Constants.TEXTUREFORMAT_RGB;\r\n\r\n if (engine._features.basisNeedsPOT && (Scalar.Log2(rootImage.width) % 1 !== 0 || Scalar.Log2(rootImage.height) % 1 !== 0)) {\r\n // Create non power of two texture\r\n const source = new InternalTexture(engine, InternalTextureSource.Temp);\r\n\r\n texture._invertVScale = texture.invertY;\r\n source.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n source.format = Constants.TEXTUREFORMAT_RGB;\r\n // Fallback requires aligned width/height\r\n source.width = (rootImage.width + 3) & ~3;\r\n source.height = (rootImage.height + 3) & ~3;\r\n BindTexture(source, engine);\r\n engine._uploadDataToTextureDirectly(source, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n\r\n // Resize to power of two\r\n engine._rescaleTexture(source, texture, engine.scenes[0], engine._getInternalFormat(Constants.TEXTUREFORMAT_RGB), () => {\r\n engine._releaseTexture(source);\r\n BindTexture(texture, engine);\r\n });\r\n } else {\r\n // Fallback is already inverted\r\n texture._invertVScale = !texture.invertY;\r\n\r\n // Upload directly\r\n texture.width = (rootImage.width + 3) & ~3;\r\n texture.height = (rootImage.height + 3) & ~3;\r\n texture.samplingMode = Constants.TEXTURE_LINEAR_LINEAR;\r\n BindTexture(texture, engine);\r\n engine._uploadDataToTextureDirectly(texture, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n }\r\n } else {\r\n texture.width = rootImage.width;\r\n texture.height = rootImage.height;\r\n texture.generateMipMaps = transcodeResult.fileInfo.images[i].levels.length > 1;\r\n\r\n const format = BasisTools.GetInternalFormatFromBasisFormat(transcodeResult.format!, engine);\r\n texture.format = format;\r\n\r\n BindTexture(texture, engine);\r\n\r\n // Upload all mip levels in the file\r\n transcodeResult.fileInfo.images[i].levels.forEach((level: any, index: number) => {\r\n engine._uploadCompressedDataToTextureDirectly(texture, format, level.width, level.height, level.transcodedPixels, i, index);\r\n });\r\n\r\n if (engine._features.basisNeedsPOT && (Scalar.Log2(texture.width) % 1 !== 0 || Scalar.Log2(texture.height) % 1 !== 0)) {\r\n Tools.Warn(\r\n \"Loaded .basis texture width and height are not a power of two. Texture wrapping will be set to Texture.CLAMP_ADDRESSMODE as other modes are not supported with non power of two dimensions in webGL 1.\"\r\n );\r\n texture._cachedWrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture._cachedWrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisTools = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: BasisToolsOptions.JSModuleURL,\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: BasisToolsOptions.WasmModuleURL,\r\n\r\n /**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n GetInternalFormatFromBasisFormat,\r\n\r\n /**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\n TranscodeAsync,\r\n\r\n /**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\n LoadTextureFromTranscodeResult,\r\n};\r\n\r\nObject.defineProperty(BasisTools, \"JSModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.JSModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.JSModuleURL = value;\r\n },\r\n});\r\n\r\nObject.defineProperty(BasisTools, \"WasmModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.WasmModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.WasmModuleURL = value;\r\n },\r\n});\r\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The worker function that gets converted to a blob url to pass into a worker.
|
|
3
|
+
* To be used if a developer wants to create their own worker instance and inject it instead of using the default worker.
|
|
4
|
+
*/
|
|
5
|
+
export declare function workerFunction(): void;
|
|
6
|
+
/**
|
|
7
|
+
* Initialize a web worker with the basis transcoder
|
|
8
|
+
* @param worker the worker to initialize
|
|
9
|
+
* @param wasmBinary the wasm binary to load into the worker
|
|
10
|
+
* @param moduleUrl the url to the basis transcoder module
|
|
11
|
+
* @returns a promise that resolves when the worker is initialized
|
|
12
|
+
*/
|
|
13
|
+
export declare function initializeWebWorker(worker: Worker, wasmBinary: ArrayBuffer, moduleUrl?: string): Promise<Worker>;
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { Tools } from "./tools.js";
|
|
2
|
+
/**
|
|
3
|
+
* The worker function that gets converted to a blob url to pass into a worker.
|
|
4
|
+
* To be used if a developer wants to create their own worker instance and inject it instead of using the default worker.
|
|
5
|
+
*/
|
|
6
|
+
export function workerFunction() {
|
|
7
|
+
const _BASIS_FORMAT = {
|
|
8
|
+
cTFETC1: 0,
|
|
9
|
+
cTFETC2: 1,
|
|
10
|
+
cTFBC1: 2,
|
|
11
|
+
cTFBC3: 3,
|
|
12
|
+
cTFBC4: 4,
|
|
13
|
+
cTFBC5: 5,
|
|
14
|
+
cTFBC7: 6,
|
|
15
|
+
cTFPVRTC1_4_RGB: 8,
|
|
16
|
+
cTFPVRTC1_4_RGBA: 9,
|
|
17
|
+
cTFASTC_4x4: 10,
|
|
18
|
+
cTFATC_RGB: 11,
|
|
19
|
+
cTFATC_RGBA_INTERPOLATED_ALPHA: 12,
|
|
20
|
+
cTFRGBA32: 13,
|
|
21
|
+
cTFRGB565: 14,
|
|
22
|
+
cTFBGR565: 15,
|
|
23
|
+
cTFRGBA4444: 16,
|
|
24
|
+
cTFFXT1_RGB: 17,
|
|
25
|
+
cTFPVRTC2_4_RGB: 18,
|
|
26
|
+
cTFPVRTC2_4_RGBA: 19,
|
|
27
|
+
cTFETC2_EAC_R11: 20,
|
|
28
|
+
cTFETC2_EAC_RG11: 21,
|
|
29
|
+
};
|
|
30
|
+
let transcoderModulePromise = null;
|
|
31
|
+
onmessage = (event) => {
|
|
32
|
+
if (event.data.action === "init") {
|
|
33
|
+
// Load the transcoder if it hasn't been yet
|
|
34
|
+
if (event.data.url) {
|
|
35
|
+
// make sure we loaded the script correctly
|
|
36
|
+
try {
|
|
37
|
+
importScripts(event.data.url);
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
postMessage({ action: "error", error: e });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (!transcoderModulePromise) {
|
|
44
|
+
transcoderModulePromise = BASIS({
|
|
45
|
+
// Override wasm binary
|
|
46
|
+
wasmBinary: event.data.wasmBinary,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (transcoderModulePromise !== null) {
|
|
50
|
+
transcoderModulePromise.then((m) => {
|
|
51
|
+
BASIS = m;
|
|
52
|
+
m.initializeBasis();
|
|
53
|
+
postMessage({ action: "init" });
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else if (event.data.action === "transcode") {
|
|
58
|
+
// Transcode the basis image and return the resulting pixels
|
|
59
|
+
const config = event.data.config;
|
|
60
|
+
const imgData = event.data.imageData;
|
|
61
|
+
const loadedFile = new BASIS.BasisFile(imgData);
|
|
62
|
+
const fileInfo = GetFileInfo(loadedFile);
|
|
63
|
+
let format = event.data.ignoreSupportedFormats ? null : GetSupportedTranscodeFormat(event.data.config, fileInfo);
|
|
64
|
+
let needsConversion = false;
|
|
65
|
+
if (format === null) {
|
|
66
|
+
needsConversion = true;
|
|
67
|
+
format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;
|
|
68
|
+
}
|
|
69
|
+
// Begin transcode
|
|
70
|
+
let success = true;
|
|
71
|
+
if (!loadedFile.startTranscoding()) {
|
|
72
|
+
success = false;
|
|
73
|
+
}
|
|
74
|
+
const buffers = [];
|
|
75
|
+
for (let imageIndex = 0; imageIndex < fileInfo.images.length; imageIndex++) {
|
|
76
|
+
if (!success) {
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
const image = fileInfo.images[imageIndex];
|
|
80
|
+
if (config.loadSingleImage === undefined || config.loadSingleImage === imageIndex) {
|
|
81
|
+
let mipCount = image.levels.length;
|
|
82
|
+
if (config.loadMipmapLevels === false) {
|
|
83
|
+
mipCount = 1;
|
|
84
|
+
}
|
|
85
|
+
for (let levelIndex = 0; levelIndex < mipCount; levelIndex++) {
|
|
86
|
+
const levelInfo = image.levels[levelIndex];
|
|
87
|
+
const pixels = TranscodeLevel(loadedFile, imageIndex, levelIndex, format, needsConversion);
|
|
88
|
+
if (!pixels) {
|
|
89
|
+
success = false;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
levelInfo.transcodedPixels = pixels;
|
|
93
|
+
buffers.push(levelInfo.transcodedPixels.buffer);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Close file
|
|
98
|
+
loadedFile.close();
|
|
99
|
+
loadedFile.delete();
|
|
100
|
+
if (needsConversion) {
|
|
101
|
+
format = -1;
|
|
102
|
+
}
|
|
103
|
+
if (!success) {
|
|
104
|
+
postMessage({ action: "transcode", success: success, id: event.data.id });
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
postMessage({ action: "transcode", success: success, id: event.data.id, fileInfo: fileInfo, format: format }, buffers);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Detects the supported transcode format for the file
|
|
113
|
+
* @param config transcode config
|
|
114
|
+
* @param fileInfo info about the file
|
|
115
|
+
* @returns the chosed format or null if none are supported
|
|
116
|
+
*/
|
|
117
|
+
function GetSupportedTranscodeFormat(config, fileInfo) {
|
|
118
|
+
let format = null;
|
|
119
|
+
if (config.supportedCompressionFormats) {
|
|
120
|
+
if (config.supportedCompressionFormats.astc) {
|
|
121
|
+
format = _BASIS_FORMAT.cTFASTC_4x4;
|
|
122
|
+
}
|
|
123
|
+
else if (config.supportedCompressionFormats.bc7) {
|
|
124
|
+
format = _BASIS_FORMAT.cTFBC7;
|
|
125
|
+
}
|
|
126
|
+
else if (config.supportedCompressionFormats.s3tc) {
|
|
127
|
+
format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;
|
|
128
|
+
}
|
|
129
|
+
else if (config.supportedCompressionFormats.pvrtc) {
|
|
130
|
+
format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFPVRTC1_4_RGBA : _BASIS_FORMAT.cTFPVRTC1_4_RGB;
|
|
131
|
+
}
|
|
132
|
+
else if (config.supportedCompressionFormats.etc2) {
|
|
133
|
+
format = _BASIS_FORMAT.cTFETC2;
|
|
134
|
+
}
|
|
135
|
+
else if (config.supportedCompressionFormats.etc1) {
|
|
136
|
+
format = _BASIS_FORMAT.cTFETC1;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
format = _BASIS_FORMAT.cTFRGB565;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return format;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Retrieves information about the basis file eg. dimensions
|
|
146
|
+
* @param basisFile the basis file to get the info from
|
|
147
|
+
* @returns information about the basis file
|
|
148
|
+
*/
|
|
149
|
+
function GetFileInfo(basisFile) {
|
|
150
|
+
const hasAlpha = basisFile.getHasAlpha();
|
|
151
|
+
const imageCount = basisFile.getNumImages();
|
|
152
|
+
const images = [];
|
|
153
|
+
for (let i = 0; i < imageCount; i++) {
|
|
154
|
+
const imageInfo = {
|
|
155
|
+
levels: [],
|
|
156
|
+
};
|
|
157
|
+
const levelCount = basisFile.getNumLevels(i);
|
|
158
|
+
for (let level = 0; level < levelCount; level++) {
|
|
159
|
+
const levelInfo = {
|
|
160
|
+
width: basisFile.getImageWidth(i, level),
|
|
161
|
+
height: basisFile.getImageHeight(i, level),
|
|
162
|
+
};
|
|
163
|
+
imageInfo.levels.push(levelInfo);
|
|
164
|
+
}
|
|
165
|
+
images.push(imageInfo);
|
|
166
|
+
}
|
|
167
|
+
const info = { hasAlpha, images };
|
|
168
|
+
return info;
|
|
169
|
+
}
|
|
170
|
+
function TranscodeLevel(loadedFile, imageIndex, levelIndex, format, convertToRgb565) {
|
|
171
|
+
const dstSize = loadedFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, format);
|
|
172
|
+
let dst = new Uint8Array(dstSize);
|
|
173
|
+
if (!loadedFile.transcodeImage(dst, imageIndex, levelIndex, format, 1, 0)) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
// If no supported format is found, load as dxt and convert to rgb565
|
|
177
|
+
if (convertToRgb565) {
|
|
178
|
+
const alignedWidth = (loadedFile.getImageWidth(imageIndex, levelIndex) + 3) & ~3;
|
|
179
|
+
const alignedHeight = (loadedFile.getImageHeight(imageIndex, levelIndex) + 3) & ~3;
|
|
180
|
+
dst = ConvertDxtToRgb565(dst, 0, alignedWidth, alignedHeight);
|
|
181
|
+
}
|
|
182
|
+
return dst;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* From https://github.com/BinomialLLC/basis_universal/blob/master/webgl/texture/dxt-to-rgb565.js
|
|
186
|
+
* An unoptimized version of dxtToRgb565. Also, the floating
|
|
187
|
+
* point math used to compute the colors actually results in
|
|
188
|
+
* slightly different colors compared to hardware DXT decoders.
|
|
189
|
+
* @param src dxt src pixels
|
|
190
|
+
* @param srcByteOffset offset for the start of src
|
|
191
|
+
* @param width aligned width of the image
|
|
192
|
+
* @param height aligned height of the image
|
|
193
|
+
* @returns the converted pixels
|
|
194
|
+
*/
|
|
195
|
+
function ConvertDxtToRgb565(src, srcByteOffset, width, height) {
|
|
196
|
+
const c = new Uint16Array(4);
|
|
197
|
+
const dst = new Uint16Array(width * height);
|
|
198
|
+
const blockWidth = width / 4;
|
|
199
|
+
const blockHeight = height / 4;
|
|
200
|
+
for (let blockY = 0; blockY < blockHeight; blockY++) {
|
|
201
|
+
for (let blockX = 0; blockX < blockWidth; blockX++) {
|
|
202
|
+
const i = srcByteOffset + 8 * (blockY * blockWidth + blockX);
|
|
203
|
+
c[0] = src[i] | (src[i + 1] << 8);
|
|
204
|
+
c[1] = src[i + 2] | (src[i + 3] << 8);
|
|
205
|
+
c[2] =
|
|
206
|
+
((2 * (c[0] & 0x1f) + 1 * (c[1] & 0x1f)) / 3) |
|
|
207
|
+
(((2 * (c[0] & 0x7e0) + 1 * (c[1] & 0x7e0)) / 3) & 0x7e0) |
|
|
208
|
+
(((2 * (c[0] & 0xf800) + 1 * (c[1] & 0xf800)) / 3) & 0xf800);
|
|
209
|
+
c[3] =
|
|
210
|
+
((2 * (c[1] & 0x1f) + 1 * (c[0] & 0x1f)) / 3) |
|
|
211
|
+
(((2 * (c[1] & 0x7e0) + 1 * (c[0] & 0x7e0)) / 3) & 0x7e0) |
|
|
212
|
+
(((2 * (c[1] & 0xf800) + 1 * (c[0] & 0xf800)) / 3) & 0xf800);
|
|
213
|
+
for (let row = 0; row < 4; row++) {
|
|
214
|
+
const m = src[i + 4 + row];
|
|
215
|
+
let dstI = (blockY * 4 + row) * width + blockX * 4;
|
|
216
|
+
dst[dstI++] = c[m & 0x3];
|
|
217
|
+
dst[dstI++] = c[(m >> 2) & 0x3];
|
|
218
|
+
dst[dstI++] = c[(m >> 4) & 0x3];
|
|
219
|
+
dst[dstI++] = c[(m >> 6) & 0x3];
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return dst;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Initialize a web worker with the basis transcoder
|
|
228
|
+
* @param worker the worker to initialize
|
|
229
|
+
* @param wasmBinary the wasm binary to load into the worker
|
|
230
|
+
* @param moduleUrl the url to the basis transcoder module
|
|
231
|
+
* @returns a promise that resolves when the worker is initialized
|
|
232
|
+
*/
|
|
233
|
+
export function initializeWebWorker(worker, wasmBinary, moduleUrl) {
|
|
234
|
+
return new Promise((res, reject) => {
|
|
235
|
+
const initHandler = (msg) => {
|
|
236
|
+
if (msg.data.action === "init") {
|
|
237
|
+
worker.removeEventListener("message", initHandler);
|
|
238
|
+
res(worker);
|
|
239
|
+
}
|
|
240
|
+
else if (msg.data.action === "error") {
|
|
241
|
+
reject(msg.data.error || "error initializing worker");
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
worker.addEventListener("message", initHandler);
|
|
245
|
+
// we can use transferable objects here because the worker will own the ArrayBuffer
|
|
246
|
+
worker.postMessage({ action: "init", url: moduleUrl ? Tools.GetBabylonScriptURL(moduleUrl) : undefined, wasmBinary }, [wasmBinary]);
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=basisWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basisWorker.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/basisWorker.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { Tools } from \"./tools\";\r\nimport type { BasisFileInfo, BasisTranscodeConfiguration } from \"./basis\";\r\n\r\n// WorkerGlobalScope\r\ndeclare function importScripts(...urls: string[]): void;\r\ndeclare function postMessage(message: any, transfer?: any[]): void;\r\ndeclare let BASIS: any;\r\n/**\r\n * The worker function that gets converted to a blob url to pass into a worker.\r\n * To be used if a developer wants to create their own worker instance and inject it instead of using the default worker.\r\n */\r\nexport function workerFunction(): void {\r\n const _BASIS_FORMAT = {\r\n cTFETC1: 0,\r\n cTFETC2: 1,\r\n cTFBC1: 2,\r\n cTFBC3: 3,\r\n cTFBC4: 4,\r\n cTFBC5: 5,\r\n cTFBC7: 6,\r\n cTFPVRTC1_4_RGB: 8,\r\n cTFPVRTC1_4_RGBA: 9,\r\n cTFASTC_4x4: 10,\r\n cTFATC_RGB: 11,\r\n cTFATC_RGBA_INTERPOLATED_ALPHA: 12,\r\n cTFRGBA32: 13,\r\n cTFRGB565: 14,\r\n cTFBGR565: 15,\r\n cTFRGBA4444: 16,\r\n cTFFXT1_RGB: 17,\r\n cTFPVRTC2_4_RGB: 18,\r\n cTFPVRTC2_4_RGBA: 19,\r\n cTFETC2_EAC_R11: 20,\r\n cTFETC2_EAC_RG11: 21,\r\n };\r\n let transcoderModulePromise: Nullable<PromiseLike<any>> = null;\r\n onmessage = (event) => {\r\n if (event.data.action === \"init\") {\r\n // Load the transcoder if it hasn't been yet\r\n if (event.data.url) {\r\n // make sure we loaded the script correctly\r\n try {\r\n importScripts(event.data.url);\r\n } catch (e) {\r\n postMessage({ action: \"error\", error: e });\r\n }\r\n }\r\n if (!transcoderModulePromise) {\r\n transcoderModulePromise = BASIS({\r\n // Override wasm binary\r\n wasmBinary: event.data.wasmBinary,\r\n });\r\n }\r\n if (transcoderModulePromise !== null) {\r\n transcoderModulePromise.then((m) => {\r\n BASIS = m;\r\n m.initializeBasis();\r\n postMessage({ action: \"init\" });\r\n });\r\n }\r\n } else if (event.data.action === \"transcode\") {\r\n // Transcode the basis image and return the resulting pixels\r\n const config: BasisTranscodeConfiguration = event.data.config;\r\n const imgData = event.data.imageData;\r\n const loadedFile = new BASIS.BasisFile(imgData);\r\n const fileInfo = GetFileInfo(loadedFile);\r\n let format = event.data.ignoreSupportedFormats ? null : GetSupportedTranscodeFormat(event.data.config, fileInfo);\r\n\r\n let needsConversion = false;\r\n if (format === null) {\r\n needsConversion = true;\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\r\n }\r\n\r\n // Begin transcode\r\n let success = true;\r\n if (!loadedFile.startTranscoding()) {\r\n success = false;\r\n }\r\n\r\n const buffers: Array<any> = [];\r\n for (let imageIndex = 0; imageIndex < fileInfo.images.length; imageIndex++) {\r\n if (!success) {\r\n break;\r\n }\r\n const image = fileInfo.images[imageIndex];\r\n if (config.loadSingleImage === undefined || config.loadSingleImage === imageIndex) {\r\n let mipCount = image.levels.length;\r\n if (config.loadMipmapLevels === false) {\r\n mipCount = 1;\r\n }\r\n for (let levelIndex = 0; levelIndex < mipCount; levelIndex++) {\r\n const levelInfo = image.levels[levelIndex];\r\n\r\n const pixels = TranscodeLevel(loadedFile, imageIndex, levelIndex, format!, needsConversion);\r\n if (!pixels) {\r\n success = false;\r\n break;\r\n }\r\n levelInfo.transcodedPixels = pixels;\r\n buffers.push(levelInfo.transcodedPixels.buffer);\r\n }\r\n }\r\n }\r\n // Close file\r\n loadedFile.close();\r\n loadedFile.delete();\r\n\r\n if (needsConversion) {\r\n format = -1;\r\n }\r\n if (!success) {\r\n postMessage({ action: \"transcode\", success: success, id: event.data.id });\r\n } else {\r\n postMessage({ action: \"transcode\", success: success, id: event.data.id, fileInfo: fileInfo, format: format }, buffers);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Detects the supported transcode format for the file\r\n * @param config transcode config\r\n * @param fileInfo info about the file\r\n * @returns the chosed format or null if none are supported\r\n */\r\n function GetSupportedTranscodeFormat(config: BasisTranscodeConfiguration, fileInfo: BasisFileInfo): Nullable<number> {\r\n let format = null;\r\n if (config.supportedCompressionFormats) {\r\n if (config.supportedCompressionFormats.astc) {\r\n format = _BASIS_FORMAT.cTFASTC_4x4;\r\n } else if (config.supportedCompressionFormats.bc7) {\r\n format = _BASIS_FORMAT.cTFBC7;\r\n } else if (config.supportedCompressionFormats.s3tc) {\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\r\n } else if (config.supportedCompressionFormats.pvrtc) {\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFPVRTC1_4_RGBA : _BASIS_FORMAT.cTFPVRTC1_4_RGB;\r\n } else if (config.supportedCompressionFormats.etc2) {\r\n format = _BASIS_FORMAT.cTFETC2;\r\n } else if (config.supportedCompressionFormats.etc1) {\r\n format = _BASIS_FORMAT.cTFETC1;\r\n } else {\r\n format = _BASIS_FORMAT.cTFRGB565;\r\n }\r\n }\r\n return format;\r\n }\r\n\r\n /**\r\n * Retrieves information about the basis file eg. dimensions\r\n * @param basisFile the basis file to get the info from\r\n * @returns information about the basis file\r\n */\r\n function GetFileInfo(basisFile: any): BasisFileInfo {\r\n const hasAlpha = basisFile.getHasAlpha();\r\n const imageCount = basisFile.getNumImages();\r\n const images = [];\r\n for (let i = 0; i < imageCount; i++) {\r\n const imageInfo = {\r\n levels: [] as Array<any>,\r\n };\r\n const levelCount = basisFile.getNumLevels(i);\r\n for (let level = 0; level < levelCount; level++) {\r\n const levelInfo = {\r\n width: basisFile.getImageWidth(i, level),\r\n height: basisFile.getImageHeight(i, level),\r\n };\r\n imageInfo.levels.push(levelInfo);\r\n }\r\n images.push(imageInfo);\r\n }\r\n const info = { hasAlpha, images };\r\n return info;\r\n }\r\n\r\n function TranscodeLevel(loadedFile: any, imageIndex: number, levelIndex: number, format: number, convertToRgb565: boolean): Nullable<Uint8Array | Uint16Array> {\r\n const dstSize = loadedFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, format);\r\n let dst: Uint8Array | Uint16Array = new Uint8Array(dstSize);\r\n if (!loadedFile.transcodeImage(dst, imageIndex, levelIndex, format, 1, 0)) {\r\n return null;\r\n }\r\n // If no supported format is found, load as dxt and convert to rgb565\r\n if (convertToRgb565) {\r\n const alignedWidth = (loadedFile.getImageWidth(imageIndex, levelIndex) + 3) & ~3;\r\n const alignedHeight = (loadedFile.getImageHeight(imageIndex, levelIndex) + 3) & ~3;\r\n dst = ConvertDxtToRgb565(dst, 0, alignedWidth, alignedHeight);\r\n }\r\n return dst;\r\n }\r\n\r\n /**\r\n * From https://github.com/BinomialLLC/basis_universal/blob/master/webgl/texture/dxt-to-rgb565.js\r\n * An unoptimized version of dxtToRgb565. Also, the floating\r\n * point math used to compute the colors actually results in\r\n * slightly different colors compared to hardware DXT decoders.\r\n * @param src dxt src pixels\r\n * @param srcByteOffset offset for the start of src\r\n * @param width aligned width of the image\r\n * @param height aligned height of the image\r\n * @returns the converted pixels\r\n */\r\n function ConvertDxtToRgb565(src: Uint8Array, srcByteOffset: number, width: number, height: number): Uint16Array {\r\n const c = new Uint16Array(4);\r\n const dst = new Uint16Array(width * height);\r\n\r\n const blockWidth = width / 4;\r\n const blockHeight = height / 4;\r\n for (let blockY = 0; blockY < blockHeight; blockY++) {\r\n for (let blockX = 0; blockX < blockWidth; blockX++) {\r\n const i = srcByteOffset + 8 * (blockY * blockWidth + blockX);\r\n c[0] = src[i] | (src[i + 1] << 8);\r\n c[1] = src[i + 2] | (src[i + 3] << 8);\r\n c[2] =\r\n ((2 * (c[0] & 0x1f) + 1 * (c[1] & 0x1f)) / 3) |\r\n (((2 * (c[0] & 0x7e0) + 1 * (c[1] & 0x7e0)) / 3) & 0x7e0) |\r\n (((2 * (c[0] & 0xf800) + 1 * (c[1] & 0xf800)) / 3) & 0xf800);\r\n c[3] =\r\n ((2 * (c[1] & 0x1f) + 1 * (c[0] & 0x1f)) / 3) |\r\n (((2 * (c[1] & 0x7e0) + 1 * (c[0] & 0x7e0)) / 3) & 0x7e0) |\r\n (((2 * (c[1] & 0xf800) + 1 * (c[0] & 0xf800)) / 3) & 0xf800);\r\n for (let row = 0; row < 4; row++) {\r\n const m = src[i + 4 + row];\r\n let dstI = (blockY * 4 + row) * width + blockX * 4;\r\n dst[dstI++] = c[m & 0x3];\r\n dst[dstI++] = c[(m >> 2) & 0x3];\r\n dst[dstI++] = c[(m >> 4) & 0x3];\r\n dst[dstI++] = c[(m >> 6) & 0x3];\r\n }\r\n }\r\n }\r\n return dst;\r\n }\r\n}\r\n\r\n/**\r\n * Initialize a web worker with the basis transcoder\r\n * @param worker the worker to initialize\r\n * @param wasmBinary the wasm binary to load into the worker\r\n * @param moduleUrl the url to the basis transcoder module\r\n * @returns a promise that resolves when the worker is initialized\r\n */\r\nexport function initializeWebWorker(worker: Worker, wasmBinary: ArrayBuffer, moduleUrl?: string) {\r\n return new Promise<Worker>((res, reject) => {\r\n const initHandler = (msg: any) => {\r\n if (msg.data.action === \"init\") {\r\n worker!.removeEventListener(\"message\", initHandler);\r\n res(worker!);\r\n } else if (msg.data.action === \"error\") {\r\n reject(msg.data.error || \"error initializing worker\");\r\n }\r\n };\r\n worker.addEventListener(\"message\", initHandler);\r\n // we can use transferable objects here because the worker will own the ArrayBuffer\r\n worker.postMessage({ action: \"init\", url: moduleUrl ? Tools.GetBabylonScriptURL(moduleUrl) : undefined, wasmBinary }, [wasmBinary]);\r\n });\r\n}\r\n"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { InternalTexture } from "../Materials/Textures/internalTexture";
|
|
2
2
|
import type { ThinEngine } from "../Engines/thinEngine";
|
|
3
|
+
import { AutoReleaseWorkerPool } from "./workerPool";
|
|
3
4
|
import type { Nullable } from "../types";
|
|
4
5
|
import type { IDecodedData, IKTX2DecoderOptions } from "../Materials/Textures/ktx2decoderTypes.js";
|
|
6
|
+
import type { AllowedKeys } from "./khronosTextureContainer2Worker";
|
|
5
7
|
/**
|
|
6
8
|
* Class that defines the default KTX2 decoder options.
|
|
7
9
|
*
|
|
@@ -62,12 +64,32 @@ export declare class DefaultKTX2DecoderOptions {
|
|
|
62
64
|
/** @internal */
|
|
63
65
|
_getKTX2DecoderOptions(): IKTX2DecoderOptions;
|
|
64
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Options for the KTX2 decoder
|
|
69
|
+
*/
|
|
70
|
+
export interface IKhronosTextureContainer2Options {
|
|
71
|
+
/**
|
|
72
|
+
* Number of workers to use for async operations. Specify `0` to disable web workers and run synchronously in the current context.
|
|
73
|
+
*/
|
|
74
|
+
numWorkers?: number;
|
|
75
|
+
/**
|
|
76
|
+
* Worker pool to use for async operations. If set, `numWorkers` will be ignored.
|
|
77
|
+
*/
|
|
78
|
+
workerPool?: AutoReleaseWorkerPool;
|
|
79
|
+
/**
|
|
80
|
+
* Optional container for the KTX2 decoder module and its dependencies. If set, the module will be used from this container and the URLs will be ignored.
|
|
81
|
+
*/
|
|
82
|
+
binariesAndModulesContainer?: {
|
|
83
|
+
[key in AllowedKeys]?: ArrayBuffer | any;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
65
86
|
/**
|
|
66
87
|
* Class for loading KTX2 files
|
|
67
88
|
*/
|
|
68
89
|
export declare class KhronosTextureContainer2 {
|
|
69
90
|
private static _WorkerPoolPromise?;
|
|
70
91
|
private static _DecoderModulePromise?;
|
|
92
|
+
private static _KTX2DecoderModule?;
|
|
71
93
|
/**
|
|
72
94
|
* URLs to use when loading the KTX2 decoder module as well as its dependencies
|
|
73
95
|
* If a url is null, the default url is used (pointing to https://preview.babylonjs.com)
|
|
@@ -112,13 +134,13 @@ export declare class KhronosTextureContainer2 {
|
|
|
112
134
|
/**
|
|
113
135
|
* Constructor
|
|
114
136
|
* @param engine The engine to use
|
|
115
|
-
* @param
|
|
137
|
+
* @param numWorkersOrOptions The number of workers for async operations. Specify `0` to disable web workers and run synchronously in the current context.
|
|
116
138
|
*/
|
|
117
|
-
constructor(engine: ThinEngine,
|
|
139
|
+
constructor(engine: ThinEngine, numWorkersOrOptions?: number | IKhronosTextureContainer2Options);
|
|
118
140
|
/**
|
|
119
141
|
* @internal
|
|
120
142
|
*/
|
|
121
|
-
|
|
143
|
+
_uploadAsync(data: ArrayBufferView, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData): Promise<void>;
|
|
122
144
|
protected _createTexture(data: IDecodedData, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData): void;
|
|
123
145
|
/**
|
|
124
146
|
* Checks if the given data starts with a KTX2 file identifier.
|