@babylonjs/core 7.21.4 → 7.22.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.
Files changed (146) hide show
  1. package/Audio/analyser.js +3 -3
  2. package/Audio/analyser.js.map +1 -1
  3. package/Audio/audioSceneComponent.js +7 -7
  4. package/Audio/audioSceneComponent.js.map +1 -1
  5. package/Audio/sound.js +55 -50
  6. package/Audio/sound.js.map +1 -1
  7. package/Audio/soundTrack.js +11 -11
  8. package/Audio/soundTrack.js.map +1 -1
  9. package/Cameras/flyCamera.js +2 -2
  10. package/Cameras/flyCamera.js.map +1 -1
  11. package/Cameras/freeCamera.js +2 -2
  12. package/Cameras/freeCamera.js.map +1 -1
  13. package/Collisions/collisionCoordinator.js +2 -2
  14. package/Collisions/collisionCoordinator.js.map +1 -1
  15. package/Debug/debugLayer.js +2 -2
  16. package/Debug/debugLayer.js.map +1 -1
  17. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +25 -28
  18. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
  19. package/Engines/abstractEngine.d.ts +18 -3
  20. package/Engines/abstractEngine.js +32 -13
  21. package/Engines/abstractEngine.js.map +1 -1
  22. package/Engines/engine.d.ts +0 -7
  23. package/Engines/engine.js +0 -13
  24. package/Engines/engine.js.map +1 -1
  25. package/Engines/nativeEngine.js +3 -9
  26. package/Engines/nativeEngine.js.map +1 -1
  27. package/Engines/thinEngine.d.ts +0 -37
  28. package/Engines/thinEngine.js +2 -40
  29. package/Engines/thinEngine.js.map +1 -1
  30. package/Engines/webgpuEngine.js +1 -2
  31. package/Engines/webgpuEngine.js.map +1 -1
  32. package/Gamepads/gamepadManager.js +2 -2
  33. package/Gamepads/gamepadManager.js.map +1 -1
  34. package/Loading/sceneLoader.d.ts +2 -2
  35. package/Loading/sceneLoader.js +3 -3
  36. package/Loading/sceneLoader.js.map +1 -1
  37. package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
  38. package/Materials/Textures/Loaders/EXR/exrLoader.compression.d.ts +31 -0
  39. package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.d.ts +9 -0
  40. package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.js +454 -0
  41. package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.js.map +1 -0
  42. package/Materials/Textures/Loaders/EXR/exrLoader.compression.js +147 -0
  43. package/Materials/Textures/Loaders/EXR/exrLoader.compression.js.map +1 -0
  44. package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.d.ts +7 -0
  45. package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.js +91 -0
  46. package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.js.map +1 -0
  47. package/Materials/Textures/Loaders/EXR/exrLoader.configuration.d.ts +17 -0
  48. package/Materials/Textures/Loaders/EXR/exrLoader.configuration.js +19 -0
  49. package/Materials/Textures/Loaders/EXR/exrLoader.configuration.js.map +1 -0
  50. package/Materials/Textures/Loaders/EXR/exrLoader.core.d.ts +130 -0
  51. package/Materials/Textures/Loaders/EXR/exrLoader.core.js +452 -0
  52. package/Materials/Textures/Loaders/EXR/exrLoader.core.js.map +1 -0
  53. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.d.ts +25 -0
  54. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js +284 -0
  55. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js.map +1 -0
  56. package/Materials/Textures/Loaders/EXR/exrLoader.header.d.ts +9 -0
  57. package/Materials/Textures/Loaders/EXR/exrLoader.header.js +112 -0
  58. package/Materials/Textures/Loaders/EXR/exrLoader.header.js.map +1 -0
  59. package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.d.ts +75 -0
  60. package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.js +16 -0
  61. package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.js.map +1 -0
  62. package/Materials/Textures/Loaders/EXR/index.d.ts +7 -0
  63. package/Materials/Textures/Loaders/EXR/index.js +8 -0
  64. package/Materials/Textures/Loaders/EXR/index.js.map +1 -0
  65. package/Materials/Textures/Loaders/basisTextureLoader.d.ts +1 -7
  66. package/Materials/Textures/Loaders/basisTextureLoader.js +0 -11
  67. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  68. package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +1 -7
  69. package/Materials/Textures/Loaders/ddsTextureLoader.js +0 -11
  70. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  71. package/Materials/Textures/Loaders/envTextureLoader.d.ts +1 -7
  72. package/Materials/Textures/Loaders/envTextureLoader.js +0 -11
  73. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  74. package/Materials/Textures/Loaders/exrTextureLoader.d.ts +37 -0
  75. package/Materials/Textures/Loaders/exrTextureLoader.js +122 -0
  76. package/Materials/Textures/Loaders/exrTextureLoader.js.map +1 -0
  77. package/Materials/Textures/Loaders/hdrTextureLoader.d.ts +1 -7
  78. package/Materials/Textures/Loaders/hdrTextureLoader.js +0 -11
  79. package/Materials/Textures/Loaders/hdrTextureLoader.js.map +1 -1
  80. package/Materials/Textures/Loaders/index.d.ts +4 -0
  81. package/Materials/Textures/Loaders/index.js +5 -0
  82. package/Materials/Textures/Loaders/index.js.map +1 -1
  83. package/Materials/Textures/{internalTextureLoader.d.ts → Loaders/internalTextureLoader.d.ts} +2 -9
  84. package/Materials/Textures/Loaders/internalTextureLoader.js.map +1 -0
  85. package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +1 -8
  86. package/Materials/Textures/Loaders/ktxTextureLoader.js +0 -13
  87. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  88. package/Materials/Textures/Loaders/textureLoaderManager.d.ts +9 -0
  89. package/Materials/Textures/Loaders/textureLoaderManager.js +32 -0
  90. package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -0
  91. package/Materials/Textures/Loaders/tgaTextureLoader.d.ts +1 -7
  92. package/Materials/Textures/Loaders/tgaTextureLoader.js +0 -11
  93. package/Materials/Textures/Loaders/tgaTextureLoader.js.map +1 -1
  94. package/Materials/Textures/Packer/packer.js +2 -2
  95. package/Materials/Textures/Packer/packer.js.map +1 -1
  96. package/Materials/Textures/index.d.ts +0 -1
  97. package/Materials/Textures/index.js +0 -1
  98. package/Materials/Textures/index.js.map +1 -1
  99. package/Materials/fresnelParameters.js +2 -2
  100. package/Materials/fresnelParameters.js.map +1 -1
  101. package/Materials/materialFlags.js +24 -24
  102. package/Materials/materialFlags.js.map +1 -1
  103. package/Meshes/Node/nodeGeometry.js +2 -2
  104. package/Meshes/Node/nodeGeometry.js.map +1 -1
  105. package/Meshes/abstractMesh.js +2 -2
  106. package/Meshes/abstractMesh.js.map +1 -1
  107. package/Misc/fileTools.d.ts +13 -0
  108. package/Misc/fileTools.js +16 -0
  109. package/Misc/fileTools.js.map +1 -1
  110. package/Offline/database.js +2 -2
  111. package/Offline/database.js.map +1 -1
  112. package/Rendering/boundingBoxRenderer.d.ts +2 -2
  113. package/Rendering/boundingBoxRenderer.js +2 -2
  114. package/Rendering/boundingBoxRenderer.js.map +1 -1
  115. package/Rendering/edgesRenderer.d.ts +7 -2
  116. package/Rendering/edgesRenderer.js +23 -6
  117. package/Rendering/edgesRenderer.js.map +1 -1
  118. package/Rendering/index.d.ts +12 -4
  119. package/Rendering/index.js +14 -4
  120. package/Rendering/index.js.map +1 -1
  121. package/Rendering/outlineRenderer.d.ts +7 -2
  122. package/Rendering/outlineRenderer.js +64 -11
  123. package/Rendering/outlineRenderer.js.map +1 -1
  124. package/ShadersWGSL/line.fragment.d.ts +9 -0
  125. package/ShadersWGSL/line.fragment.js +24 -0
  126. package/ShadersWGSL/line.fragment.js.map +1 -0
  127. package/ShadersWGSL/line.vertex.d.ts +13 -0
  128. package/ShadersWGSL/line.vertex.js +36 -0
  129. package/ShadersWGSL/line.vertex.js.map +1 -0
  130. package/ShadersWGSL/outline.fragment.d.ts +9 -0
  131. package/ShadersWGSL/outline.fragment.js +30 -0
  132. package/ShadersWGSL/outline.fragment.js.map +1 -0
  133. package/ShadersWGSL/outline.vertex.d.ts +19 -0
  134. package/ShadersWGSL/outline.vertex.js +66 -0
  135. package/ShadersWGSL/outline.vertex.js.map +1 -0
  136. package/Sprites/spriteMap.js +4 -4
  137. package/Sprites/spriteMap.js.map +1 -1
  138. package/XR/features/WebXRDepthSensing.js +2 -3
  139. package/XR/features/WebXRDepthSensing.js.map +1 -1
  140. package/XR/webXRExperienceHelper.js +2 -2
  141. package/XR/webXRExperienceHelper.js.map +1 -1
  142. package/package.json +1 -1
  143. package/scene.js +2 -3
  144. package/scene.js.map +1 -1
  145. package/Materials/Textures/internalTextureLoader.js.map +0 -1
  146. /package/Materials/Textures/{internalTextureLoader.js → Loaders/internalTextureLoader.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ktxTextureLoader.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Textures/Loaders/ktxTextureLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { KhronosTextureContainer } from \"../../../Misc/khronosTextureContainer\";\r\nimport { KhronosTextureContainer2 } from \"../../../Misc/khronosTextureContainer2\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { Engine } from \"../../../Engines/engine\";\r\nimport type { InternalTexture } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { IInternalTextureLoader } from \"../../../Materials/Textures/internalTextureLoader\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\n\r\nimport \"../../../Engines/Extensions/engine.cubeTexture\";\r\n\r\nfunction mapSRGBToLinear(format: number): Nullable<number> {\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_S3TC_DXT1_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ETC2:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB8_ETC2;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Implementation of the KTX Texture Loader.\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _KTXTextureLoader implements IInternalTextureLoader {\r\n /**\r\n * Defines whether the loader supports cascade loading the different faces.\r\n */\r\n public readonly supportCascades = false;\r\n\r\n /**\r\n * This returns if the loader support the current file information.\r\n * @param extension defines the file extension of the file being loaded\r\n * @param mimeType defines the optional mime type of the file being loaded\r\n * @returns true if the loader can load the specified file\r\n */\r\n public canLoad(extension: string, mimeType?: string): boolean {\r\n // The \".ktx2\" file extension is still up for debate: https://github.com/KhronosGroup/KTX-Specification/issues/18\r\n return extension.endsWith(\".ktx\") || extension.endsWith(\".ktx2\") || mimeType === \"image/ktx\" || mimeType === \"image/ktx2\";\r\n }\r\n\r\n /**\r\n * Uploads the cube texture data to the WebGL texture. It has already been bound.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param createPolynomials will be true if polynomials have been requested\r\n * @param onLoad defines the callback to trigger once the texture is ready\r\n */\r\n public loadCubeData(data: ArrayBufferView | ArrayBufferView[], texture: InternalTexture, createPolynomials: boolean, onLoad: Nullable<(data?: any) => void>): void {\r\n if (Array.isArray(data)) {\r\n return;\r\n }\r\n\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const engine = texture.getEngine() as Engine;\r\n const ktx = new KhronosTextureContainer(data, 6);\r\n\r\n const loadMipmap = ktx.numberOfMipmapLevels > 1 && texture.generateMipMaps;\r\n\r\n engine._unpackFlipY(true);\r\n\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n\r\n texture.width = ktx.pixelWidth;\r\n texture.height = ktx.pixelHeight;\r\n\r\n engine._setCubeMapTextureParams(texture, loadMipmap, ktx.numberOfMipmapLevels - 1);\r\n texture.isReady = true;\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n }\r\n\r\n /**\r\n * Uploads the 2D texture data to the WebGL texture. It has already been bound once in the callback.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param callback defines the method to call once ready to upload\r\n * @param options\r\n */\r\n public loadData(\r\n data: ArrayBufferView,\r\n texture: InternalTexture,\r\n callback: (width: number, height: number, loadMipmap: boolean, isCompressed: boolean, done: () => void, loadFailed: boolean) => void,\r\n options?: any\r\n ): void {\r\n if (KhronosTextureContainer.IsValid(data)) {\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const ktx = new KhronosTextureContainer(data, 1);\r\n\r\n const mappedFormat = mapSRGBToLinear(ktx.glInternalFormat);\r\n if (mappedFormat) {\r\n texture.format = mappedFormat;\r\n texture._useSRGBBuffer = texture.getEngine()._getUseSRGBBuffer(true, texture.generateMipMaps);\r\n texture._gammaSpace = true;\r\n } else {\r\n texture.format = ktx.glInternalFormat;\r\n }\r\n\r\n callback(\r\n ktx.pixelWidth,\r\n ktx.pixelHeight,\r\n texture.generateMipMaps,\r\n true,\r\n () => {\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n },\r\n ktx.isInvalid\r\n );\r\n } else if (KhronosTextureContainer2.IsValid(data)) {\r\n const ktx2 = new KhronosTextureContainer2(texture.getEngine());\r\n ktx2._uploadAsync(data, texture, options).then(\r\n () => {\r\n callback(texture.width, texture.height, texture.generateMipMaps, true, () => {}, false);\r\n },\r\n (error) => {\r\n Logger.Warn(`Failed to load KTX2 texture data: ${error.message}`);\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n );\r\n } else {\r\n Logger.Error(\"texture missing KTX identifier\");\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n }\r\n}\r\n\r\n// Register the loader.\r\nEngine._TextureLoaders.push(new _KTXTextureLoader());\r\n"]}
1
+ {"version":3,"file":"ktxTextureLoader.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Textures/Loaders/ktxTextureLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { KhronosTextureContainer } from \"../../../Misc/khronosTextureContainer\";\r\nimport { KhronosTextureContainer2 } from \"../../../Misc/khronosTextureContainer2\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport type { InternalTexture } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { IInternalTextureLoader } from \"./internalTextureLoader\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\n\r\nimport \"../../../Engines/Extensions/engine.cubeTexture\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\n\r\nfunction mapSRGBToLinear(format: number): Nullable<number> {\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_S3TC_DXT1_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ETC2:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB8_ETC2;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Implementation of the KTX Texture Loader.\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _KTXTextureLoader implements IInternalTextureLoader {\r\n /**\r\n * Defines whether the loader supports cascade loading the different faces.\r\n */\r\n public readonly supportCascades = false;\r\n\r\n /**\r\n * Uploads the cube texture data to the WebGL texture. It has already been bound.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param createPolynomials will be true if polynomials have been requested\r\n * @param onLoad defines the callback to trigger once the texture is ready\r\n */\r\n public loadCubeData(data: ArrayBufferView | ArrayBufferView[], texture: InternalTexture, createPolynomials: boolean, onLoad: Nullable<(data?: any) => void>): void {\r\n if (Array.isArray(data)) {\r\n return;\r\n }\r\n\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const engine = texture.getEngine() as Engine;\r\n const ktx = new KhronosTextureContainer(data, 6);\r\n\r\n const loadMipmap = ktx.numberOfMipmapLevels > 1 && texture.generateMipMaps;\r\n\r\n engine._unpackFlipY(true);\r\n\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n\r\n texture.width = ktx.pixelWidth;\r\n texture.height = ktx.pixelHeight;\r\n\r\n engine._setCubeMapTextureParams(texture, loadMipmap, ktx.numberOfMipmapLevels - 1);\r\n texture.isReady = true;\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n }\r\n\r\n /**\r\n * Uploads the 2D texture data to the WebGL texture. It has already been bound once in the callback.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param callback defines the method to call once ready to upload\r\n * @param options\r\n */\r\n public loadData(\r\n data: ArrayBufferView,\r\n texture: InternalTexture,\r\n callback: (width: number, height: number, loadMipmap: boolean, isCompressed: boolean, done: () => void, loadFailed: boolean) => void,\r\n options?: any\r\n ): void {\r\n if (KhronosTextureContainer.IsValid(data)) {\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const ktx = new KhronosTextureContainer(data, 1);\r\n\r\n const mappedFormat = mapSRGBToLinear(ktx.glInternalFormat);\r\n if (mappedFormat) {\r\n texture.format = mappedFormat;\r\n texture._useSRGBBuffer = texture.getEngine()._getUseSRGBBuffer(true, texture.generateMipMaps);\r\n texture._gammaSpace = true;\r\n } else {\r\n texture.format = ktx.glInternalFormat;\r\n }\r\n\r\n callback(\r\n ktx.pixelWidth,\r\n ktx.pixelHeight,\r\n texture.generateMipMaps,\r\n true,\r\n () => {\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n },\r\n ktx.isInvalid\r\n );\r\n } else if (KhronosTextureContainer2.IsValid(data)) {\r\n const ktx2 = new KhronosTextureContainer2(texture.getEngine());\r\n ktx2._uploadAsync(data, texture, options).then(\r\n () => {\r\n callback(texture.width, texture.height, texture.generateMipMaps, true, () => {}, false);\r\n },\r\n (error) => {\r\n Logger.Warn(`Failed to load KTX2 texture data: ${error.message}`);\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n );\r\n } else {\r\n Logger.Error(\"texture missing KTX identifier\");\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n }\r\n}\r\n"]}
@@ -0,0 +1,9 @@
1
+ import type { Nullable } from "../../../types.js";
2
+ import type { IInternalTextureLoader } from "./internalTextureLoader";
3
+ /**
4
+ * Function used to get the correct texture loader for a specific extension.
5
+ * @param extension defines the file extension of the file being loaded
6
+ * @param mimeType defines the optional mime type of the file being loaded
7
+ * @returns the IInternalTextureLoader or null if it wasn't found
8
+ */
9
+ export declare function _GetCompatibleTextureLoader(extension: string, mimeType?: string): Nullable<Promise<IInternalTextureLoader>>;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Function used to get the correct texture loader for a specific extension.
3
+ * @param extension defines the file extension of the file being loaded
4
+ * @param mimeType defines the optional mime type of the file being loaded
5
+ * @returns the IInternalTextureLoader or null if it wasn't found
6
+ */
7
+ export function _GetCompatibleTextureLoader(extension, mimeType) {
8
+ if (extension.endsWith(".dds")) {
9
+ return import("./ddsTextureLoader.js").then((module) => new module._DDSTextureLoader());
10
+ }
11
+ if (extension.endsWith(".basis")) {
12
+ return import("./basisTextureLoader.js").then((module) => new module._BasisTextureLoader());
13
+ }
14
+ if (extension.endsWith(".env")) {
15
+ return import("./envTextureLoader.js").then((module) => new module._ENVTextureLoader());
16
+ }
17
+ if (extension.endsWith(".hdr")) {
18
+ return import("./hdrTextureLoader.js").then((module) => new module._HDRTextureLoader());
19
+ }
20
+ // The ".ktx2" file extension is still up for debate: https://github.com/KhronosGroup/KTX-Specification/issues/18
21
+ if (extension.endsWith(".ktx") || extension.endsWith(".ktx2") || mimeType === "image/ktx" || mimeType === "image/ktx2") {
22
+ return import("./ktxTextureLoader.js").then((module) => new module._KTXTextureLoader());
23
+ }
24
+ if (extension.endsWith(".tga")) {
25
+ return import("./tgaTextureLoader.js").then((module) => new module._TGATextureLoader());
26
+ }
27
+ if (extension.endsWith(".exr")) {
28
+ return import("./exrTextureLoader.js").then((module) => new module._ExrTextureLoader());
29
+ }
30
+ return null;
31
+ }
32
+ //# sourceMappingURL=textureLoaderManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textureLoaderManager.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Textures/Loaders/textureLoaderManager.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,SAAiB,EAAE,QAAiB;IAC5E,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC5B,OAAO,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACxF;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAC9B,OAAO,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;KAC5F;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC5B,OAAO,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACxF;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC5B,OAAO,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACxF;IACD,iHAAiH;IACjH,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,YAAY,EAAE;QACpH,OAAO,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACxF;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC5B,OAAO,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACxF;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC5B,OAAO,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACxF;IAED,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { IInternalTextureLoader } from \"./internalTextureLoader\";\r\n\r\n/**\r\n * Function used to get the correct texture loader for a specific extension.\r\n * @param extension defines the file extension of the file being loaded\r\n * @param mimeType defines the optional mime type of the file being loaded\r\n * @returns the IInternalTextureLoader or null if it wasn't found\r\n */\r\nexport function _GetCompatibleTextureLoader(extension: string, mimeType?: string): Nullable<Promise<IInternalTextureLoader>> {\r\n if (extension.endsWith(\".dds\")) {\r\n return import(\"./ddsTextureLoader\").then((module) => new module._DDSTextureLoader());\r\n }\r\n if (extension.endsWith(\".basis\")) {\r\n return import(\"./basisTextureLoader\").then((module) => new module._BasisTextureLoader());\r\n }\r\n if (extension.endsWith(\".env\")) {\r\n return import(\"./envTextureLoader\").then((module) => new module._ENVTextureLoader());\r\n }\r\n if (extension.endsWith(\".hdr\")) {\r\n return import(\"./hdrTextureLoader\").then((module) => new module._HDRTextureLoader());\r\n }\r\n // The \".ktx2\" file extension is still up for debate: https://github.com/KhronosGroup/KTX-Specification/issues/18\r\n if (extension.endsWith(\".ktx\") || extension.endsWith(\".ktx2\") || mimeType === \"image/ktx\" || mimeType === \"image/ktx2\") {\r\n return import(\"./ktxTextureLoader\").then((module) => new module._KTXTextureLoader());\r\n }\r\n if (extension.endsWith(\".tga\")) {\r\n return import(\"./tgaTextureLoader\").then((module) => new module._TGATextureLoader());\r\n }\r\n if (extension.endsWith(\".exr\")) {\r\n return import(\"./exrTextureLoader\").then((module) => new module._ExrTextureLoader());\r\n }\r\n\r\n return null;\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InternalTexture } from "../../../Materials/Textures/internalTexture";
2
- import type { IInternalTextureLoader } from "../../../Materials/Textures/internalTextureLoader";
2
+ import type { IInternalTextureLoader } from "./internalTextureLoader";
3
3
  /**
4
4
  * Implementation of the TGA Texture Loader.
5
5
  * @internal
@@ -9,12 +9,6 @@ export declare class _TGATextureLoader implements IInternalTextureLoader {
9
9
  * Defines whether the loader supports cascade loading the different faces.
10
10
  */
11
11
  readonly supportCascades = false;
12
- /**
13
- * This returns if the loader support the current file information.
14
- * @param extension defines the file extension of the file being loaded
15
- * @returns true if the loader can load the specified file
16
- */
17
- canLoad(extension: string): boolean;
18
12
  /**
19
13
  * Uploads the cube texture data to the WebGL texture. It has already been bound.
20
14
  */
@@ -1,5 +1,4 @@
1
1
  import { GetTGAHeader, UploadContent } from "../../../Misc/tga.js";
2
- import { Engine } from "../../../Engines/engine.js";
3
2
  /**
4
3
  * Implementation of the TGA Texture Loader.
5
4
  * @internal
@@ -12,14 +11,6 @@ export class _TGATextureLoader {
12
11
  */
13
12
  this.supportCascades = false;
14
13
  }
15
- /**
16
- * This returns if the loader support the current file information.
17
- * @param extension defines the file extension of the file being loaded
18
- * @returns true if the loader can load the specified file
19
- */
20
- canLoad(extension) {
21
- return extension.endsWith(".tga");
22
- }
23
14
  /**
24
15
  * Uploads the cube texture data to the WebGL texture. It has already been bound.
25
16
  */
@@ -41,6 +32,4 @@ export class _TGATextureLoader {
41
32
  });
42
33
  }
43
34
  }
44
- // Register the loader.
45
- Engine._TextureLoaders.push(new _TGATextureLoader());
46
35
  //# sourceMappingURL=tgaTextureLoader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tgaTextureLoader.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Textures/Loaders/tgaTextureLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAIjD;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,iBAAiB;IAA9B;QACI;;WAEG;QACa,oBAAe,GAAG,KAAK,CAAC;IAqC5C,CAAC;IAnCG;;;;OAIG;IACI,OAAO,CAAC,SAAiB;QAC5B,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,YAAY;QACf,4CAA4C;QAC5C,MAAM,6BAA6B,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACI,QAAQ,CACX,IAAqB,EACrB,OAAwB,EACxB,QAA+G;QAE/G,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE;YACvE,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,uBAAuB;AACvB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC","sourcesContent":["import { GetTGAHeader, UploadContent } from \"../../../Misc/tga\";\r\nimport { Engine } from \"../../../Engines/engine\";\r\nimport type { InternalTexture } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { IInternalTextureLoader } from \"../../../Materials/Textures/internalTextureLoader\";\r\n\r\n/**\r\n * Implementation of the TGA Texture Loader.\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _TGATextureLoader implements IInternalTextureLoader {\r\n /**\r\n * Defines whether the loader supports cascade loading the different faces.\r\n */\r\n public readonly supportCascades = false;\r\n\r\n /**\r\n * This returns if the loader support the current file information.\r\n * @param extension defines the file extension of the file being loaded\r\n * @returns true if the loader can load the specified file\r\n */\r\n public canLoad(extension: string): boolean {\r\n return extension.endsWith(\".tga\");\r\n }\r\n\r\n /**\r\n * Uploads the cube texture data to the WebGL texture. It has already been bound.\r\n */\r\n public loadCubeData(): void {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \".env not supported in Cube.\";\r\n }\r\n\r\n /**\r\n * Uploads the 2D texture data to the WebGL texture. It has already been bound once in the callback.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param callback defines the method to call once ready to upload\r\n */\r\n public loadData(\r\n data: ArrayBufferView,\r\n texture: InternalTexture,\r\n callback: (width: number, height: number, loadMipmap: boolean, isCompressed: boolean, done: () => void) => void\r\n ): void {\r\n const bytes = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\r\n\r\n const header = GetTGAHeader(bytes);\r\n callback(header.width, header.height, texture.generateMipMaps, false, () => {\r\n UploadContent(texture, bytes);\r\n });\r\n }\r\n}\r\n\r\n// Register the loader.\r\nEngine._TextureLoaders.push(new _TGATextureLoader());\r\n"]}
1
+ {"version":3,"file":"tgaTextureLoader.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Textures/Loaders/tgaTextureLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIhE;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,iBAAiB;IAA9B;QACI;;WAEG;QACa,oBAAe,GAAG,KAAK,CAAC;IA4B5C,CAAC;IA1BG;;OAEG;IACI,YAAY;QACf,4CAA4C;QAC5C,MAAM,6BAA6B,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACI,QAAQ,CACX,IAAqB,EACrB,OAAwB,EACxB,QAA+G;QAE/G,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE;YACvE,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ","sourcesContent":["import { GetTGAHeader, UploadContent } from \"../../../Misc/tga\";\r\nimport type { InternalTexture } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { IInternalTextureLoader } from \"./internalTextureLoader\";\r\n\r\n/**\r\n * Implementation of the TGA Texture Loader.\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _TGATextureLoader implements IInternalTextureLoader {\r\n /**\r\n * Defines whether the loader supports cascade loading the different faces.\r\n */\r\n public readonly supportCascades = false;\r\n\r\n /**\r\n * Uploads the cube texture data to the WebGL texture. It has already been bound.\r\n */\r\n public loadCubeData(): void {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \".env not supported in Cube.\";\r\n }\r\n\r\n /**\r\n * Uploads the 2D texture data to the WebGL texture. It has already been bound once in the callback.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param callback defines the method to call once ready to upload\r\n */\r\n public loadData(\r\n data: ArrayBufferView,\r\n texture: InternalTexture,\r\n callback: (width: number, height: number, loadMipmap: boolean, isCompressed: boolean, done: () => void) => void\r\n ): void {\r\n const bytes = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\r\n\r\n const header = GetTGAHeader(bytes);\r\n callback(header.width, header.height, texture.generateMipMaps, false, () => {\r\n UploadContent(texture, bytes);\r\n });\r\n }\r\n}\r\n"]}
@@ -1,4 +1,3 @@
1
- import { Engine } from "../../../Engines/engine.js";
2
1
  import { VertexBuffer } from "../../../Buffers/buffer.js";
3
2
  import { Texture } from "../texture.js";
4
3
  import { DynamicTexture } from "../dynamicTexture.js";
@@ -7,6 +6,7 @@ import { Color3, Color4 } from "../../../Maths/math.color.js";
7
6
  import { TexturePackerFrame } from "./frame.js";
8
7
  import { Logger } from "../../../Misc/logger.js";
9
8
  import { Tools } from "../../../Misc/tools.js";
9
+
10
10
  /**
11
11
  * This is a support class that generates a series of packed texture sets.
12
12
  * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction
@@ -81,7 +81,7 @@ export class TexturePacker {
81
81
  for (let i = 0; i < sKeys.length; i++) {
82
82
  const setName = sKeys[i];
83
83
  const dt = new DynamicTexture(this.name + ".TexturePack." + setName + "Set", { width: dtSize.x, height: dtSize.y }, this.scene, true, //Generate Mips
84
- Texture.TRILINEAR_SAMPLINGMODE, Engine.TEXTUREFORMAT_RGBA);
84
+ Texture.TRILINEAR_SAMPLINGMODE, 5);
85
85
  const dtx = dt.getContext();
86
86
  dtx.fillStyle = "rgba(0,0,0,0)";
87
87
  dtx.fillRect(0, 0, dtSize.x, dtSize.y);
@@ -1 +1 @@
1
- {"version":3,"file":"packer.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Textures/Packer/packer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from \"../../../Engines/engine\";\r\nimport type { AbstractMesh } from \"../../../Meshes/abstractMesh\";\r\nimport { VertexBuffer } from \"../../../Buffers/buffer\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport type { Material } from \"../../material\";\r\nimport { Texture } from \"../texture\";\r\nimport { DynamicTexture } from \"../dynamicTexture\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { Vector2 } from \"../../../Maths/math.vector\";\r\nimport { Color3, Color4 } from \"../../../Maths/math.color\";\r\nimport { TexturePackerFrame } from \"./frame\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { Tools } from \"../../../Misc/tools\";\r\n\r\n/**\r\n * Defines the basic options interface of a TexturePacker\r\n */\r\nexport interface ITexturePackerOptions {\r\n /**\r\n * Custom targets for the channels of a texture packer. Default is all the channels of the Standard Material\r\n */\r\n map?: string[];\r\n\r\n /**\r\n * the UV input targets, as a single value for all meshes. Defaults to VertexBuffer.UVKind\r\n */\r\n uvsIn?: string;\r\n\r\n /**\r\n * the UV output targets, as a single value for all meshes. Defaults to VertexBuffer.UVKind\r\n */\r\n uvsOut?: string;\r\n\r\n /**\r\n * number representing the layout style. Defaults to LAYOUT_STRIP\r\n */\r\n layout?: number;\r\n\r\n /**\r\n * number of columns if using custom column count layout(2). This defaults to 4.\r\n */\r\n colnum?: number;\r\n\r\n /**\r\n * flag to update the input meshes to the new packed texture after compilation. Defaults to true.\r\n */\r\n updateInputMeshes?: boolean;\r\n\r\n /**\r\n * boolean flag to dispose all the source textures. Defaults to true.\r\n */\r\n disposeSources?: boolean;\r\n\r\n /**\r\n * Fills the blank cells in a set to the customFillColor. Defaults to true.\r\n */\r\n fillBlanks?: boolean;\r\n\r\n /**\r\n * string value representing the context fill style color. Defaults to 'black'.\r\n */\r\n customFillColor?: string;\r\n\r\n /**\r\n * Width and Height Value of each Frame in the TexturePacker Sets\r\n */\r\n frameSize?: number;\r\n\r\n /**\r\n * Ratio of the value to add padding wise to each cell. Defaults to 0.0115\r\n */\r\n paddingRatio?: number;\r\n\r\n /**\r\n * Number that declares the fill method for the padding gutter.\r\n */\r\n paddingMode?: number;\r\n\r\n /**\r\n * If in SUBUV_COLOR padding mode what color to use.\r\n */\r\n paddingColor?: Color3 | Color4;\r\n}\r\n\r\n/**\r\n * Defines the basic interface of a TexturePacker JSON File\r\n */\r\nexport interface ITexturePackerJSON {\r\n /**\r\n * The frame ID\r\n */\r\n name: string;\r\n\r\n /**\r\n * The base64 channel data\r\n */\r\n sets: any;\r\n\r\n /**\r\n * The options of the Packer\r\n */\r\n options: ITexturePackerOptions;\r\n\r\n /**\r\n * The frame data of the Packer\r\n */\r\n frames: Array<number>;\r\n}\r\n\r\n/**\r\n * This is a support class that generates a series of packed texture sets.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction\r\n */\r\nexport class TexturePacker {\r\n /** Packer Layout Constant 0 */\r\n public static readonly LAYOUT_STRIP = 0;\r\n /** Packer Layout Constant 1 */\r\n public static readonly LAYOUT_POWER2 = 1;\r\n /** Packer Layout Constant 2 */\r\n public static readonly LAYOUT_COLNUM = 2;\r\n\r\n /** Packer Layout Constant 0 */\r\n public static readonly SUBUV_WRAP = 0;\r\n /** Packer Layout Constant 1 */\r\n public static readonly SUBUV_EXTEND = 1;\r\n /** Packer Layout Constant 2 */\r\n public static readonly SUBUV_COLOR = 2;\r\n\r\n /** The Name of the Texture Package */\r\n public name: string;\r\n\r\n /** The scene scope of the TexturePacker */\r\n public scene: Scene;\r\n\r\n /** The Meshes to target */\r\n public meshes: AbstractMesh[];\r\n\r\n /** Arguments passed with the Constructor */\r\n public options: ITexturePackerOptions;\r\n\r\n /** The promise that is started upon initialization */\r\n public promise: Nullable<Promise<TexturePacker | string>>;\r\n\r\n /** The Container object for the channel sets that are generated */\r\n public sets: object;\r\n\r\n /** The Container array for the frames that are generated */\r\n public frames: TexturePackerFrame[];\r\n\r\n /** The expected number of textures the system is parsing. */\r\n private _expecting: number;\r\n\r\n /** The padding value from Math.ceil(frameSize * paddingRatio) */\r\n private _paddingValue: number;\r\n\r\n /**\r\n * Initializes a texture package series from an array of meshes or a single mesh.\r\n * @param name The name of the package\r\n * @param meshes The target meshes to compose the package from\r\n * @param options The arguments that texture packer should follow while building.\r\n * @param scene The scene which the textures are scoped to.\r\n * @returns TexturePacker\r\n */\r\n constructor(name: string, meshes: AbstractMesh[], options: ITexturePackerOptions, scene: Scene) {\r\n this.name = name;\r\n this.meshes = meshes;\r\n this.scene = scene;\r\n\r\n /**\r\n * Run through the options and set what ever defaults are needed that where not declared.\r\n */\r\n this.options = options;\r\n this.options.map = this.options.map ?? [\r\n \"ambientTexture\",\r\n \"bumpTexture\",\r\n \"diffuseTexture\",\r\n \"emissiveTexture\",\r\n \"lightmapTexture\",\r\n \"opacityTexture\",\r\n \"reflectionTexture\",\r\n \"refractionTexture\",\r\n \"specularTexture\",\r\n ];\r\n\r\n this.options.uvsIn = this.options.uvsIn ?? VertexBuffer.UVKind;\r\n this.options.uvsOut = this.options.uvsOut ?? VertexBuffer.UVKind;\r\n this.options.layout = this.options.layout ?? TexturePacker.LAYOUT_STRIP;\r\n\r\n if (this.options.layout === TexturePacker.LAYOUT_COLNUM) {\r\n this.options.colnum = this.options.colnum ?? 8;\r\n }\r\n\r\n this.options.updateInputMeshes = this.options.updateInputMeshes ?? true;\r\n this.options.disposeSources = this.options.disposeSources ?? true;\r\n this._expecting = 0;\r\n\r\n this.options.fillBlanks = this.options.fillBlanks ?? true;\r\n\r\n if (this.options.fillBlanks === true) {\r\n this.options.customFillColor = this.options.customFillColor ?? \"black\";\r\n }\r\n\r\n this.options.frameSize = this.options.frameSize ?? 256;\r\n this.options.paddingRatio = this.options.paddingRatio ?? 0.0115;\r\n\r\n this._paddingValue = Math.ceil(this.options.frameSize * this.options.paddingRatio);\r\n\r\n //Make it an even padding Number.\r\n if (this._paddingValue % 2 !== 0) {\r\n this._paddingValue++;\r\n }\r\n\r\n this.options.paddingMode = this.options.paddingMode ?? TexturePacker.SUBUV_WRAP;\r\n\r\n if (this.options.paddingMode === TexturePacker.SUBUV_COLOR) {\r\n this.options.paddingColor = this.options.paddingColor ?? new Color4(0, 0, 0, 1.0);\r\n }\r\n\r\n this.sets = {};\r\n this.frames = [];\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Starts the package process\r\n * @param resolve The promises resolution function\r\n */\r\n private _createFrames(resolve: () => void) {\r\n const dtSize = this._calculateSize();\r\n const dtUnits = new Vector2(1, 1).divide(dtSize);\r\n let doneCount = 0;\r\n const expecting = this._expecting;\r\n const meshLength = this.meshes.length;\r\n\r\n const sKeys = Object.keys(this.sets);\r\n for (let i = 0; i < sKeys.length; i++) {\r\n const setName = sKeys[i];\r\n\r\n const dt = new DynamicTexture(\r\n this.name + \".TexturePack.\" + setName + \"Set\",\r\n { width: dtSize.x, height: dtSize.y },\r\n this.scene,\r\n true, //Generate Mips\r\n Texture.TRILINEAR_SAMPLINGMODE,\r\n Engine.TEXTUREFORMAT_RGBA\r\n );\r\n\r\n const dtx = dt.getContext();\r\n dtx.fillStyle = \"rgba(0,0,0,0)\";\r\n dtx.fillRect(0, 0, dtSize.x, dtSize.y);\r\n dt.update(false);\r\n (this.sets as any)[setName] = dt;\r\n }\r\n\r\n const baseSize = this.options.frameSize || 256;\r\n const padding = this._paddingValue;\r\n const tcs = baseSize + 2 * padding;\r\n\r\n const done = () => {\r\n this._calculateMeshUVFrames(baseSize, padding, dtSize, dtUnits, this.options.updateInputMeshes || false);\r\n };\r\n\r\n //Update the Textures\r\n for (let i = 0; i < meshLength; i++) {\r\n const m = this.meshes[i];\r\n const mat = m.material;\r\n\r\n //Check if the material has the texture\r\n //Create a temporary canvas the same size as 1 frame\r\n //Then apply the texture to the center and the 8 offsets\r\n //Copy the Context and place in the correct frame on the DT\r\n\r\n for (let j = 0; j < sKeys.length; j++) {\r\n const tempTexture = new DynamicTexture(\"temp\", tcs, this.scene, true);\r\n const tcx = tempTexture.getContext();\r\n const offset = this._getFrameOffset(i);\r\n\r\n const updateDt = () => {\r\n doneCount++;\r\n tempTexture.update(false);\r\n const iDat = tcx.getImageData(0, 0, tcs, tcs);\r\n\r\n //Update Set\r\n const dt = (this.sets as any)[setName];\r\n const dtx = dt.getContext();\r\n dtx.putImageData(iDat, dtSize.x * offset.x, dtSize.y * offset.y);\r\n tempTexture.dispose();\r\n dt.update(false);\r\n if (doneCount == expecting) {\r\n done();\r\n resolve();\r\n return;\r\n }\r\n };\r\n\r\n const setName = sKeys[j] || \"_blank\";\r\n if (!mat || (mat as any)[setName] === null) {\r\n tcx.fillStyle = \"rgba(0,0,0,0)\";\r\n\r\n if (this.options.fillBlanks) {\r\n tcx.fillStyle = this.options.customFillColor as string;\r\n }\r\n\r\n tcx.fillRect(0, 0, tcs, tcs);\r\n\r\n updateDt();\r\n } else {\r\n const setTexture = (mat as any)[setName];\r\n const img = new Image();\r\n\r\n if (setTexture instanceof DynamicTexture) {\r\n img.src = setTexture.getContext().canvas.toDataURL(\"image/png\");\r\n } else {\r\n img.src = setTexture!.url;\r\n }\r\n Tools.SetCorsBehavior(img.src, img);\r\n\r\n img.onload = () => {\r\n tcx.fillStyle = \"rgba(0,0,0,0)\";\r\n tcx.fillRect(0, 0, tcs, tcs);\r\n tempTexture.update(false);\r\n\r\n tcx.setTransform(1, 0, 0, -1, 0, 0);\r\n const cellOffsets = [0, 0, 1, 0, 1, 1, 0, 1, -1, 1, -1, 0, -1 - 1, 0, -1, 1, -1];\r\n\r\n switch (this.options.paddingMode) {\r\n //Wrap Mode\r\n case 0:\r\n for (let i = 0; i < 9; i++) {\r\n tcx.drawImage(\r\n img,\r\n 0,\r\n 0,\r\n img.width,\r\n img.height,\r\n padding + baseSize * cellOffsets[i],\r\n padding + baseSize * cellOffsets[i + 1] - tcs,\r\n baseSize,\r\n baseSize\r\n );\r\n }\r\n break;\r\n //Extend Mode\r\n case 1:\r\n for (let i = 0; i < padding; i++) {\r\n tcx.drawImage(img, 0, 0, img.width, img.height, i + baseSize * cellOffsets[0], padding - tcs, baseSize, baseSize);\r\n\r\n tcx.drawImage(img, 0, 0, img.width, img.height, padding * 2 - i, padding - tcs, baseSize, baseSize);\r\n\r\n tcx.drawImage(img, 0, 0, img.width, img.height, padding, i - tcs, baseSize, baseSize);\r\n\r\n tcx.drawImage(img, 0, 0, img.width, img.height, padding, padding * 2 - i - tcs, baseSize, baseSize);\r\n }\r\n\r\n tcx.drawImage(img, 0, 0, img.width, img.height, padding + baseSize * cellOffsets[0], padding + baseSize * cellOffsets[1] - tcs, baseSize, baseSize);\r\n\r\n break;\r\n //Color Mode\r\n case 2:\r\n tcx.fillStyle = (this.options.paddingColor || Color3.Black()).toHexString();\r\n tcx.fillRect(0, 0, tcs, -tcs);\r\n tcx.clearRect(padding, padding, baseSize, baseSize);\r\n tcx.drawImage(img, 0, 0, img.width, img.height, padding + baseSize * cellOffsets[0], padding + baseSize * cellOffsets[1] - tcs, baseSize, baseSize);\r\n\r\n break;\r\n }\r\n\r\n tcx.setTransform(1, 0, 0, 1, 0, 0);\r\n\r\n updateDt();\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the Size of the Channel Sets\r\n * @returns Vector2\r\n */\r\n private _calculateSize(): Vector2 {\r\n const meshLength: number = this.meshes.length || 0;\r\n const baseSize: number = this.options.frameSize || 0;\r\n const padding: number = this._paddingValue || 0;\r\n\r\n switch (this.options.layout) {\r\n case 0: {\r\n //STRIP_LAYOUT\r\n return new Vector2(baseSize * meshLength + 2 * padding * meshLength, baseSize + 2 * padding);\r\n }\r\n case 1: {\r\n //POWER2\r\n const sqrtCount = Math.max(2, Math.ceil(Math.sqrt(meshLength)));\r\n const size = baseSize * sqrtCount + 2 * padding * sqrtCount;\r\n return new Vector2(size, size);\r\n }\r\n case 2: {\r\n //COLNUM\r\n const cols = this.options.colnum || 1;\r\n const rowCnt = Math.max(1, Math.ceil(meshLength / cols));\r\n return new Vector2(baseSize * cols + 2 * padding * cols, baseSize * rowCnt + 2 * padding * rowCnt);\r\n }\r\n }\r\n\r\n return Vector2.Zero();\r\n }\r\n\r\n /**\r\n * Calculates the UV data for the frames.\r\n * @param baseSize the base frameSize\r\n * @param padding the base frame padding\r\n * @param dtSize size of the Dynamic Texture for that channel\r\n * @param dtUnits is 1/dtSize\r\n * @param update flag to update the input meshes\r\n */\r\n private _calculateMeshUVFrames(baseSize: number, padding: number, dtSize: Vector2, dtUnits: Vector2, update: boolean) {\r\n const meshLength = this.meshes.length;\r\n\r\n for (let i = 0; i < meshLength; i++) {\r\n const m = this.meshes[i];\r\n\r\n const scale = new Vector2(baseSize / dtSize.x, baseSize / dtSize.y);\r\n\r\n const pOffset: Vector2 = dtUnits.clone().scale(padding);\r\n const frameOffset: Vector2 = this._getFrameOffset(i);\r\n const offset: Vector2 = frameOffset.add(pOffset);\r\n\r\n const frame: TexturePackerFrame = new TexturePackerFrame(i, scale, offset);\r\n\r\n this.frames.push(frame);\r\n\r\n //Update Output UVs\r\n if (update) {\r\n this._updateMeshUV(m, i);\r\n this._updateTextureReferences(m);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the frames Offset.\r\n * @param index of the frame\r\n * @returns Vector2\r\n */\r\n private _getFrameOffset(index: number): Vector2 {\r\n const meshLength = this.meshes.length;\r\n let uvStep, yStep, xStep;\r\n\r\n switch (this.options.layout) {\r\n case 0: {\r\n //STRIP_LAYOUT\r\n uvStep = 1 / meshLength;\r\n return new Vector2(index * uvStep, 0);\r\n }\r\n case 1: {\r\n //POWER2\r\n const sqrtCount = Math.max(2, Math.ceil(Math.sqrt(meshLength)));\r\n yStep = Math.floor(index / sqrtCount);\r\n xStep = index - yStep * sqrtCount;\r\n uvStep = 1 / sqrtCount;\r\n return new Vector2(xStep * uvStep, yStep * uvStep);\r\n }\r\n case 2: {\r\n //COLNUM\r\n const cols = this.options.colnum || 1;\r\n const rowCnt = Math.max(1, Math.ceil(meshLength / cols));\r\n xStep = Math.floor(index / rowCnt);\r\n yStep = index - xStep * rowCnt;\r\n uvStep = new Vector2(1 / cols, 1 / rowCnt);\r\n return new Vector2(xStep * uvStep.x, yStep * uvStep.y);\r\n }\r\n }\r\n\r\n return Vector2.Zero();\r\n }\r\n\r\n /**\r\n * Updates a Mesh to the frame data\r\n * @param mesh that is the target\r\n * @param frameID or the frame index\r\n */\r\n private _updateMeshUV(mesh: AbstractMesh, frameID: number): void {\r\n const frame: TexturePackerFrame = (this.frames as any)[frameID];\r\n const uvIn = mesh.getVerticesData(this.options.uvsIn || VertexBuffer.UVKind);\r\n const uvOut = [];\r\n let toCount = 0;\r\n\r\n if (uvIn!.length) {\r\n toCount = uvIn!.length || 0;\r\n }\r\n\r\n for (let i = 0; i < toCount; i += 2) {\r\n uvOut.push((uvIn as any)[i] * frame.scale.x + frame.offset.x, (uvIn as any)[i + 1] * frame.scale.y + frame.offset.y);\r\n }\r\n\r\n mesh.setVerticesData(this.options.uvsOut || VertexBuffer.UVKind, uvOut);\r\n }\r\n\r\n /**\r\n * Updates a Meshes materials to use the texture packer channels\r\n * @param m is the mesh to target\r\n * @param force all channels on the packer to be set.\r\n */\r\n private _updateTextureReferences(m: AbstractMesh, force: boolean = false): void {\r\n const mat = m.material;\r\n const sKeys = Object.keys(this.sets);\r\n\r\n const _dispose = (_t: any) => {\r\n if (_t.dispose) {\r\n _t.dispose();\r\n }\r\n };\r\n\r\n for (let i = 0; i < sKeys.length; i++) {\r\n const setName = sKeys[i];\r\n if (!force) {\r\n if (!mat) {\r\n return;\r\n }\r\n if ((mat as any)[setName] !== null) {\r\n _dispose((mat as any)[setName]);\r\n (mat as any)[setName] = (this.sets as any)[setName];\r\n }\r\n } else {\r\n if ((mat as any)[setName] !== null) {\r\n _dispose((mat as any)[setName]);\r\n }\r\n (mat as any)[setName] = (this.sets as any)[setName];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Public method to set a Mesh to a frame\r\n * @param m that is the target\r\n * @param frameID or the frame index\r\n * @param updateMaterial trigger for if the Meshes attached Material be updated?\r\n */\r\n public setMeshToFrame(m: AbstractMesh, frameID: number, updateMaterial: boolean = false): void {\r\n this._updateMeshUV(m, frameID);\r\n if (updateMaterial) {\r\n this._updateTextureReferences(m, true);\r\n }\r\n }\r\n\r\n /**\r\n * Starts the async promise to compile the texture packer.\r\n * @returns Promise<void>\r\n */\r\n public processAsync(): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n if (this.meshes.length === 0) {\r\n //Must be a JSON load!\r\n resolve();\r\n return;\r\n }\r\n let done = 0;\r\n const doneCheck = (mat: Material) => {\r\n done++;\r\n //Check Status of all Textures on all meshes, till they are ready.\r\n if (this.options.map) {\r\n for (let j = 0; j < this.options.map.length; j++) {\r\n const index: string = this.options.map[j];\r\n const t: Texture | DynamicTexture = (mat as any)[index];\r\n\r\n if (t !== null) {\r\n if (!(this.sets as any)[this.options.map[j]]) {\r\n (this.sets as any)[this.options.map[j]] = true;\r\n }\r\n\r\n this._expecting++;\r\n }\r\n }\r\n\r\n if (done === this.meshes.length) {\r\n this._createFrames(resolve);\r\n }\r\n }\r\n };\r\n\r\n for (let i = 0; i < this.meshes.length; i++) {\r\n const mesh = this.meshes[i];\r\n const material: Nullable<Material> = mesh.material;\r\n\r\n if (!material) {\r\n done++;\r\n if (done === this.meshes.length) {\r\n return this._createFrames(resolve);\r\n }\r\n continue;\r\n }\r\n\r\n material.forceCompilationAsync(mesh).then(() => {\r\n doneCheck(material as Material);\r\n });\r\n }\r\n } catch (e) {\r\n return reject(e);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Disposes all textures associated with this packer\r\n */\r\n public dispose(): void {\r\n const sKeys = Object.keys(this.sets);\r\n for (let i = 0; i < sKeys.length; i++) {\r\n const channel = sKeys[i];\r\n (this.sets as any)[channel].dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Starts the download process for all the channels converting them to base64 data and embedding it all in a JSON file.\r\n * @param imageType is the image type to use.\r\n * @param quality of the image if downloading as jpeg, Ranges from >0 to 1.\r\n */\r\n public download(imageType: string = \"png\", quality: number = 1): void {\r\n setTimeout(() => {\r\n const pack = {\r\n name: this.name,\r\n sets: {},\r\n options: {},\r\n frames: [],\r\n };\r\n\r\n const sKeys = Object.keys(this.sets);\r\n const oKeys = Object.keys(this.options);\r\n try {\r\n for (let i = 0; i < sKeys.length; i++) {\r\n const channel: string = sKeys[i];\r\n const dt = (this.sets as any)[channel];\r\n (pack.sets as any)[channel] = dt.getContext().canvas.toDataURL(\"image/\" + imageType, quality);\r\n }\r\n for (let i = 0; i < oKeys.length; i++) {\r\n const opt: string = oKeys[i];\r\n (pack.options as any)[opt] = (this.options as any)[opt];\r\n }\r\n for (let i = 0; i < this.frames.length; i++) {\r\n const _f = this.frames[i];\r\n (pack.frames as Array<number>).push(_f.scale.x, _f.scale.y, _f.offset.x, _f.offset.y);\r\n }\r\n } catch (err) {\r\n Logger.Warn(\"Unable to download: \" + err);\r\n return;\r\n }\r\n\r\n const data = \"data:text/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify(pack, null, 4));\r\n const _a = document.createElement(\"a\");\r\n _a.setAttribute(\"href\", data);\r\n _a.setAttribute(\"download\", this.name + \"_texurePackage.json\");\r\n document.body.appendChild(_a);\r\n _a.click();\r\n _a.remove();\r\n }, 0);\r\n }\r\n\r\n /**\r\n * Public method to load a texturePacker JSON file.\r\n * @param data of the JSON file in string format.\r\n */\r\n public updateFromJSON(data: string): void {\r\n try {\r\n const parsedData: ITexturePackerJSON = JSON.parse(data);\r\n this.name = parsedData.name;\r\n const _options = Object.keys(parsedData.options);\r\n\r\n for (let i = 0; i < _options.length; i++) {\r\n (this.options as any)[_options[i]] = (parsedData.options as any)[_options[i]];\r\n }\r\n\r\n for (let i = 0; i < parsedData.frames.length; i += 4) {\r\n const frame: TexturePackerFrame = new TexturePackerFrame(\r\n i / 4,\r\n new Vector2(parsedData.frames[i], parsedData.frames[i + 1]),\r\n new Vector2(parsedData.frames[i + 2], parsedData.frames[i + 3])\r\n );\r\n this.frames.push(frame);\r\n }\r\n\r\n const channels = Object.keys(parsedData.sets);\r\n\r\n for (let i = 0; i < channels.length; i++) {\r\n const _t = new Texture(parsedData.sets[channels[i]], this.scene, false, false);\r\n (this.sets as any)[channels[i]] = _t;\r\n }\r\n } catch (err) {\r\n Logger.Warn(\"Unable to update from JSON: \" + err);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"packer.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Textures/Packer/packer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AbstractMesh } from \"../../../Meshes/abstractMesh\";\r\nimport { VertexBuffer } from \"../../../Buffers/buffer\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport type { Material } from \"../../material\";\r\nimport { Texture } from \"../texture\";\r\nimport { DynamicTexture } from \"../dynamicTexture\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { Vector2 } from \"../../../Maths/math.vector\";\r\nimport { Color3, Color4 } from \"../../../Maths/math.color\";\r\nimport { TexturePackerFrame } from \"./frame\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { Tools } from \"../../../Misc/tools\";\r\nimport { Constants } from \"core/Engines/constants\";\r\n\r\n/**\r\n * Defines the basic options interface of a TexturePacker\r\n */\r\nexport interface ITexturePackerOptions {\r\n /**\r\n * Custom targets for the channels of a texture packer. Default is all the channels of the Standard Material\r\n */\r\n map?: string[];\r\n\r\n /**\r\n * the UV input targets, as a single value for all meshes. Defaults to VertexBuffer.UVKind\r\n */\r\n uvsIn?: string;\r\n\r\n /**\r\n * the UV output targets, as a single value for all meshes. Defaults to VertexBuffer.UVKind\r\n */\r\n uvsOut?: string;\r\n\r\n /**\r\n * number representing the layout style. Defaults to LAYOUT_STRIP\r\n */\r\n layout?: number;\r\n\r\n /**\r\n * number of columns if using custom column count layout(2). This defaults to 4.\r\n */\r\n colnum?: number;\r\n\r\n /**\r\n * flag to update the input meshes to the new packed texture after compilation. Defaults to true.\r\n */\r\n updateInputMeshes?: boolean;\r\n\r\n /**\r\n * boolean flag to dispose all the source textures. Defaults to true.\r\n */\r\n disposeSources?: boolean;\r\n\r\n /**\r\n * Fills the blank cells in a set to the customFillColor. Defaults to true.\r\n */\r\n fillBlanks?: boolean;\r\n\r\n /**\r\n * string value representing the context fill style color. Defaults to 'black'.\r\n */\r\n customFillColor?: string;\r\n\r\n /**\r\n * Width and Height Value of each Frame in the TexturePacker Sets\r\n */\r\n frameSize?: number;\r\n\r\n /**\r\n * Ratio of the value to add padding wise to each cell. Defaults to 0.0115\r\n */\r\n paddingRatio?: number;\r\n\r\n /**\r\n * Number that declares the fill method for the padding gutter.\r\n */\r\n paddingMode?: number;\r\n\r\n /**\r\n * If in SUBUV_COLOR padding mode what color to use.\r\n */\r\n paddingColor?: Color3 | Color4;\r\n}\r\n\r\n/**\r\n * Defines the basic interface of a TexturePacker JSON File\r\n */\r\nexport interface ITexturePackerJSON {\r\n /**\r\n * The frame ID\r\n */\r\n name: string;\r\n\r\n /**\r\n * The base64 channel data\r\n */\r\n sets: any;\r\n\r\n /**\r\n * The options of the Packer\r\n */\r\n options: ITexturePackerOptions;\r\n\r\n /**\r\n * The frame data of the Packer\r\n */\r\n frames: Array<number>;\r\n}\r\n\r\n/**\r\n * This is a support class that generates a series of packed texture sets.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction\r\n */\r\nexport class TexturePacker {\r\n /** Packer Layout Constant 0 */\r\n public static readonly LAYOUT_STRIP = 0;\r\n /** Packer Layout Constant 1 */\r\n public static readonly LAYOUT_POWER2 = 1;\r\n /** Packer Layout Constant 2 */\r\n public static readonly LAYOUT_COLNUM = 2;\r\n\r\n /** Packer Layout Constant 0 */\r\n public static readonly SUBUV_WRAP = 0;\r\n /** Packer Layout Constant 1 */\r\n public static readonly SUBUV_EXTEND = 1;\r\n /** Packer Layout Constant 2 */\r\n public static readonly SUBUV_COLOR = 2;\r\n\r\n /** The Name of the Texture Package */\r\n public name: string;\r\n\r\n /** The scene scope of the TexturePacker */\r\n public scene: Scene;\r\n\r\n /** The Meshes to target */\r\n public meshes: AbstractMesh[];\r\n\r\n /** Arguments passed with the Constructor */\r\n public options: ITexturePackerOptions;\r\n\r\n /** The promise that is started upon initialization */\r\n public promise: Nullable<Promise<TexturePacker | string>>;\r\n\r\n /** The Container object for the channel sets that are generated */\r\n public sets: object;\r\n\r\n /** The Container array for the frames that are generated */\r\n public frames: TexturePackerFrame[];\r\n\r\n /** The expected number of textures the system is parsing. */\r\n private _expecting: number;\r\n\r\n /** The padding value from Math.ceil(frameSize * paddingRatio) */\r\n private _paddingValue: number;\r\n\r\n /**\r\n * Initializes a texture package series from an array of meshes or a single mesh.\r\n * @param name The name of the package\r\n * @param meshes The target meshes to compose the package from\r\n * @param options The arguments that texture packer should follow while building.\r\n * @param scene The scene which the textures are scoped to.\r\n * @returns TexturePacker\r\n */\r\n constructor(name: string, meshes: AbstractMesh[], options: ITexturePackerOptions, scene: Scene) {\r\n this.name = name;\r\n this.meshes = meshes;\r\n this.scene = scene;\r\n\r\n /**\r\n * Run through the options and set what ever defaults are needed that where not declared.\r\n */\r\n this.options = options;\r\n this.options.map = this.options.map ?? [\r\n \"ambientTexture\",\r\n \"bumpTexture\",\r\n \"diffuseTexture\",\r\n \"emissiveTexture\",\r\n \"lightmapTexture\",\r\n \"opacityTexture\",\r\n \"reflectionTexture\",\r\n \"refractionTexture\",\r\n \"specularTexture\",\r\n ];\r\n\r\n this.options.uvsIn = this.options.uvsIn ?? VertexBuffer.UVKind;\r\n this.options.uvsOut = this.options.uvsOut ?? VertexBuffer.UVKind;\r\n this.options.layout = this.options.layout ?? TexturePacker.LAYOUT_STRIP;\r\n\r\n if (this.options.layout === TexturePacker.LAYOUT_COLNUM) {\r\n this.options.colnum = this.options.colnum ?? 8;\r\n }\r\n\r\n this.options.updateInputMeshes = this.options.updateInputMeshes ?? true;\r\n this.options.disposeSources = this.options.disposeSources ?? true;\r\n this._expecting = 0;\r\n\r\n this.options.fillBlanks = this.options.fillBlanks ?? true;\r\n\r\n if (this.options.fillBlanks === true) {\r\n this.options.customFillColor = this.options.customFillColor ?? \"black\";\r\n }\r\n\r\n this.options.frameSize = this.options.frameSize ?? 256;\r\n this.options.paddingRatio = this.options.paddingRatio ?? 0.0115;\r\n\r\n this._paddingValue = Math.ceil(this.options.frameSize * this.options.paddingRatio);\r\n\r\n //Make it an even padding Number.\r\n if (this._paddingValue % 2 !== 0) {\r\n this._paddingValue++;\r\n }\r\n\r\n this.options.paddingMode = this.options.paddingMode ?? TexturePacker.SUBUV_WRAP;\r\n\r\n if (this.options.paddingMode === TexturePacker.SUBUV_COLOR) {\r\n this.options.paddingColor = this.options.paddingColor ?? new Color4(0, 0, 0, 1.0);\r\n }\r\n\r\n this.sets = {};\r\n this.frames = [];\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Starts the package process\r\n * @param resolve The promises resolution function\r\n */\r\n private _createFrames(resolve: () => void) {\r\n const dtSize = this._calculateSize();\r\n const dtUnits = new Vector2(1, 1).divide(dtSize);\r\n let doneCount = 0;\r\n const expecting = this._expecting;\r\n const meshLength = this.meshes.length;\r\n\r\n const sKeys = Object.keys(this.sets);\r\n for (let i = 0; i < sKeys.length; i++) {\r\n const setName = sKeys[i];\r\n\r\n const dt = new DynamicTexture(\r\n this.name + \".TexturePack.\" + setName + \"Set\",\r\n { width: dtSize.x, height: dtSize.y },\r\n this.scene,\r\n true, //Generate Mips\r\n Texture.TRILINEAR_SAMPLINGMODE,\r\n Constants.TEXTUREFORMAT_RGBA\r\n );\r\n\r\n const dtx = dt.getContext();\r\n dtx.fillStyle = \"rgba(0,0,0,0)\";\r\n dtx.fillRect(0, 0, dtSize.x, dtSize.y);\r\n dt.update(false);\r\n (this.sets as any)[setName] = dt;\r\n }\r\n\r\n const baseSize = this.options.frameSize || 256;\r\n const padding = this._paddingValue;\r\n const tcs = baseSize + 2 * padding;\r\n\r\n const done = () => {\r\n this._calculateMeshUVFrames(baseSize, padding, dtSize, dtUnits, this.options.updateInputMeshes || false);\r\n };\r\n\r\n //Update the Textures\r\n for (let i = 0; i < meshLength; i++) {\r\n const m = this.meshes[i];\r\n const mat = m.material;\r\n\r\n //Check if the material has the texture\r\n //Create a temporary canvas the same size as 1 frame\r\n //Then apply the texture to the center and the 8 offsets\r\n //Copy the Context and place in the correct frame on the DT\r\n\r\n for (let j = 0; j < sKeys.length; j++) {\r\n const tempTexture = new DynamicTexture(\"temp\", tcs, this.scene, true);\r\n const tcx = tempTexture.getContext();\r\n const offset = this._getFrameOffset(i);\r\n\r\n const updateDt = () => {\r\n doneCount++;\r\n tempTexture.update(false);\r\n const iDat = tcx.getImageData(0, 0, tcs, tcs);\r\n\r\n //Update Set\r\n const dt = (this.sets as any)[setName];\r\n const dtx = dt.getContext();\r\n dtx.putImageData(iDat, dtSize.x * offset.x, dtSize.y * offset.y);\r\n tempTexture.dispose();\r\n dt.update(false);\r\n if (doneCount == expecting) {\r\n done();\r\n resolve();\r\n return;\r\n }\r\n };\r\n\r\n const setName = sKeys[j] || \"_blank\";\r\n if (!mat || (mat as any)[setName] === null) {\r\n tcx.fillStyle = \"rgba(0,0,0,0)\";\r\n\r\n if (this.options.fillBlanks) {\r\n tcx.fillStyle = this.options.customFillColor as string;\r\n }\r\n\r\n tcx.fillRect(0, 0, tcs, tcs);\r\n\r\n updateDt();\r\n } else {\r\n const setTexture = (mat as any)[setName];\r\n const img = new Image();\r\n\r\n if (setTexture instanceof DynamicTexture) {\r\n img.src = setTexture.getContext().canvas.toDataURL(\"image/png\");\r\n } else {\r\n img.src = setTexture!.url;\r\n }\r\n Tools.SetCorsBehavior(img.src, img);\r\n\r\n img.onload = () => {\r\n tcx.fillStyle = \"rgba(0,0,0,0)\";\r\n tcx.fillRect(0, 0, tcs, tcs);\r\n tempTexture.update(false);\r\n\r\n tcx.setTransform(1, 0, 0, -1, 0, 0);\r\n const cellOffsets = [0, 0, 1, 0, 1, 1, 0, 1, -1, 1, -1, 0, -1 - 1, 0, -1, 1, -1];\r\n\r\n switch (this.options.paddingMode) {\r\n //Wrap Mode\r\n case 0:\r\n for (let i = 0; i < 9; i++) {\r\n tcx.drawImage(\r\n img,\r\n 0,\r\n 0,\r\n img.width,\r\n img.height,\r\n padding + baseSize * cellOffsets[i],\r\n padding + baseSize * cellOffsets[i + 1] - tcs,\r\n baseSize,\r\n baseSize\r\n );\r\n }\r\n break;\r\n //Extend Mode\r\n case 1:\r\n for (let i = 0; i < padding; i++) {\r\n tcx.drawImage(img, 0, 0, img.width, img.height, i + baseSize * cellOffsets[0], padding - tcs, baseSize, baseSize);\r\n\r\n tcx.drawImage(img, 0, 0, img.width, img.height, padding * 2 - i, padding - tcs, baseSize, baseSize);\r\n\r\n tcx.drawImage(img, 0, 0, img.width, img.height, padding, i - tcs, baseSize, baseSize);\r\n\r\n tcx.drawImage(img, 0, 0, img.width, img.height, padding, padding * 2 - i - tcs, baseSize, baseSize);\r\n }\r\n\r\n tcx.drawImage(img, 0, 0, img.width, img.height, padding + baseSize * cellOffsets[0], padding + baseSize * cellOffsets[1] - tcs, baseSize, baseSize);\r\n\r\n break;\r\n //Color Mode\r\n case 2:\r\n tcx.fillStyle = (this.options.paddingColor || Color3.Black()).toHexString();\r\n tcx.fillRect(0, 0, tcs, -tcs);\r\n tcx.clearRect(padding, padding, baseSize, baseSize);\r\n tcx.drawImage(img, 0, 0, img.width, img.height, padding + baseSize * cellOffsets[0], padding + baseSize * cellOffsets[1] - tcs, baseSize, baseSize);\r\n\r\n break;\r\n }\r\n\r\n tcx.setTransform(1, 0, 0, 1, 0, 0);\r\n\r\n updateDt();\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the Size of the Channel Sets\r\n * @returns Vector2\r\n */\r\n private _calculateSize(): Vector2 {\r\n const meshLength: number = this.meshes.length || 0;\r\n const baseSize: number = this.options.frameSize || 0;\r\n const padding: number = this._paddingValue || 0;\r\n\r\n switch (this.options.layout) {\r\n case 0: {\r\n //STRIP_LAYOUT\r\n return new Vector2(baseSize * meshLength + 2 * padding * meshLength, baseSize + 2 * padding);\r\n }\r\n case 1: {\r\n //POWER2\r\n const sqrtCount = Math.max(2, Math.ceil(Math.sqrt(meshLength)));\r\n const size = baseSize * sqrtCount + 2 * padding * sqrtCount;\r\n return new Vector2(size, size);\r\n }\r\n case 2: {\r\n //COLNUM\r\n const cols = this.options.colnum || 1;\r\n const rowCnt = Math.max(1, Math.ceil(meshLength / cols));\r\n return new Vector2(baseSize * cols + 2 * padding * cols, baseSize * rowCnt + 2 * padding * rowCnt);\r\n }\r\n }\r\n\r\n return Vector2.Zero();\r\n }\r\n\r\n /**\r\n * Calculates the UV data for the frames.\r\n * @param baseSize the base frameSize\r\n * @param padding the base frame padding\r\n * @param dtSize size of the Dynamic Texture for that channel\r\n * @param dtUnits is 1/dtSize\r\n * @param update flag to update the input meshes\r\n */\r\n private _calculateMeshUVFrames(baseSize: number, padding: number, dtSize: Vector2, dtUnits: Vector2, update: boolean) {\r\n const meshLength = this.meshes.length;\r\n\r\n for (let i = 0; i < meshLength; i++) {\r\n const m = this.meshes[i];\r\n\r\n const scale = new Vector2(baseSize / dtSize.x, baseSize / dtSize.y);\r\n\r\n const pOffset: Vector2 = dtUnits.clone().scale(padding);\r\n const frameOffset: Vector2 = this._getFrameOffset(i);\r\n const offset: Vector2 = frameOffset.add(pOffset);\r\n\r\n const frame: TexturePackerFrame = new TexturePackerFrame(i, scale, offset);\r\n\r\n this.frames.push(frame);\r\n\r\n //Update Output UVs\r\n if (update) {\r\n this._updateMeshUV(m, i);\r\n this._updateTextureReferences(m);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the frames Offset.\r\n * @param index of the frame\r\n * @returns Vector2\r\n */\r\n private _getFrameOffset(index: number): Vector2 {\r\n const meshLength = this.meshes.length;\r\n let uvStep, yStep, xStep;\r\n\r\n switch (this.options.layout) {\r\n case 0: {\r\n //STRIP_LAYOUT\r\n uvStep = 1 / meshLength;\r\n return new Vector2(index * uvStep, 0);\r\n }\r\n case 1: {\r\n //POWER2\r\n const sqrtCount = Math.max(2, Math.ceil(Math.sqrt(meshLength)));\r\n yStep = Math.floor(index / sqrtCount);\r\n xStep = index - yStep * sqrtCount;\r\n uvStep = 1 / sqrtCount;\r\n return new Vector2(xStep * uvStep, yStep * uvStep);\r\n }\r\n case 2: {\r\n //COLNUM\r\n const cols = this.options.colnum || 1;\r\n const rowCnt = Math.max(1, Math.ceil(meshLength / cols));\r\n xStep = Math.floor(index / rowCnt);\r\n yStep = index - xStep * rowCnt;\r\n uvStep = new Vector2(1 / cols, 1 / rowCnt);\r\n return new Vector2(xStep * uvStep.x, yStep * uvStep.y);\r\n }\r\n }\r\n\r\n return Vector2.Zero();\r\n }\r\n\r\n /**\r\n * Updates a Mesh to the frame data\r\n * @param mesh that is the target\r\n * @param frameID or the frame index\r\n */\r\n private _updateMeshUV(mesh: AbstractMesh, frameID: number): void {\r\n const frame: TexturePackerFrame = (this.frames as any)[frameID];\r\n const uvIn = mesh.getVerticesData(this.options.uvsIn || VertexBuffer.UVKind);\r\n const uvOut = [];\r\n let toCount = 0;\r\n\r\n if (uvIn!.length) {\r\n toCount = uvIn!.length || 0;\r\n }\r\n\r\n for (let i = 0; i < toCount; i += 2) {\r\n uvOut.push((uvIn as any)[i] * frame.scale.x + frame.offset.x, (uvIn as any)[i + 1] * frame.scale.y + frame.offset.y);\r\n }\r\n\r\n mesh.setVerticesData(this.options.uvsOut || VertexBuffer.UVKind, uvOut);\r\n }\r\n\r\n /**\r\n * Updates a Meshes materials to use the texture packer channels\r\n * @param m is the mesh to target\r\n * @param force all channels on the packer to be set.\r\n */\r\n private _updateTextureReferences(m: AbstractMesh, force: boolean = false): void {\r\n const mat = m.material;\r\n const sKeys = Object.keys(this.sets);\r\n\r\n const _dispose = (_t: any) => {\r\n if (_t.dispose) {\r\n _t.dispose();\r\n }\r\n };\r\n\r\n for (let i = 0; i < sKeys.length; i++) {\r\n const setName = sKeys[i];\r\n if (!force) {\r\n if (!mat) {\r\n return;\r\n }\r\n if ((mat as any)[setName] !== null) {\r\n _dispose((mat as any)[setName]);\r\n (mat as any)[setName] = (this.sets as any)[setName];\r\n }\r\n } else {\r\n if ((mat as any)[setName] !== null) {\r\n _dispose((mat as any)[setName]);\r\n }\r\n (mat as any)[setName] = (this.sets as any)[setName];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Public method to set a Mesh to a frame\r\n * @param m that is the target\r\n * @param frameID or the frame index\r\n * @param updateMaterial trigger for if the Meshes attached Material be updated?\r\n */\r\n public setMeshToFrame(m: AbstractMesh, frameID: number, updateMaterial: boolean = false): void {\r\n this._updateMeshUV(m, frameID);\r\n if (updateMaterial) {\r\n this._updateTextureReferences(m, true);\r\n }\r\n }\r\n\r\n /**\r\n * Starts the async promise to compile the texture packer.\r\n * @returns Promise<void>\r\n */\r\n public processAsync(): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n if (this.meshes.length === 0) {\r\n //Must be a JSON load!\r\n resolve();\r\n return;\r\n }\r\n let done = 0;\r\n const doneCheck = (mat: Material) => {\r\n done++;\r\n //Check Status of all Textures on all meshes, till they are ready.\r\n if (this.options.map) {\r\n for (let j = 0; j < this.options.map.length; j++) {\r\n const index: string = this.options.map[j];\r\n const t: Texture | DynamicTexture = (mat as any)[index];\r\n\r\n if (t !== null) {\r\n if (!(this.sets as any)[this.options.map[j]]) {\r\n (this.sets as any)[this.options.map[j]] = true;\r\n }\r\n\r\n this._expecting++;\r\n }\r\n }\r\n\r\n if (done === this.meshes.length) {\r\n this._createFrames(resolve);\r\n }\r\n }\r\n };\r\n\r\n for (let i = 0; i < this.meshes.length; i++) {\r\n const mesh = this.meshes[i];\r\n const material: Nullable<Material> = mesh.material;\r\n\r\n if (!material) {\r\n done++;\r\n if (done === this.meshes.length) {\r\n return this._createFrames(resolve);\r\n }\r\n continue;\r\n }\r\n\r\n material.forceCompilationAsync(mesh).then(() => {\r\n doneCheck(material as Material);\r\n });\r\n }\r\n } catch (e) {\r\n return reject(e);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Disposes all textures associated with this packer\r\n */\r\n public dispose(): void {\r\n const sKeys = Object.keys(this.sets);\r\n for (let i = 0; i < sKeys.length; i++) {\r\n const channel = sKeys[i];\r\n (this.sets as any)[channel].dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Starts the download process for all the channels converting them to base64 data and embedding it all in a JSON file.\r\n * @param imageType is the image type to use.\r\n * @param quality of the image if downloading as jpeg, Ranges from >0 to 1.\r\n */\r\n public download(imageType: string = \"png\", quality: number = 1): void {\r\n setTimeout(() => {\r\n const pack = {\r\n name: this.name,\r\n sets: {},\r\n options: {},\r\n frames: [],\r\n };\r\n\r\n const sKeys = Object.keys(this.sets);\r\n const oKeys = Object.keys(this.options);\r\n try {\r\n for (let i = 0; i < sKeys.length; i++) {\r\n const channel: string = sKeys[i];\r\n const dt = (this.sets as any)[channel];\r\n (pack.sets as any)[channel] = dt.getContext().canvas.toDataURL(\"image/\" + imageType, quality);\r\n }\r\n for (let i = 0; i < oKeys.length; i++) {\r\n const opt: string = oKeys[i];\r\n (pack.options as any)[opt] = (this.options as any)[opt];\r\n }\r\n for (let i = 0; i < this.frames.length; i++) {\r\n const _f = this.frames[i];\r\n (pack.frames as Array<number>).push(_f.scale.x, _f.scale.y, _f.offset.x, _f.offset.y);\r\n }\r\n } catch (err) {\r\n Logger.Warn(\"Unable to download: \" + err);\r\n return;\r\n }\r\n\r\n const data = \"data:text/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify(pack, null, 4));\r\n const _a = document.createElement(\"a\");\r\n _a.setAttribute(\"href\", data);\r\n _a.setAttribute(\"download\", this.name + \"_texurePackage.json\");\r\n document.body.appendChild(_a);\r\n _a.click();\r\n _a.remove();\r\n }, 0);\r\n }\r\n\r\n /**\r\n * Public method to load a texturePacker JSON file.\r\n * @param data of the JSON file in string format.\r\n */\r\n public updateFromJSON(data: string): void {\r\n try {\r\n const parsedData: ITexturePackerJSON = JSON.parse(data);\r\n this.name = parsedData.name;\r\n const _options = Object.keys(parsedData.options);\r\n\r\n for (let i = 0; i < _options.length; i++) {\r\n (this.options as any)[_options[i]] = (parsedData.options as any)[_options[i]];\r\n }\r\n\r\n for (let i = 0; i < parsedData.frames.length; i += 4) {\r\n const frame: TexturePackerFrame = new TexturePackerFrame(\r\n i / 4,\r\n new Vector2(parsedData.frames[i], parsedData.frames[i + 1]),\r\n new Vector2(parsedData.frames[i + 2], parsedData.frames[i + 3])\r\n );\r\n this.frames.push(frame);\r\n }\r\n\r\n const channels = Object.keys(parsedData.sets);\r\n\r\n for (let i = 0; i < channels.length; i++) {\r\n const _t = new Texture(parsedData.sets[channels[i]], this.scene, false, false);\r\n (this.sets as any)[channels[i]] = _t;\r\n }\r\n } catch (err) {\r\n Logger.Warn(\"Unable to update from JSON: \" + err);\r\n }\r\n }\r\n}\r\n"]}
@@ -9,7 +9,6 @@ export * from "./Filtering/hdrFiltering";
9
9
  export * from "./hdrCubeTexture";
10
10
  export * from "./htmlElementTexture";
11
11
  export * from "./internalTexture";
12
- export * from "./internalTextureLoader";
13
12
  export * from "./Loaders/index";
14
13
  export * from "./mirrorTexture";
15
14
  export * from "./multiRenderTarget";
@@ -11,7 +11,6 @@ export * from "./Filtering/hdrFiltering.js";
11
11
  export * from "./hdrCubeTexture.js";
12
12
  export * from "./htmlElementTexture.js";
13
13
  export * from "./internalTexture.js";
14
- export * from "./internalTextureLoader.js";
15
14
  export * from "./Loaders/index.js";
16
15
  export * from "./mirrorTexture.js";
17
16
  export * from "./multiRenderTarget.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,eAAe,CAAC;AAC9B,yCAAyC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nexport * from \"./baseTexture\";\r\n// eslint-disable-next-line import/export\r\nexport * from \"./baseTexture.polynomial\";\r\nexport * from \"./colorGradingTexture\";\r\nexport * from \"./cubeTexture\";\r\nexport * from \"./dynamicTexture\";\r\nexport * from \"./equiRectangularCubeTexture\";\r\nexport * from \"./externalTexture\";\r\nexport * from \"./Filtering/hdrFiltering\";\r\nexport * from \"./hdrCubeTexture\";\r\nexport * from \"./htmlElementTexture\";\r\nexport * from \"./internalTexture\";\r\nexport * from \"./internalTextureLoader\";\r\nexport * from \"./Loaders/index\";\r\nexport * from \"./mirrorTexture\";\r\nexport * from \"./multiRenderTarget\";\r\nexport * from \"./Packer/index\";\r\nexport * from \"./Procedurals/index\";\r\nexport * from \"./rawCubeTexture\";\r\nexport * from \"./rawTexture\";\r\nexport * from \"./rawTexture2DArray\";\r\nexport * from \"./rawTexture3D\";\r\nexport * from \"./refractionTexture\";\r\nexport * from \"./renderTargetTexture\";\r\nexport * from \"./textureSampler\";\r\nexport * from \"./texture\";\r\nexport * from \"./thinTexture\";\r\nexport * from \"./thinRenderTargetTexture\";\r\nexport * from \"./videoTexture\";\r\nexport * from \"./ktx2decoderTypes\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,eAAe,CAAC;AAC9B,yCAAyC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nexport * from \"./baseTexture\";\r\n// eslint-disable-next-line import/export\r\nexport * from \"./baseTexture.polynomial\";\r\nexport * from \"./colorGradingTexture\";\r\nexport * from \"./cubeTexture\";\r\nexport * from \"./dynamicTexture\";\r\nexport * from \"./equiRectangularCubeTexture\";\r\nexport * from \"./externalTexture\";\r\nexport * from \"./Filtering/hdrFiltering\";\r\nexport * from \"./hdrCubeTexture\";\r\nexport * from \"./htmlElementTexture\";\r\nexport * from \"./internalTexture\";\r\nexport * from \"./Loaders/index\";\r\nexport * from \"./mirrorTexture\";\r\nexport * from \"./multiRenderTarget\";\r\nexport * from \"./Packer/index\";\r\nexport * from \"./Procedurals/index\";\r\nexport * from \"./rawCubeTexture\";\r\nexport * from \"./rawTexture\";\r\nexport * from \"./rawTexture2DArray\";\r\nexport * from \"./rawTexture3D\";\r\nexport * from \"./refractionTexture\";\r\nexport * from \"./renderTargetTexture\";\r\nexport * from \"./textureSampler\";\r\nexport * from \"./texture\";\r\nexport * from \"./thinTexture\";\r\nexport * from \"./thinRenderTargetTexture\";\r\nexport * from \"./videoTexture\";\r\nexport * from \"./ktx2decoderTypes\";\r\n"]}
@@ -1,8 +1,8 @@
1
1
  import { DeepCopier } from "../Misc/deepCopier.js";
2
2
  import { Color3 } from "../Maths/math.color.js";
3
- import { Engine } from "../Engines/engine.js";
4
3
  import { SerializationHelper } from "../Misc/decorators.serialization.js";
5
4
 
5
+ import { AbstractEngine } from "../Engines/abstractEngine.js";
6
6
  /**
7
7
  * This represents all the required information to add a fresnel effect on a material:
8
8
  * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/fresnelParameters
@@ -19,7 +19,7 @@ export class FresnelParameters {
19
19
  return;
20
20
  }
21
21
  this._isEnabled = value;
22
- Engine.MarkAllMaterialsAsDirty(4 | 16);
22
+ AbstractEngine.MarkAllMaterialsAsDirty(4 | 16);
23
23
  }
24
24
  /**
25
25
  * Creates a new FresnelParameters object.
@@ -1 +1 @@
1
- {"version":3,"file":"fresnelParameters.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/fresnelParameters.ts"],"names":[],"mappings":"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","sourcesContent":["import { DeepCopier } from \"../Misc/deepCopier\";\r\nimport type { DeepImmutable } from \"../types\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\n/**\r\n * Options to be used when creating a FresnelParameters.\r\n */\r\nexport type IFresnelParametersCreationOptions = {\r\n /**\r\n * Define the color used on edges (grazing angle)\r\n */\r\n leftColor?: Color3;\r\n\r\n /**\r\n * Define the color used on center\r\n */\r\n rightColor?: Color3;\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n bias?: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n power?: number;\r\n\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n isEnabled?: boolean;\r\n};\r\n\r\n/**\r\n * Serialized format for FresnelParameters.\r\n */\r\nexport type IFresnelParametersSerialized = {\r\n /**\r\n * Define the color used on edges (grazing angle) [as an array]\r\n */\r\n leftColor: number[];\r\n\r\n /**\r\n * Define the color used on center [as an array]\r\n */\r\n rightColor: number[];\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n bias: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n power?: number;\r\n\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n isEnabled: boolean;\r\n};\r\n\r\n/**\r\n * This represents all the required information to add a fresnel effect on a material:\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/fresnelParameters\r\n */\r\nexport class FresnelParameters {\r\n private _isEnabled = true;\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n\r\n this._isEnabled = value;\r\n Engine.MarkAllMaterialsAsDirty(Constants.MATERIAL_FresnelDirtyFlag | Constants.MATERIAL_MiscDirtyFlag);\r\n }\r\n\r\n /**\r\n * Define the color used on edges (grazing angle)\r\n */\r\n public leftColor: Color3;\r\n\r\n /**\r\n * Define the color used on center\r\n */\r\n public rightColor: Color3;\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n public bias: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n public power: number;\r\n\r\n /**\r\n * Creates a new FresnelParameters object.\r\n *\r\n * @param options provide your own settings to optionally to override defaults\r\n */\r\n public constructor(options: IFresnelParametersCreationOptions = {}) {\r\n this.bias = options.bias === undefined ? 0 : options.bias;\r\n this.power = options.power === undefined ? 1 : options.power;\r\n this.leftColor = options.leftColor || Color3.White();\r\n this.rightColor = options.rightColor || Color3.Black();\r\n if (options.isEnabled === false) {\r\n this.isEnabled = false;\r\n }\r\n }\r\n\r\n /**\r\n * Clones the current fresnel and its values\r\n * @returns a clone fresnel configuration\r\n */\r\n public clone(): FresnelParameters {\r\n const newFresnelParameters = new FresnelParameters();\r\n\r\n DeepCopier.DeepCopy(this, newFresnelParameters);\r\n\r\n return newFresnelParameters;\r\n }\r\n\r\n /**\r\n * Determines equality between FresnelParameters objects\r\n * @param otherFresnelParameters defines the second operand\r\n * @returns true if the power, bias, leftColor, rightColor and isEnabled values are equal to the given ones\r\n */\r\n public equals(otherFresnelParameters: DeepImmutable<FresnelParameters>): boolean {\r\n return (\r\n otherFresnelParameters &&\r\n this.bias === otherFresnelParameters.bias &&\r\n this.power === otherFresnelParameters.power &&\r\n this.leftColor.equals(otherFresnelParameters.leftColor) &&\r\n this.rightColor.equals(otherFresnelParameters.rightColor) &&\r\n this.isEnabled === otherFresnelParameters.isEnabled\r\n );\r\n }\r\n\r\n /**\r\n * Serializes the current fresnel parameters to a JSON representation.\r\n * @returns the JSON serialization\r\n */\r\n public serialize(): IFresnelParametersSerialized {\r\n return {\r\n isEnabled: this.isEnabled,\r\n leftColor: this.leftColor.asArray(),\r\n rightColor: this.rightColor.asArray(),\r\n bias: this.bias,\r\n power: this.power,\r\n };\r\n }\r\n\r\n /**\r\n * Parse a JSON object and deserialize it to a new Fresnel parameter object.\r\n * @param parsedFresnelParameters Define the JSON representation\r\n * @returns the parsed parameters\r\n */\r\n public static Parse(parsedFresnelParameters: IFresnelParametersSerialized): FresnelParameters {\r\n return new FresnelParameters({\r\n isEnabled: parsedFresnelParameters.isEnabled,\r\n leftColor: Color3.FromArray(parsedFresnelParameters.leftColor),\r\n rightColor: Color3.FromArray(parsedFresnelParameters.rightColor),\r\n bias: parsedFresnelParameters.bias,\r\n power: parsedFresnelParameters.power || 1.0,\r\n });\r\n }\r\n}\r\n\r\n// References the dependencies.\r\nSerializationHelper._FresnelParametersParser = FresnelParameters.Parse;\r\n"]}
1
+ {"version":3,"file":"fresnelParameters.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/fresnelParameters.ts"],"names":[],"mappings":"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","sourcesContent":["import { DeepCopier } from \"../Misc/deepCopier\";\r\nimport type { DeepImmutable } from \"../types\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\r\n\r\n/**\r\n * Options to be used when creating a FresnelParameters.\r\n */\r\nexport type IFresnelParametersCreationOptions = {\r\n /**\r\n * Define the color used on edges (grazing angle)\r\n */\r\n leftColor?: Color3;\r\n\r\n /**\r\n * Define the color used on center\r\n */\r\n rightColor?: Color3;\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n bias?: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n power?: number;\r\n\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n isEnabled?: boolean;\r\n};\r\n\r\n/**\r\n * Serialized format for FresnelParameters.\r\n */\r\nexport type IFresnelParametersSerialized = {\r\n /**\r\n * Define the color used on edges (grazing angle) [as an array]\r\n */\r\n leftColor: number[];\r\n\r\n /**\r\n * Define the color used on center [as an array]\r\n */\r\n rightColor: number[];\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n bias: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n power?: number;\r\n\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n isEnabled: boolean;\r\n};\r\n\r\n/**\r\n * This represents all the required information to add a fresnel effect on a material:\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/fresnelParameters\r\n */\r\nexport class FresnelParameters {\r\n private _isEnabled = true;\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n\r\n this._isEnabled = value;\r\n AbstractEngine.MarkAllMaterialsAsDirty(Constants.MATERIAL_FresnelDirtyFlag | Constants.MATERIAL_MiscDirtyFlag);\r\n }\r\n\r\n /**\r\n * Define the color used on edges (grazing angle)\r\n */\r\n public leftColor: Color3;\r\n\r\n /**\r\n * Define the color used on center\r\n */\r\n public rightColor: Color3;\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n public bias: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n public power: number;\r\n\r\n /**\r\n * Creates a new FresnelParameters object.\r\n *\r\n * @param options provide your own settings to optionally to override defaults\r\n */\r\n public constructor(options: IFresnelParametersCreationOptions = {}) {\r\n this.bias = options.bias === undefined ? 0 : options.bias;\r\n this.power = options.power === undefined ? 1 : options.power;\r\n this.leftColor = options.leftColor || Color3.White();\r\n this.rightColor = options.rightColor || Color3.Black();\r\n if (options.isEnabled === false) {\r\n this.isEnabled = false;\r\n }\r\n }\r\n\r\n /**\r\n * Clones the current fresnel and its values\r\n * @returns a clone fresnel configuration\r\n */\r\n public clone(): FresnelParameters {\r\n const newFresnelParameters = new FresnelParameters();\r\n\r\n DeepCopier.DeepCopy(this, newFresnelParameters);\r\n\r\n return newFresnelParameters;\r\n }\r\n\r\n /**\r\n * Determines equality between FresnelParameters objects\r\n * @param otherFresnelParameters defines the second operand\r\n * @returns true if the power, bias, leftColor, rightColor and isEnabled values are equal to the given ones\r\n */\r\n public equals(otherFresnelParameters: DeepImmutable<FresnelParameters>): boolean {\r\n return (\r\n otherFresnelParameters &&\r\n this.bias === otherFresnelParameters.bias &&\r\n this.power === otherFresnelParameters.power &&\r\n this.leftColor.equals(otherFresnelParameters.leftColor) &&\r\n this.rightColor.equals(otherFresnelParameters.rightColor) &&\r\n this.isEnabled === otherFresnelParameters.isEnabled\r\n );\r\n }\r\n\r\n /**\r\n * Serializes the current fresnel parameters to a JSON representation.\r\n * @returns the JSON serialization\r\n */\r\n public serialize(): IFresnelParametersSerialized {\r\n return {\r\n isEnabled: this.isEnabled,\r\n leftColor: this.leftColor.asArray(),\r\n rightColor: this.rightColor.asArray(),\r\n bias: this.bias,\r\n power: this.power,\r\n };\r\n }\r\n\r\n /**\r\n * Parse a JSON object and deserialize it to a new Fresnel parameter object.\r\n * @param parsedFresnelParameters Define the JSON representation\r\n * @returns the parsed parameters\r\n */\r\n public static Parse(parsedFresnelParameters: IFresnelParametersSerialized): FresnelParameters {\r\n return new FresnelParameters({\r\n isEnabled: parsedFresnelParameters.isEnabled,\r\n leftColor: Color3.FromArray(parsedFresnelParameters.leftColor),\r\n rightColor: Color3.FromArray(parsedFresnelParameters.rightColor),\r\n bias: parsedFresnelParameters.bias,\r\n power: parsedFresnelParameters.power || 1.0,\r\n });\r\n }\r\n}\r\n\r\n// References the dependencies.\r\nSerializationHelper._FresnelParametersParser = FresnelParameters.Parse;\r\n"]}