@babylonjs/core 7.25.2 → 7.26.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 (116) hide show
  1. package/Engines/Extensions/engine.prefilteredCubeTexture.d.ts +0 -1
  2. package/Engines/Extensions/engine.prefilteredCubeTexture.js +0 -1
  3. package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
  4. package/Engines/WebGPU/Extensions/engine.alpha.js +3 -3
  5. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  6. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +5 -5
  7. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  8. package/Engines/WebGPU/Extensions/engine.rawTexture.js +10 -10
  9. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  10. package/Engines/WebGPU/Extensions/engine.readTexture.js +3 -3
  11. package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
  12. package/Engines/WebGPU/Extensions/engine.renderTarget.js +6 -6
  13. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  14. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +2 -2
  15. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  16. package/Engines/WebGPU/Extensions/engine.renderTargetTexture.js +2 -2
  17. package/Engines/WebGPU/Extensions/engine.renderTargetTexture.js.map +1 -1
  18. package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +2 -2
  19. package/Engines/WebGPU/webgpuRenderTargetWrapper.js.map +1 -1
  20. package/Engines/abstractEngine.d.ts +2 -0
  21. package/Engines/abstractEngine.js +2 -2
  22. package/Engines/abstractEngine.js.map +1 -1
  23. package/Engines/engine.d.ts +5 -5
  24. package/Engines/engine.js +5 -0
  25. package/Engines/engine.js.map +1 -1
  26. package/Engines/thinWebGPUEngine.d.ts +66 -0
  27. package/Engines/thinWebGPUEngine.js +120 -0
  28. package/Engines/thinWebGPUEngine.js.map +1 -0
  29. package/Engines/webgpuEngine.d.ts +9 -58
  30. package/Engines/webgpuEngine.js +9 -108
  31. package/Engines/webgpuEngine.js.map +1 -1
  32. package/Materials/Node/Blocks/colorConverterBlock.d.ts +36 -0
  33. package/Materials/Node/Blocks/colorConverterBlock.js +192 -0
  34. package/Materials/Node/Blocks/colorConverterBlock.js.map +1 -0
  35. package/Materials/Node/Blocks/index.d.ts +1 -0
  36. package/Materials/Node/Blocks/index.js +1 -0
  37. package/Materials/Node/Blocks/index.js.map +1 -1
  38. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
  39. package/Materials/Textures/Filtering/hdrFiltering.d.ts +0 -1
  40. package/Materials/Textures/Filtering/hdrFiltering.js +0 -1
  41. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  42. package/Materials/Textures/Loaders/basisTextureLoader.d.ts +0 -1
  43. package/Materials/Textures/Loaders/basisTextureLoader.js +0 -1
  44. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  45. package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +0 -1
  46. package/Materials/Textures/Loaders/ddsTextureLoader.js +0 -1
  47. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  48. package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +0 -1
  49. package/Materials/Textures/Loaders/ktxTextureLoader.js +0 -1
  50. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  51. package/Materials/Textures/Procedurals/proceduralTexture.d.ts +0 -2
  52. package/Materials/Textures/Procedurals/proceduralTexture.js +0 -2
  53. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  54. package/Materials/Textures/baseTexture.d.ts +0 -1
  55. package/Materials/Textures/baseTexture.js +0 -1
  56. package/Materials/Textures/baseTexture.js.map +1 -1
  57. package/Materials/Textures/colorGradingTexture.d.ts +0 -1
  58. package/Materials/Textures/colorGradingTexture.js +0 -2
  59. package/Materials/Textures/colorGradingTexture.js.map +1 -1
  60. package/Materials/Textures/cubeTexture.d.ts +0 -1
  61. package/Materials/Textures/cubeTexture.js +0 -1
  62. package/Materials/Textures/cubeTexture.js.map +1 -1
  63. package/Materials/Textures/equiRectangularCubeTexture.d.ts +0 -1
  64. package/Materials/Textures/equiRectangularCubeTexture.js +0 -1
  65. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  66. package/Materials/Textures/hdrCubeTexture.d.ts +0 -1
  67. package/Materials/Textures/hdrCubeTexture.js +0 -1
  68. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  69. package/Materials/Textures/rawCubeTexture.d.ts +0 -1
  70. package/Materials/Textures/rawCubeTexture.js +0 -1
  71. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  72. package/Materials/Textures/rawTexture.d.ts +0 -1
  73. package/Materials/Textures/rawTexture.js +0 -1
  74. package/Materials/Textures/rawTexture.js.map +1 -1
  75. package/Materials/Textures/rawTexture2DArray.d.ts +0 -1
  76. package/Materials/Textures/rawTexture2DArray.js +0 -1
  77. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  78. package/Materials/Textures/rawTexture3D.d.ts +0 -1
  79. package/Materials/Textures/rawTexture3D.js +0 -1
  80. package/Materials/Textures/rawTexture3D.js.map +1 -1
  81. package/Materials/Textures/renderTargetTexture.d.ts +0 -3
  82. package/Materials/Textures/renderTargetTexture.js +0 -3
  83. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  84. package/Materials/material.detailMapConfiguration.d.ts +2 -2
  85. package/Materials/material.detailMapConfiguration.js.map +1 -1
  86. package/Misc/basis.d.ts +3 -3
  87. package/Misc/basis.js.map +1 -1
  88. package/Misc/dds.d.ts +0 -1
  89. package/Misc/dds.js +0 -1
  90. package/Misc/dds.js.map +1 -1
  91. package/Misc/environmentTextureTools.d.ts +0 -2
  92. package/Misc/environmentTextureTools.js +0 -2
  93. package/Misc/environmentTextureTools.js.map +1 -1
  94. package/Misc/minMaxReducer.d.ts +0 -1
  95. package/Misc/minMaxReducer.js +0 -1
  96. package/Misc/minMaxReducer.js.map +1 -1
  97. package/Misc/rgbdTextureTools.d.ts +0 -2
  98. package/Misc/rgbdTextureTools.js +5 -10
  99. package/Misc/rgbdTextureTools.js.map +1 -1
  100. package/Misc/screenshotTools.d.ts +0 -1
  101. package/Misc/screenshotTools.js +0 -1
  102. package/Misc/screenshotTools.js.map +1 -1
  103. package/Particles/particleSystem.js.map +1 -1
  104. package/Particles/thinParticleSystem.js.map +1 -1
  105. package/PostProcesses/anaglyphPostProcess.d.ts +2 -2
  106. package/PostProcesses/anaglyphPostProcess.js.map +1 -1
  107. package/PostProcesses/highlightsPostProcess.d.ts +2 -2
  108. package/PostProcesses/highlightsPostProcess.js.map +1 -1
  109. package/PostProcesses/postProcess.d.ts +0 -1
  110. package/PostProcesses/postProcess.js +0 -1
  111. package/PostProcesses/postProcess.js.map +1 -1
  112. package/PostProcesses/stereoscopicInterlacePostProcess.d.ts +3 -3
  113. package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
  114. package/PostProcesses/tonemapPostProcess.d.ts +2 -2
  115. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  116. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"colorGradingTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/colorGradingTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Matrix } from \"../../Maths/math.vector\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\n\r\n// Ensures Raw texture are included\r\nimport \"../../Engines/Extensions/engine.rawTexture\";\r\n\r\n/**\r\n * This represents a color grading texture. This acts as a lookup table LUT, useful during post process\r\n * It can help converting any input color in a desired output one. This can then be used to create effects\r\n * from sepia, black and white to sixties or futuristic rendering...\r\n *\r\n * The only supported format is currently 3dl.\r\n * More information on LUT: https://en.wikipedia.org/wiki/3D_lookup_table\r\n */\r\nexport class ColorGradingTexture extends BaseTexture {\r\n /**\r\n * The texture URL.\r\n */\r\n public url: string;\r\n\r\n /**\r\n * Empty line regex stored for GC.\r\n */\r\n private static _NoneEmptyLineRegex = /\\S+/;\r\n\r\n private _textureMatrix: Matrix;\r\n private _onLoad: Nullable<() => void>;\r\n\r\n /**\r\n * Instantiates a ColorGradingTexture from the following parameters.\r\n *\r\n * @param url The location of the color grading data (currently only supporting 3dl)\r\n * @param sceneOrEngine The scene or engine the texture will be used in\r\n * @param onLoad defines a callback triggered when the texture has been loaded\r\n */\r\n constructor(url: string, sceneOrEngine: Scene | AbstractEngine, onLoad: Nullable<() => void> = null) {\r\n super(sceneOrEngine);\r\n\r\n if (!url) {\r\n return;\r\n }\r\n\r\n this._textureMatrix = Matrix.Identity();\r\n this.name = url;\r\n this.url = url;\r\n this._onLoad = onLoad;\r\n\r\n this._texture = this._getFromCache(url, true);\r\n\r\n if (!this._texture) {\r\n const scene = this.getScene();\r\n if (scene) {\r\n if (!scene.useDelayedTextureLoading) {\r\n this._loadTexture();\r\n } else {\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n }\r\n } else {\r\n this._loadTexture();\r\n }\r\n } else {\r\n this._triggerOnLoad();\r\n }\r\n }\r\n\r\n /**\r\n * Fires the onload event from the constructor if requested.\r\n */\r\n private _triggerOnLoad(): void {\r\n if (this._onLoad) {\r\n this._onLoad();\r\n }\r\n }\r\n\r\n /**\r\n * @returns the texture matrix used in most of the material.\r\n * This is not used in color grading but keep for troubleshooting purpose (easily swap diffuse by colorgrading to look in).\r\n */\r\n public override getTextureMatrix(): Matrix {\r\n return this._textureMatrix;\r\n }\r\n\r\n /**\r\n * Occurs when the file being loaded is a .3dl LUT file.\r\n * @returns the 3D LUT texture\r\n */\r\n private _load3dlTexture() {\r\n const engine = this._getEngine()!;\r\n let texture: InternalTexture;\r\n if (!engine._features.support3DTextures) {\r\n texture = engine.createRawTexture(\r\n null,\r\n 1,\r\n 1,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n false,\r\n false,\r\n Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n null,\r\n Constants.TEXTURETYPE_UNSIGNED_INT\r\n );\r\n } else {\r\n texture = engine.createRawTexture3D(\r\n null,\r\n 1,\r\n 1,\r\n 1,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n false,\r\n false,\r\n Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n null,\r\n Constants.TEXTURETYPE_UNSIGNED_INT\r\n );\r\n }\r\n\r\n this._texture = texture;\r\n this._texture.isReady = false;\r\n\r\n this.isCube = false;\r\n this.is3D = engine._features.support3DTextures;\r\n this.wrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n this.wrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n this.wrapR = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n this.anisotropicFilteringLevel = 1;\r\n\r\n const callback = (text: string | ArrayBuffer) => {\r\n if (typeof text !== \"string\") {\r\n return;\r\n }\r\n\r\n let data: Nullable<Uint8Array> = null;\r\n let tempData: Nullable<Float32Array> = null;\r\n\r\n let line: string;\r\n const lines = text.split(\"\\n\");\r\n let size = 0,\r\n pixelIndexW = 0,\r\n pixelIndexH = 0,\r\n pixelIndexSlice = 0;\r\n let maxColor = 0;\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n line = lines[i];\r\n\r\n if (!ColorGradingTexture._NoneEmptyLineRegex.test(line)) {\r\n continue;\r\n }\r\n\r\n if (line.indexOf(\"#\") === 0) {\r\n continue;\r\n }\r\n\r\n const words = line.split(\" \");\r\n if (size === 0) {\r\n // Number of space + one\r\n size = words.length;\r\n data = new Uint8Array(size * size * size * 4); // volume texture of side size and rgb 8\r\n tempData = new Float32Array(size * size * size * 4);\r\n continue;\r\n }\r\n\r\n if (size != 0) {\r\n const r = Math.max(parseInt(words[0]), 0);\r\n const g = Math.max(parseInt(words[1]), 0);\r\n const b = Math.max(parseInt(words[2]), 0);\r\n\r\n maxColor = Math.max(r, maxColor);\r\n maxColor = Math.max(g, maxColor);\r\n maxColor = Math.max(b, maxColor);\r\n\r\n const pixelStorageIndex = (pixelIndexW + pixelIndexSlice * size + pixelIndexH * size * size) * 4;\r\n\r\n if (tempData) {\r\n tempData[pixelStorageIndex + 0] = r;\r\n tempData[pixelStorageIndex + 1] = g;\r\n tempData[pixelStorageIndex + 2] = b;\r\n }\r\n\r\n // Keep for reference in case of back compat problems.\r\n // pixelIndexSlice++;\r\n // if (pixelIndexSlice % size == 0) {\r\n // pixelIndexH++;\r\n // pixelIndexSlice = 0;\r\n // if (pixelIndexH % size == 0) {\r\n // pixelIndexW++;\r\n // pixelIndexH = 0;\r\n // }\r\n // }\r\n\r\n pixelIndexH++;\r\n if (pixelIndexH % size == 0) {\r\n pixelIndexSlice++;\r\n pixelIndexH = 0;\r\n if (pixelIndexSlice % size == 0) {\r\n pixelIndexW++;\r\n pixelIndexSlice = 0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (tempData && data) {\r\n for (let i = 0; i < tempData.length; i++) {\r\n if (i > 0 && (i + 1) % 4 === 0) {\r\n data[i] = 255;\r\n } else {\r\n const value = tempData[i];\r\n data[i] = (value / maxColor) * 255;\r\n }\r\n }\r\n }\r\n\r\n if (texture.is3D) {\r\n texture.updateSize(size, size, size);\r\n engine.updateRawTexture3D(texture, data, Constants.TEXTUREFORMAT_RGBA, false);\r\n } else {\r\n texture.updateSize(size * size, size);\r\n engine.updateRawTexture(texture, data, Constants.TEXTUREFORMAT_RGBA, false);\r\n }\r\n\r\n texture.isReady = true;\r\n this._triggerOnLoad();\r\n };\r\n\r\n const scene = this.getScene();\r\n if (scene) {\r\n scene._loadFile(this.url, callback);\r\n } else {\r\n engine._loadFile(this.url, callback);\r\n }\r\n\r\n return this._texture;\r\n }\r\n\r\n /**\r\n * Starts the loading process of the texture.\r\n */\r\n private _loadTexture() {\r\n if (this.url && this.url.toLocaleLowerCase().indexOf(\".3dl\") == this.url.length - 4) {\r\n this._load3dlTexture();\r\n }\r\n }\r\n\r\n /**\r\n * Clones the color grading texture.\r\n * @returns the cloned texture\r\n */\r\n public override clone(): ColorGradingTexture {\r\n const newTexture = new ColorGradingTexture(this.url, this.getScene() || this._getEngine()!);\r\n\r\n // Base texture\r\n newTexture.level = this.level;\r\n\r\n return newTexture;\r\n }\r\n\r\n /**\r\n * Called during delayed load for textures.\r\n */\r\n public override delayLoad(): void {\r\n if (this.delayLoadState !== Constants.DELAYLOADSTATE_NOTLOADED) {\r\n return;\r\n }\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\r\n this._texture = this._getFromCache(this.url, true);\r\n\r\n if (!this._texture) {\r\n this._loadTexture();\r\n }\r\n }\r\n\r\n /**\r\n * Parses a color grading texture serialized by Babylon.\r\n * @param parsedTexture The texture information being parsedTexture\r\n * @param scene The scene to load the texture in\r\n * @returns A color grading texture\r\n */\r\n public static Parse(parsedTexture: any, scene: Scene): Nullable<ColorGradingTexture> {\r\n let texture = null;\r\n if (parsedTexture.name && !parsedTexture.isRenderTarget) {\r\n texture = new ColorGradingTexture(parsedTexture.name, scene);\r\n texture.name = parsedTexture.name;\r\n texture.level = parsedTexture.level;\r\n }\r\n return texture;\r\n }\r\n\r\n /**\r\n * Serializes the LUT texture to json format.\r\n * @returns The JSON representation of the texture\r\n */\r\n public override serialize(): any {\r\n if (!this.name) {\r\n return null;\r\n }\r\n\r\n const serializationObject: any = {};\r\n serializationObject.name = this.name;\r\n serializationObject.level = this.level;\r\n serializationObject.customType = \"BABYLON.ColorGradingTexture\";\r\n\r\n return serializationObject;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ColorGradingTexture\", ColorGradingTexture);\r\n"]}
1
+ {"version":3,"file":"colorGradingTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/colorGradingTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Matrix } from \"../../Maths/math.vector\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\n\r\n/**\r\n * This represents a color grading texture. This acts as a lookup table LUT, useful during post process\r\n * It can help converting any input color in a desired output one. This can then be used to create effects\r\n * from sepia, black and white to sixties or futuristic rendering...\r\n *\r\n * The only supported format is currently 3dl.\r\n * More information on LUT: https://en.wikipedia.org/wiki/3D_lookup_table\r\n */\r\nexport class ColorGradingTexture extends BaseTexture {\r\n /**\r\n * The texture URL.\r\n */\r\n public url: string;\r\n\r\n /**\r\n * Empty line regex stored for GC.\r\n */\r\n private static _NoneEmptyLineRegex = /\\S+/;\r\n\r\n private _textureMatrix: Matrix;\r\n private _onLoad: Nullable<() => void>;\r\n\r\n /**\r\n * Instantiates a ColorGradingTexture from the following parameters.\r\n *\r\n * @param url The location of the color grading data (currently only supporting 3dl)\r\n * @param sceneOrEngine The scene or engine the texture will be used in\r\n * @param onLoad defines a callback triggered when the texture has been loaded\r\n */\r\n constructor(url: string, sceneOrEngine: Scene | AbstractEngine, onLoad: Nullable<() => void> = null) {\r\n super(sceneOrEngine);\r\n\r\n if (!url) {\r\n return;\r\n }\r\n\r\n this._textureMatrix = Matrix.Identity();\r\n this.name = url;\r\n this.url = url;\r\n this._onLoad = onLoad;\r\n\r\n this._texture = this._getFromCache(url, true);\r\n\r\n if (!this._texture) {\r\n const scene = this.getScene();\r\n if (scene) {\r\n if (!scene.useDelayedTextureLoading) {\r\n this._loadTexture();\r\n } else {\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n }\r\n } else {\r\n this._loadTexture();\r\n }\r\n } else {\r\n this._triggerOnLoad();\r\n }\r\n }\r\n\r\n /**\r\n * Fires the onload event from the constructor if requested.\r\n */\r\n private _triggerOnLoad(): void {\r\n if (this._onLoad) {\r\n this._onLoad();\r\n }\r\n }\r\n\r\n /**\r\n * @returns the texture matrix used in most of the material.\r\n * This is not used in color grading but keep for troubleshooting purpose (easily swap diffuse by colorgrading to look in).\r\n */\r\n public override getTextureMatrix(): Matrix {\r\n return this._textureMatrix;\r\n }\r\n\r\n /**\r\n * Occurs when the file being loaded is a .3dl LUT file.\r\n * @returns the 3D LUT texture\r\n */\r\n private _load3dlTexture() {\r\n const engine = this._getEngine()!;\r\n let texture: InternalTexture;\r\n if (!engine._features.support3DTextures) {\r\n texture = engine.createRawTexture(\r\n null,\r\n 1,\r\n 1,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n false,\r\n false,\r\n Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n null,\r\n Constants.TEXTURETYPE_UNSIGNED_INT\r\n );\r\n } else {\r\n texture = engine.createRawTexture3D(\r\n null,\r\n 1,\r\n 1,\r\n 1,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n false,\r\n false,\r\n Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n null,\r\n Constants.TEXTURETYPE_UNSIGNED_INT\r\n );\r\n }\r\n\r\n this._texture = texture;\r\n this._texture.isReady = false;\r\n\r\n this.isCube = false;\r\n this.is3D = engine._features.support3DTextures;\r\n this.wrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n this.wrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n this.wrapR = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n this.anisotropicFilteringLevel = 1;\r\n\r\n const callback = (text: string | ArrayBuffer) => {\r\n if (typeof text !== \"string\") {\r\n return;\r\n }\r\n\r\n let data: Nullable<Uint8Array> = null;\r\n let tempData: Nullable<Float32Array> = null;\r\n\r\n let line: string;\r\n const lines = text.split(\"\\n\");\r\n let size = 0,\r\n pixelIndexW = 0,\r\n pixelIndexH = 0,\r\n pixelIndexSlice = 0;\r\n let maxColor = 0;\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n line = lines[i];\r\n\r\n if (!ColorGradingTexture._NoneEmptyLineRegex.test(line)) {\r\n continue;\r\n }\r\n\r\n if (line.indexOf(\"#\") === 0) {\r\n continue;\r\n }\r\n\r\n const words = line.split(\" \");\r\n if (size === 0) {\r\n // Number of space + one\r\n size = words.length;\r\n data = new Uint8Array(size * size * size * 4); // volume texture of side size and rgb 8\r\n tempData = new Float32Array(size * size * size * 4);\r\n continue;\r\n }\r\n\r\n if (size != 0) {\r\n const r = Math.max(parseInt(words[0]), 0);\r\n const g = Math.max(parseInt(words[1]), 0);\r\n const b = Math.max(parseInt(words[2]), 0);\r\n\r\n maxColor = Math.max(r, maxColor);\r\n maxColor = Math.max(g, maxColor);\r\n maxColor = Math.max(b, maxColor);\r\n\r\n const pixelStorageIndex = (pixelIndexW + pixelIndexSlice * size + pixelIndexH * size * size) * 4;\r\n\r\n if (tempData) {\r\n tempData[pixelStorageIndex + 0] = r;\r\n tempData[pixelStorageIndex + 1] = g;\r\n tempData[pixelStorageIndex + 2] = b;\r\n }\r\n\r\n // Keep for reference in case of back compat problems.\r\n // pixelIndexSlice++;\r\n // if (pixelIndexSlice % size == 0) {\r\n // pixelIndexH++;\r\n // pixelIndexSlice = 0;\r\n // if (pixelIndexH % size == 0) {\r\n // pixelIndexW++;\r\n // pixelIndexH = 0;\r\n // }\r\n // }\r\n\r\n pixelIndexH++;\r\n if (pixelIndexH % size == 0) {\r\n pixelIndexSlice++;\r\n pixelIndexH = 0;\r\n if (pixelIndexSlice % size == 0) {\r\n pixelIndexW++;\r\n pixelIndexSlice = 0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (tempData && data) {\r\n for (let i = 0; i < tempData.length; i++) {\r\n if (i > 0 && (i + 1) % 4 === 0) {\r\n data[i] = 255;\r\n } else {\r\n const value = tempData[i];\r\n data[i] = (value / maxColor) * 255;\r\n }\r\n }\r\n }\r\n\r\n if (texture.is3D) {\r\n texture.updateSize(size, size, size);\r\n engine.updateRawTexture3D(texture, data, Constants.TEXTUREFORMAT_RGBA, false);\r\n } else {\r\n texture.updateSize(size * size, size);\r\n engine.updateRawTexture(texture, data, Constants.TEXTUREFORMAT_RGBA, false);\r\n }\r\n\r\n texture.isReady = true;\r\n this._triggerOnLoad();\r\n };\r\n\r\n const scene = this.getScene();\r\n if (scene) {\r\n scene._loadFile(this.url, callback);\r\n } else {\r\n engine._loadFile(this.url, callback);\r\n }\r\n\r\n return this._texture;\r\n }\r\n\r\n /**\r\n * Starts the loading process of the texture.\r\n */\r\n private _loadTexture() {\r\n if (this.url && this.url.toLocaleLowerCase().indexOf(\".3dl\") == this.url.length - 4) {\r\n this._load3dlTexture();\r\n }\r\n }\r\n\r\n /**\r\n * Clones the color grading texture.\r\n * @returns the cloned texture\r\n */\r\n public override clone(): ColorGradingTexture {\r\n const newTexture = new ColorGradingTexture(this.url, this.getScene() || this._getEngine()!);\r\n\r\n // Base texture\r\n newTexture.level = this.level;\r\n\r\n return newTexture;\r\n }\r\n\r\n /**\r\n * Called during delayed load for textures.\r\n */\r\n public override delayLoad(): void {\r\n if (this.delayLoadState !== Constants.DELAYLOADSTATE_NOTLOADED) {\r\n return;\r\n }\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\r\n this._texture = this._getFromCache(this.url, true);\r\n\r\n if (!this._texture) {\r\n this._loadTexture();\r\n }\r\n }\r\n\r\n /**\r\n * Parses a color grading texture serialized by Babylon.\r\n * @param parsedTexture The texture information being parsedTexture\r\n * @param scene The scene to load the texture in\r\n * @returns A color grading texture\r\n */\r\n public static Parse(parsedTexture: any, scene: Scene): Nullable<ColorGradingTexture> {\r\n let texture = null;\r\n if (parsedTexture.name && !parsedTexture.isRenderTarget) {\r\n texture = new ColorGradingTexture(parsedTexture.name, scene);\r\n texture.name = parsedTexture.name;\r\n texture.level = parsedTexture.level;\r\n }\r\n return texture;\r\n }\r\n\r\n /**\r\n * Serializes the LUT texture to json format.\r\n * @returns The JSON representation of the texture\r\n */\r\n public override serialize(): any {\r\n if (!this.name) {\r\n return null;\r\n }\r\n\r\n const serializationObject: any = {};\r\n serializationObject.name = this.name;\r\n serializationObject.level = this.level;\r\n serializationObject.customType = \"BABYLON.ColorGradingTexture\";\r\n\r\n return serializationObject;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ColorGradingTexture\", ColorGradingTexture);\r\n"]}
@@ -5,7 +5,6 @@ import { BaseTexture } from "../../Materials/Textures/baseTexture";
5
5
  import type { AbstractEngine } from "../../Engines/abstractEngine";
6
6
  import { Observable } from "../../Misc/observable";
7
7
  import "../../Engines/AbstractEngine/abstractEngine.cubeTexture";
8
- import "../../Engines/Extensions/engine.cubeTexture";
9
8
  import "../../Engines/Extensions/engine.prefilteredCubeTexture";
10
9
  /**
11
10
  * Defines the available options when creating a cube texture
@@ -9,7 +9,6 @@ import { GetClass, RegisterClass } from "../../Misc/typeStore.js";
9
9
  import { Observable } from "../../Misc/observable.js";
10
10
  import { SerializationHelper } from "../../Misc/decorators.serialization.js";
11
11
  import "../../Engines/AbstractEngine/abstractEngine.cubeTexture.js";
12
- import "../../Engines/Extensions/engine.cubeTexture.js";
13
12
  import "../../Engines/Extensions/engine.prefilteredCubeTexture.js";
14
13
  // The default scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness
15
14
  const defaultLodScale = 0.8;
@@ -1 +1 @@
1
- {"version":3,"file":"cubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/cubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize, serializeAsMatrix, serializeAsVector3 } from \"../../Misc/decorators\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Matrix, TmpVectors, Vector3 } from \"../../Maths/math.vector\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { GetClass, RegisterClass } from \"../../Misc/typeStore\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\n\r\nimport \"../../Engines/AbstractEngine/abstractEngine.cubeTexture\";\r\nimport \"../../Engines/Extensions/engine.cubeTexture\";\r\nimport \"../../Engines/Extensions/engine.prefilteredCubeTexture\";\r\n\r\n/**\r\n * Defines the available options when creating a cube texture\r\n */\r\nexport interface ICubeTextureCreationOptions {\r\n /** Defines the suffixes add to the picture name in case six images are in use like _px.jpg */\r\n extensions?: string[];\r\n\r\n /** noMipmap defines if mipmaps should be created or not */\r\n noMipmap?: boolean;\r\n\r\n /** files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz */\r\n files?: string[];\r\n\r\n /** buffer to load instead of loading the data from the url */\r\n buffer?: ArrayBufferView;\r\n\r\n /** onLoad defines a callback triggered at the end of the file load if no errors occurred */\r\n onLoad?: () => void;\r\n\r\n /** onError defines a callback triggered in case of error during load */\r\n onError?: (message?: string, exception?: any) => void;\r\n\r\n /** format defines the internal format to use for the texture once loaded */\r\n format?: number;\r\n\r\n /** prefiltered defines whether or not the texture is created from prefiltered data */\r\n prefiltered?: boolean;\r\n\r\n /** forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name */\r\n forcedExtension?: any;\r\n\r\n /** createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary */\r\n createPolynomials?: boolean;\r\n\r\n /** lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness */\r\n lodScale?: number;\r\n\r\n /** lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness */\r\n lodOffset?: number;\r\n\r\n /** loaderOptions options to be passed to the loader */\r\n loaderOptions?: any;\r\n\r\n /** useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false) */\r\n useSRGBBuffer?: boolean;\r\n}\r\n\r\n// The default scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\nconst defaultLodScale = 0.8;\r\n\r\n/**\r\n * Class for creating a cube texture\r\n */\r\nexport class CubeTexture extends BaseTexture {\r\n private _delayedOnLoad: Nullable<() => void>;\r\n private _delayedOnError: Nullable<(message?: string, exception?: any) => void>;\r\n private _lodScale: number;\r\n private _lodOffset: number;\r\n\r\n /**\r\n * Observable triggered once the texture has been loaded.\r\n */\r\n public onLoadObservable: Observable<CubeTexture> = new Observable<CubeTexture>();\r\n\r\n /**\r\n * The url of the texture\r\n */\r\n @serialize()\r\n public url: string;\r\n\r\n /**\r\n * Gets or sets the center of the bounding box associated with the cube texture.\r\n * It must define where the camera used to render the texture was set\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\r\n */\r\n @serializeAsVector3()\r\n public boundingBoxPosition = Vector3.Zero();\r\n\r\n private _boundingBoxSize: Vector3;\r\n\r\n /**\r\n * Gets or sets the size of the bounding box associated with the cube texture\r\n * When defined, the cubemap will switch to local mode\r\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\r\n * @example https://www.babylonjs-playground.com/#RNASML\r\n */\r\n public set boundingBoxSize(value: Vector3) {\r\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\r\n return;\r\n }\r\n this._boundingBoxSize = value;\r\n const scene = this.getScene();\r\n if (scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n /**\r\n * Returns the bounding box size\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\r\n */\r\n @serializeAsVector3()\r\n public get boundingBoxSize(): Vector3 {\r\n return this._boundingBoxSize;\r\n }\r\n\r\n protected _rotationY: number = 0;\r\n\r\n /**\r\n * Sets texture matrix rotation angle around Y axis in radians.\r\n */\r\n @serialize(\"rotationY\")\r\n public set rotationY(value: number) {\r\n this._rotationY = value;\r\n this.setReflectionTextureMatrix(Matrix.RotationY(this._rotationY));\r\n }\r\n /**\r\n * Gets texture matrix rotation angle around Y axis radians.\r\n */\r\n public get rotationY(): number {\r\n return this._rotationY;\r\n }\r\n\r\n /**\r\n * Are mip maps generated for this texture or not.\r\n */\r\n public override get noMipmap(): boolean {\r\n return this._noMipmap;\r\n }\r\n\r\n private _noMipmap: boolean;\r\n\r\n /** @internal */\r\n @serialize(\"files\")\r\n public _files: Nullable<string[]> = null;\r\n\r\n @serialize(\"forcedExtension\")\r\n protected _forcedExtension: Nullable<string> = null;\r\n\r\n /**\r\n * Gets the forced extension (if any)\r\n */\r\n public get forcedExtension(): Nullable<string> {\r\n return this._forcedExtension;\r\n }\r\n\r\n @serialize(\"extensions\")\r\n private _extensions: Nullable<string[]> = null;\r\n\r\n @serializeAsMatrix(\"textureMatrix\")\r\n private _textureMatrix: Matrix;\r\n\r\n @serializeAsMatrix(\"textureMatrixRefraction\")\r\n private _textureMatrixRefraction: Matrix = new Matrix();\r\n\r\n private _format: number;\r\n private _createPolynomials: boolean;\r\n private _loaderOptions: any;\r\n private _useSRGBBuffer?: boolean;\r\n private _buffer: Nullable<ArrayBufferView> = null;\r\n\r\n /**\r\n * Creates a cube texture from an array of image urls\r\n * @param files defines an array of image urls\r\n * @param scene defines the hosting scene\r\n * @param noMipmap specifies if mip maps are not used\r\n * @returns a cube texture\r\n */\r\n public static CreateFromImages(files: string[], scene: Scene, noMipmap?: boolean): CubeTexture {\r\n let rootUrlKey = \"\";\r\n\r\n files.forEach((url) => (rootUrlKey += url));\r\n\r\n return new CubeTexture(rootUrlKey, scene, null, noMipmap, files);\r\n }\r\n\r\n /**\r\n * Creates and return a texture created from prefilterd data by tools like IBL Baker or Lys.\r\n * @param url defines the url of the prefiltered texture\r\n * @param scene defines the scene the texture is attached to\r\n * @param forcedExtension defines the extension of the file if different from the url\r\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\r\n * @returns the prefiltered texture\r\n */\r\n public static CreateFromPrefilteredData(url: string, scene: Scene, forcedExtension: any = null, createPolynomials: boolean = true) {\r\n const oldValue = scene.useDelayedTextureLoading;\r\n scene.useDelayedTextureLoading = false;\r\n\r\n const result = new CubeTexture(url, scene, null, false, null, null, null, undefined, true, forcedExtension, createPolynomials);\r\n\r\n scene.useDelayedTextureLoading = oldValue;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a cube texture to use with reflection for instance. It can be based upon dds or six images as well\r\n * as prefiltered data.\r\n * @param rootUrl defines the url of the texture or the root name of the six images\r\n * @param sceneOrEngine defines the scene or engine the texture is attached to\r\n * @param extensionsOrOptions defines the suffixes add to the picture name in case six images are in use like _px.jpg or set of all options to create the cube texture\r\n * @param noMipmap defines if mipmaps should be created or not\r\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\r\n * @param onLoad defines a callback triggered at the end of the file load if no errors occurred\r\n * @param onError defines a callback triggered in case of error during load\r\n * @param format defines the internal format to use for the texture once loaded\r\n * @param prefiltered defines whether or not the texture is created from prefiltered data\r\n * @param forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name\r\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @param loaderOptions options to be passed to the loader\r\n * @param useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false)\r\n * @returns the cube texture\r\n */\r\n constructor(\r\n rootUrl: string,\r\n sceneOrEngine: Scene | AbstractEngine,\r\n extensionsOrOptions: Nullable<string[] | ICubeTextureCreationOptions> = null,\r\n noMipmap: boolean = false,\r\n files: Nullable<string[]> = null,\r\n onLoad: Nullable<() => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format: number = Constants.TEXTUREFORMAT_RGBA,\r\n prefiltered = false,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = false,\r\n lodScale: number = defaultLodScale,\r\n lodOffset: number = 0,\r\n loaderOptions?: any,\r\n useSRGBBuffer?: boolean\r\n ) {\r\n super(sceneOrEngine);\r\n\r\n this.name = rootUrl;\r\n this.url = rootUrl;\r\n this._noMipmap = noMipmap;\r\n this.hasAlpha = false;\r\n this.isCube = true;\r\n this._textureMatrix = Matrix.Identity();\r\n this.coordinatesMode = Texture.CUBIC_MODE;\r\n\r\n let extensions: Nullable<string[]> = null;\r\n let buffer: Nullable<ArrayBufferView> = null;\r\n\r\n if (extensionsOrOptions !== null && !Array.isArray(extensionsOrOptions)) {\r\n extensions = extensionsOrOptions.extensions ?? null;\r\n this._noMipmap = extensionsOrOptions.noMipmap ?? false;\r\n files = extensionsOrOptions.files ?? null;\r\n buffer = extensionsOrOptions.buffer ?? null;\r\n this._format = extensionsOrOptions.format ?? Constants.TEXTUREFORMAT_RGBA;\r\n prefiltered = extensionsOrOptions.prefiltered ?? false;\r\n forcedExtension = extensionsOrOptions.forcedExtension ?? null;\r\n this._createPolynomials = extensionsOrOptions.createPolynomials ?? false;\r\n this._lodScale = extensionsOrOptions.lodScale ?? defaultLodScale;\r\n this._lodOffset = extensionsOrOptions.lodOffset ?? 0;\r\n this._loaderOptions = extensionsOrOptions.loaderOptions;\r\n this._useSRGBBuffer = extensionsOrOptions.useSRGBBuffer;\r\n onLoad = extensionsOrOptions.onLoad ?? null;\r\n onError = extensionsOrOptions.onError ?? null;\r\n } else {\r\n this._noMipmap = noMipmap;\r\n this._format = format;\r\n this._createPolynomials = createPolynomials;\r\n extensions = extensionsOrOptions;\r\n this._loaderOptions = loaderOptions;\r\n this._useSRGBBuffer = useSRGBBuffer;\r\n this._lodScale = lodScale;\r\n this._lodOffset = lodOffset;\r\n }\r\n\r\n if (!rootUrl && !files) {\r\n return;\r\n }\r\n\r\n this.updateURL(rootUrl, forcedExtension, onLoad, prefiltered, onError, extensions, this.getScene()?.useDelayedTextureLoading, files, buffer);\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"CubeTexture\"\r\n */\r\n public override getClassName(): string {\r\n return \"CubeTexture\";\r\n }\r\n\r\n /**\r\n * Update the url (and optional buffer) of this texture if url was null during construction.\r\n * @param url the url of the texture\r\n * @param forcedExtension defines the extension to use\r\n * @param onLoad callback called when the texture is loaded (defaults to null)\r\n * @param prefiltered Defines whether the updated texture is prefiltered or not\r\n * @param onError callback called if there was an error during the loading process (defaults to null)\r\n * @param extensions defines the suffixes add to the picture name in case six images are in use like _px.jpg...\r\n * @param delayLoad defines if the texture should be loaded now (false by default)\r\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\r\n * @param buffer the buffer to use instead of loading from the url\r\n */\r\n public updateURL(\r\n url: string,\r\n forcedExtension: Nullable<string> = null,\r\n onLoad: Nullable<() => void> = null,\r\n prefiltered: boolean = false,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n extensions: Nullable<string[]> = null,\r\n delayLoad = false,\r\n files: Nullable<string[]> = null,\r\n buffer: Nullable<ArrayBufferView> = null\r\n ): void {\r\n if (!this.name || this.name.startsWith(\"data:\")) {\r\n this.name = url;\r\n }\r\n this.url = url;\r\n\r\n if (forcedExtension) {\r\n this._forcedExtension = forcedExtension;\r\n }\r\n\r\n const lastDot = url.lastIndexOf(\".\");\r\n const extension = forcedExtension ? forcedExtension : lastDot > -1 ? url.substring(lastDot).toLowerCase() : \"\";\r\n const isDDS = extension.indexOf(\".dds\") === 0;\r\n const isEnv = extension.indexOf(\".env\") === 0;\r\n const isBasis = extension.indexOf(\".basis\") === 0;\r\n\r\n if (isEnv) {\r\n this.gammaSpace = false;\r\n this._prefiltered = false;\r\n this.anisotropicFilteringLevel = 1;\r\n } else {\r\n this._prefiltered = prefiltered;\r\n\r\n if (prefiltered) {\r\n this.gammaSpace = false;\r\n this.anisotropicFilteringLevel = 1;\r\n }\r\n }\r\n\r\n if (files) {\r\n this._files = files;\r\n } else {\r\n if (!isBasis && !isEnv && !isDDS && !extensions) {\r\n extensions = [\"_px.jpg\", \"_py.jpg\", \"_pz.jpg\", \"_nx.jpg\", \"_ny.jpg\", \"_nz.jpg\"];\r\n }\r\n\r\n this._files = this._files || [];\r\n this._files.length = 0;\r\n\r\n if (extensions) {\r\n for (let index = 0; index < extensions.length; index++) {\r\n this._files.push(url + extensions[index]);\r\n }\r\n this._extensions = extensions;\r\n }\r\n }\r\n\r\n this._buffer = buffer;\r\n\r\n if (delayLoad) {\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n this._delayedOnLoad = onLoad;\r\n this._delayedOnError = onError;\r\n } else {\r\n this._loadTexture(onLoad, onError);\r\n }\r\n }\r\n\r\n /**\r\n * Delays loading of the cube texture\r\n * @param forcedExtension defines the extension to use\r\n */\r\n public override delayLoad(forcedExtension?: string): void {\r\n if (this.delayLoadState !== Constants.DELAYLOADSTATE_NOTLOADED) {\r\n return;\r\n }\r\n if (forcedExtension) {\r\n this._forcedExtension = forcedExtension;\r\n }\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\r\n this._loadTexture(this._delayedOnLoad, this._delayedOnError);\r\n }\r\n\r\n /**\r\n * Returns the reflection texture matrix\r\n * @returns the reflection texture matrix\r\n */\r\n public override getReflectionTextureMatrix(): Matrix {\r\n return this._textureMatrix;\r\n }\r\n\r\n /**\r\n * Sets the reflection texture matrix\r\n * @param value Reflection texture matrix\r\n */\r\n public setReflectionTextureMatrix(value: Matrix): void {\r\n if (value.updateFlag === this._textureMatrix.updateFlag) {\r\n return;\r\n }\r\n\r\n if (value.isIdentity() !== this._textureMatrix.isIdentity()) {\r\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => mat.getActiveTextures().indexOf(this) !== -1);\r\n }\r\n\r\n this._textureMatrix = value;\r\n\r\n if (!this.getScene()?.useRightHandedSystem) {\r\n return;\r\n }\r\n\r\n const scale = TmpVectors.Vector3[0];\r\n const quat = TmpVectors.Quaternion[0];\r\n const trans = TmpVectors.Vector3[1];\r\n\r\n this._textureMatrix.decompose(scale, quat, trans);\r\n\r\n quat.z *= -1; // these two operations correspond to negating the x and y euler angles\r\n quat.w *= -1;\r\n\r\n Matrix.ComposeToRef(scale, quat, trans, this._textureMatrixRefraction);\r\n }\r\n\r\n /**\r\n * Gets a suitable rotate/transform matrix when the texture is used for refraction.\r\n * There's a separate function from getReflectionTextureMatrix because refraction requires a special configuration of the matrix in right-handed mode.\r\n * @returns The refraction matrix\r\n */\r\n public override getRefractionTextureMatrix(): Matrix {\r\n return this.getScene()?.useRightHandedSystem ? this._textureMatrixRefraction : this._textureMatrix;\r\n }\r\n\r\n private _loadTexture(onLoad: Nullable<() => void> = null, onError: Nullable<(message?: string, exception?: any) => void> = null) {\r\n const scene = this.getScene();\r\n const oldTexture = this._texture;\r\n this._texture = this._getFromCache(this.url, this._noMipmap, undefined, undefined, this._useSRGBBuffer, this.isCube);\r\n\r\n const onLoadProcessing = () => {\r\n this.onLoadObservable.notifyObservers(this);\r\n if (oldTexture) {\r\n oldTexture.dispose();\r\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n };\r\n\r\n const errorHandler = (message?: string, exception?: any) => {\r\n this._loadingError = true;\r\n this._errorObject = { message, exception };\r\n if (onError) {\r\n onError(message, exception);\r\n }\r\n Texture.OnTextureLoadErrorObservable.notifyObservers(this);\r\n };\r\n\r\n if (!this._texture) {\r\n if (this._prefiltered) {\r\n this._texture = this._getEngine()!.createPrefilteredCubeTexture(\r\n this.url,\r\n scene,\r\n this._lodScale,\r\n this._lodOffset,\r\n onLoad,\r\n errorHandler,\r\n this._format,\r\n this._forcedExtension,\r\n this._createPolynomials\r\n );\r\n } else {\r\n this._texture = this._getEngine()!.createCubeTexture(\r\n this.url,\r\n scene,\r\n this._files,\r\n this._noMipmap,\r\n onLoad,\r\n errorHandler,\r\n this._format,\r\n this._forcedExtension,\r\n false,\r\n this._lodScale,\r\n this._lodOffset,\r\n null,\r\n this._loaderOptions,\r\n !!this._useSRGBBuffer,\r\n this._buffer\r\n );\r\n }\r\n\r\n this._texture?.onLoadedObservable.add(() => this.onLoadObservable.notifyObservers(this));\r\n } else {\r\n if (this._texture.isReady) {\r\n Tools.SetImmediate(() => onLoadProcessing());\r\n } else {\r\n this._texture.onLoadedObservable.add(() => onLoadProcessing());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Parses text to create a cube texture\r\n * @param parsedTexture define the serialized text to read from\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root url of the cube texture\r\n * @returns a cube texture\r\n */\r\n public static Parse(parsedTexture: any, scene: Scene, rootUrl: string): CubeTexture {\r\n const texture = SerializationHelper.Parse(\r\n () => {\r\n let prefiltered: boolean = false;\r\n if (parsedTexture.prefiltered) {\r\n prefiltered = parsedTexture.prefiltered;\r\n }\r\n return new CubeTexture(\r\n rootUrl + (parsedTexture.url ?? parsedTexture.name),\r\n scene,\r\n parsedTexture.extensions,\r\n false,\r\n parsedTexture.files || null,\r\n null,\r\n null,\r\n undefined,\r\n prefiltered,\r\n parsedTexture.forcedExtension\r\n );\r\n },\r\n parsedTexture,\r\n scene\r\n );\r\n\r\n // Local Cubemaps\r\n if (parsedTexture.boundingBoxPosition) {\r\n texture.boundingBoxPosition = Vector3.FromArray(parsedTexture.boundingBoxPosition);\r\n }\r\n if (parsedTexture.boundingBoxSize) {\r\n texture.boundingBoxSize = Vector3.FromArray(parsedTexture.boundingBoxSize);\r\n }\r\n\r\n // Animations\r\n if (parsedTexture.animations) {\r\n for (let animationIndex = 0; animationIndex < parsedTexture.animations.length; animationIndex++) {\r\n const parsedAnimation = parsedTexture.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n texture.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n }\r\n\r\n return texture;\r\n }\r\n\r\n /**\r\n * Makes a clone, or deep copy, of the cube texture\r\n * @returns a new cube texture\r\n */\r\n public override clone(): CubeTexture {\r\n let uniqueId = 0;\r\n\r\n const newCubeTexture = SerializationHelper.Clone(() => {\r\n const cubeTexture = new CubeTexture(this.url, this.getScene() || this._getEngine()!, this._extensions, this._noMipmap, this._files);\r\n uniqueId = cubeTexture.uniqueId;\r\n\r\n return cubeTexture;\r\n }, this);\r\n\r\n newCubeTexture.uniqueId = uniqueId;\r\n\r\n return newCubeTexture;\r\n }\r\n}\r\n\r\nTexture._CubeTextureParser = CubeTexture.Parse;\r\n// Some exporters relies on Tools.Instantiate\r\nRegisterClass(\"BABYLON.CubeTexture\", CubeTexture);\r\n"]}
1
+ {"version":3,"file":"cubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/cubeTexture.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,OAAO,yDAAyD,CAAC;AACjE,OAAO,wDAAwD,CAAC;AAiDhE,gIAAgI;AAChI,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,WAAW;IA2BxC;;;;;OAKG;IACH,IAAW,eAAe,CAAC,KAAc;QACrC,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC9D,OAAO;SACV;QACD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,EAAE;YACP,KAAK,CAAC,uBAAuB,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;SACtE;IACL,CAAC;IACD;;;OAGG;IAEH,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAID;;OAEG;IAEH,IAAW,SAAS,CAAC,KAAa;QAC9B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACvE,CAAC;IACD;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAoB,QAAQ;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAWD;;OAEG;IACH,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAiBD;;;;;;OAMG;IACI,MAAM,CAAC,gBAAgB,CAAC,KAAe,EAAE,KAAY,EAAE,QAAkB;QAC5E,IAAI,UAAU,GAAG,EAAE,CAAC;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC;QAE5C,OAAO,IAAI,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,yBAAyB,CAAC,GAAW,EAAE,KAAY,EAAE,kBAAuB,IAAI,EAAE,oBAA6B,IAAI;QAC7H,MAAM,QAAQ,GAAG,KAAK,CAAC,wBAAwB,CAAC;QAChD,KAAK,CAAC,wBAAwB,GAAG,KAAK,CAAC;QAEvC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;QAE/H,KAAK,CAAC,wBAAwB,GAAG,QAAQ,CAAC;QAE1C,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,YACI,OAAe,EACf,aAAqC,EACrC,sBAAwE,IAAI,EAC5E,WAAoB,KAAK,EACzB,QAA4B,IAAI,EAChC,SAA+B,IAAI,EACnC,UAAiE,IAAI,EACrE,SAAiB,SAAS,CAAC,kBAAkB,EAC7C,WAAW,GAAG,KAAK,EACnB,kBAAuB,IAAI,EAC3B,oBAA6B,KAAK,EAClC,WAAmB,eAAe,EAClC,YAAoB,CAAC,EACrB,aAAmB,EACnB,aAAuB;QAEvB,KAAK,CAAC,aAAa,CAAC,CAAC;QA5KzB;;WAEG;QACI,qBAAgB,GAA4B,IAAI,UAAU,EAAe,CAAC;QAQjF;;;;WAIG;QAEI,wBAAmB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QA6BlC,eAAU,GAAW,CAAC,CAAC;QA0BjC,gBAAgB;QAET,WAAM,GAAuB,IAAI,CAAC;QAG/B,qBAAgB,GAAqB,IAAI,CAAC;QAU5C,gBAAW,GAAuB,IAAI,CAAC;QAMvC,6BAAwB,GAAW,IAAI,MAAM,EAAE,CAAC;QAMhD,YAAO,GAA8B,IAAI,CAAC;QA2E9C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACpB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;QAE1C,IAAI,UAAU,GAAuB,IAAI,CAAC;QAC1C,IAAI,MAAM,GAA8B,IAAI,CAAC;QAE7C,IAAI,mBAAmB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;YACrE,UAAU,GAAG,mBAAmB,CAAC,UAAU,IAAI,IAAI,CAAC;YACpD,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC,QAAQ,IAAI,KAAK,CAAC;YACvD,KAAK,GAAG,mBAAmB,CAAC,KAAK,IAAI,IAAI,CAAC;YAC1C,MAAM,GAAG,mBAAmB,CAAC,MAAM,IAAI,IAAI,CAAC;YAC5C,IAAI,CAAC,OAAO,GAAG,mBAAmB,CAAC,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC;YAC1E,WAAW,GAAG,mBAAmB,CAAC,WAAW,IAAI,KAAK,CAAC;YACvD,eAAe,GAAG,mBAAmB,CAAC,eAAe,IAAI,IAAI,CAAC;YAC9D,IAAI,CAAC,kBAAkB,GAAG,mBAAmB,CAAC,iBAAiB,IAAI,KAAK,CAAC;YACzE,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC,QAAQ,IAAI,eAAe,CAAC;YACjE,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,SAAS,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAC,aAAa,CAAC;YACxD,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAC,aAAa,CAAC;YACxD,MAAM,GAAG,mBAAmB,CAAC,MAAM,IAAI,IAAI,CAAC;YAC5C,OAAO,GAAG,mBAAmB,CAAC,OAAO,IAAI,IAAI,CAAC;SACjD;aAAM;YACH,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;YAC5C,UAAU,GAAG,mBAAmB,CAAC;YACjC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;YACpC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;YACpC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;SAC/B;QAED,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;YACpB,OAAO;SACV;QAED,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACjJ,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,aAAa,CAAC;IACzB,CAAC;IAED;;;;;;;;;;;OAWG;IACI,SAAS,CACZ,GAAW,EACX,kBAAoC,IAAI,EACxC,SAA+B,IAAI,EACnC,cAAuB,KAAK,EAC5B,UAAiE,IAAI,EACrE,aAAiC,IAAI,EACrC,SAAS,GAAG,KAAK,EACjB,QAA4B,IAAI,EAChC,SAAoC,IAAI;QAExC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC7C,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;SACnB;QACD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QAEf,IAAI,eAAe,EAAE;YACjB,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;SAC3C;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAElD,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;SACtC;aAAM;YACH,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;YAEhC,IAAI,WAAW,EAAE;gBACb,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;aACtC;SACJ;QAED,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACvB;aAAM;YACH,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE;gBAC7C,UAAU,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;aACnF;YAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAEvB,IAAI,UAAU,EAAE;gBACZ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;oBACpD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;iBAC7C;gBACD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;aACjC;SACJ;QAED,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,wBAAwB,CAAC;YACzD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;SAClC;aAAM;YACH,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACtC;IACL,CAAC;IAED;;;OAGG;IACa,SAAS,CAAC,eAAwB;QAC9C,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,wBAAwB,EAAE;YAC5D,OAAO;SACV;QACD,IAAI,eAAe,EAAE;YACjB,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;SAC3C;QAED,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,qBAAqB,CAAC;QACtD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACa,0BAA0B;QACtC,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,0BAA0B,CAAC,KAAa;QAC3C,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YACrD,OAAO;SACV;QAED,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE;YACzD,IAAI,CAAC,QAAQ,EAAE,EAAE,uBAAuB,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACxI;QAED,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,oBAAoB,EAAE;YACxC,OAAO;SACV;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAElD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,uEAAuE;QACrF,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEb,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC3E,CAAC;IAED;;;;OAIG;IACa,0BAA0B;QACtC,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;IACvG,CAAC;IAEO,YAAY,CAAC,SAA+B,IAAI,EAAE,UAAiE,IAAI;QAC3H,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAErH,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,UAAU,EAAE;gBACZ,UAAU,CAAC,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC,QAAQ,EAAE,EAAE,uBAAuB,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;aACjF;YACD,IAAI,MAAM,EAAE;gBACR,MAAM,EAAE,CAAC;aACZ;QACL,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,SAAe,EAAE,EAAE;YACvD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAC3C,IAAI,OAAO,EAAE;gBACT,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;aAC/B;YACD,OAAO,CAAC,4BAA4B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAG,CAAC,4BAA4B,CAC3D,IAAI,CAAC,GAAG,EACR,KAAK,EACL,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,UAAU,EACf,MAAM,EACN,YAAY,EACZ,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,kBAAkB,CAC1B,CAAC;aACL;iBAAM;gBACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAG,CAAC,iBAAiB,CAChD,IAAI,CAAC,GAAG,EACR,KAAK,EACL,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,EACd,MAAM,EACN,YAAY,EACZ,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,gBAAgB,EACrB,KAAK,EACL,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,UAAU,EACf,IAAI,EACJ,IAAI,CAAC,cAAc,EACnB,CAAC,CAAC,IAAI,CAAC,cAAc,EACrB,IAAI,CAAC,OAAO,CACf,CAAC;aACL;YAED,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;SAC5F;aAAM;YACH,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;gBACvB,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC;aAChD;iBAAM;gBACH,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC;aAClE;SACJ;IACL,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,aAAkB,EAAE,KAAY,EAAE,OAAe;QACjE,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CACrC,GAAG,EAAE;YACD,IAAI,WAAW,GAAY,KAAK,CAAC;YACjC,IAAI,aAAa,CAAC,WAAW,EAAE;gBAC3B,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;aAC3C;YACD,OAAO,IAAI,WAAW,CAClB,OAAO,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,EACnD,KAAK,EACL,aAAa,CAAC,UAAU,EACxB,KAAK,EACL,aAAa,CAAC,KAAK,IAAI,IAAI,EAC3B,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,WAAW,EACX,aAAa,CAAC,eAAe,CAChC,CAAC;QACN,CAAC,EACD,aAAa,EACb,KAAK,CACR,CAAC;QAEF,iBAAiB;QACjB,IAAI,aAAa,CAAC,mBAAmB,EAAE;YACnC,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;SACtF;QACD,IAAI,aAAa,CAAC,eAAe,EAAE;YAC/B,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;SAC9E;QAED,aAAa;QACb,IAAI,aAAa,CAAC,UAAU,EAAE;YAC1B,KAAK,IAAI,cAAc,GAAG,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE;gBAC7F,MAAM,eAAe,GAAG,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;gBACjE,MAAM,aAAa,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC;gBACpD,IAAI,aAAa,EAAE;oBACf,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;iBACjE;aACJ;SACJ;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;OAGG;IACa,KAAK;QACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE;YAClD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,UAAU,EAAG,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpI,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;YAEhC,OAAO,WAAW,CAAC;QACvB,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,cAAc,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEnC,OAAO,cAAc,CAAC;IAC1B,CAAC;CACJ;AApfU;IADN,SAAS,EAAE;wCACO;AAQZ;IADN,kBAAkB,EAAE;wDACuB;AAyB5C;IADC,kBAAkB,EAAE;kDAGpB;AAQD;IADC,SAAS,CAAC,WAAW,CAAC;4CAItB;AAmBM;IADN,SAAS,CAAC,OAAO,CAAC;2CACsB;AAG/B;IADT,SAAS,CAAC,iBAAiB,CAAC;qDACuB;AAU5C;IADP,SAAS,CAAC,YAAY,CAAC;gDACuB;AAGvC;IADP,iBAAiB,CAAC,eAAe,CAAC;mDACJ;AAGvB;IADP,iBAAiB,CAAC,yBAAyB,CAAC;6DACW;AAka5D,OAAO,CAAC,kBAAkB,GAAG,WAAW,CAAC,KAAK,CAAC;AAC/C,6CAA6C;AAC7C,aAAa,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC","sourcesContent":["import { serialize, serializeAsMatrix, serializeAsVector3 } from \"../../Misc/decorators\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Matrix, TmpVectors, Vector3 } from \"../../Maths/math.vector\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { GetClass, RegisterClass } from \"../../Misc/typeStore\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\n\r\nimport \"../../Engines/AbstractEngine/abstractEngine.cubeTexture\";\r\nimport \"../../Engines/Extensions/engine.prefilteredCubeTexture\";\r\n\r\n/**\r\n * Defines the available options when creating a cube texture\r\n */\r\nexport interface ICubeTextureCreationOptions {\r\n /** Defines the suffixes add to the picture name in case six images are in use like _px.jpg */\r\n extensions?: string[];\r\n\r\n /** noMipmap defines if mipmaps should be created or not */\r\n noMipmap?: boolean;\r\n\r\n /** files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz */\r\n files?: string[];\r\n\r\n /** buffer to load instead of loading the data from the url */\r\n buffer?: ArrayBufferView;\r\n\r\n /** onLoad defines a callback triggered at the end of the file load if no errors occurred */\r\n onLoad?: () => void;\r\n\r\n /** onError defines a callback triggered in case of error during load */\r\n onError?: (message?: string, exception?: any) => void;\r\n\r\n /** format defines the internal format to use for the texture once loaded */\r\n format?: number;\r\n\r\n /** prefiltered defines whether or not the texture is created from prefiltered data */\r\n prefiltered?: boolean;\r\n\r\n /** forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name */\r\n forcedExtension?: any;\r\n\r\n /** createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary */\r\n createPolynomials?: boolean;\r\n\r\n /** lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness */\r\n lodScale?: number;\r\n\r\n /** lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness */\r\n lodOffset?: number;\r\n\r\n /** loaderOptions options to be passed to the loader */\r\n loaderOptions?: any;\r\n\r\n /** useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false) */\r\n useSRGBBuffer?: boolean;\r\n}\r\n\r\n// The default scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\nconst defaultLodScale = 0.8;\r\n\r\n/**\r\n * Class for creating a cube texture\r\n */\r\nexport class CubeTexture extends BaseTexture {\r\n private _delayedOnLoad: Nullable<() => void>;\r\n private _delayedOnError: Nullable<(message?: string, exception?: any) => void>;\r\n private _lodScale: number;\r\n private _lodOffset: number;\r\n\r\n /**\r\n * Observable triggered once the texture has been loaded.\r\n */\r\n public onLoadObservable: Observable<CubeTexture> = new Observable<CubeTexture>();\r\n\r\n /**\r\n * The url of the texture\r\n */\r\n @serialize()\r\n public url: string;\r\n\r\n /**\r\n * Gets or sets the center of the bounding box associated with the cube texture.\r\n * It must define where the camera used to render the texture was set\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\r\n */\r\n @serializeAsVector3()\r\n public boundingBoxPosition = Vector3.Zero();\r\n\r\n private _boundingBoxSize: Vector3;\r\n\r\n /**\r\n * Gets or sets the size of the bounding box associated with the cube texture\r\n * When defined, the cubemap will switch to local mode\r\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\r\n * @example https://www.babylonjs-playground.com/#RNASML\r\n */\r\n public set boundingBoxSize(value: Vector3) {\r\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\r\n return;\r\n }\r\n this._boundingBoxSize = value;\r\n const scene = this.getScene();\r\n if (scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n /**\r\n * Returns the bounding box size\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\r\n */\r\n @serializeAsVector3()\r\n public get boundingBoxSize(): Vector3 {\r\n return this._boundingBoxSize;\r\n }\r\n\r\n protected _rotationY: number = 0;\r\n\r\n /**\r\n * Sets texture matrix rotation angle around Y axis in radians.\r\n */\r\n @serialize(\"rotationY\")\r\n public set rotationY(value: number) {\r\n this._rotationY = value;\r\n this.setReflectionTextureMatrix(Matrix.RotationY(this._rotationY));\r\n }\r\n /**\r\n * Gets texture matrix rotation angle around Y axis radians.\r\n */\r\n public get rotationY(): number {\r\n return this._rotationY;\r\n }\r\n\r\n /**\r\n * Are mip maps generated for this texture or not.\r\n */\r\n public override get noMipmap(): boolean {\r\n return this._noMipmap;\r\n }\r\n\r\n private _noMipmap: boolean;\r\n\r\n /** @internal */\r\n @serialize(\"files\")\r\n public _files: Nullable<string[]> = null;\r\n\r\n @serialize(\"forcedExtension\")\r\n protected _forcedExtension: Nullable<string> = null;\r\n\r\n /**\r\n * Gets the forced extension (if any)\r\n */\r\n public get forcedExtension(): Nullable<string> {\r\n return this._forcedExtension;\r\n }\r\n\r\n @serialize(\"extensions\")\r\n private _extensions: Nullable<string[]> = null;\r\n\r\n @serializeAsMatrix(\"textureMatrix\")\r\n private _textureMatrix: Matrix;\r\n\r\n @serializeAsMatrix(\"textureMatrixRefraction\")\r\n private _textureMatrixRefraction: Matrix = new Matrix();\r\n\r\n private _format: number;\r\n private _createPolynomials: boolean;\r\n private _loaderOptions: any;\r\n private _useSRGBBuffer?: boolean;\r\n private _buffer: Nullable<ArrayBufferView> = null;\r\n\r\n /**\r\n * Creates a cube texture from an array of image urls\r\n * @param files defines an array of image urls\r\n * @param scene defines the hosting scene\r\n * @param noMipmap specifies if mip maps are not used\r\n * @returns a cube texture\r\n */\r\n public static CreateFromImages(files: string[], scene: Scene, noMipmap?: boolean): CubeTexture {\r\n let rootUrlKey = \"\";\r\n\r\n files.forEach((url) => (rootUrlKey += url));\r\n\r\n return new CubeTexture(rootUrlKey, scene, null, noMipmap, files);\r\n }\r\n\r\n /**\r\n * Creates and return a texture created from prefilterd data by tools like IBL Baker or Lys.\r\n * @param url defines the url of the prefiltered texture\r\n * @param scene defines the scene the texture is attached to\r\n * @param forcedExtension defines the extension of the file if different from the url\r\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\r\n * @returns the prefiltered texture\r\n */\r\n public static CreateFromPrefilteredData(url: string, scene: Scene, forcedExtension: any = null, createPolynomials: boolean = true) {\r\n const oldValue = scene.useDelayedTextureLoading;\r\n scene.useDelayedTextureLoading = false;\r\n\r\n const result = new CubeTexture(url, scene, null, false, null, null, null, undefined, true, forcedExtension, createPolynomials);\r\n\r\n scene.useDelayedTextureLoading = oldValue;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a cube texture to use with reflection for instance. It can be based upon dds or six images as well\r\n * as prefiltered data.\r\n * @param rootUrl defines the url of the texture or the root name of the six images\r\n * @param sceneOrEngine defines the scene or engine the texture is attached to\r\n * @param extensionsOrOptions defines the suffixes add to the picture name in case six images are in use like _px.jpg or set of all options to create the cube texture\r\n * @param noMipmap defines if mipmaps should be created or not\r\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\r\n * @param onLoad defines a callback triggered at the end of the file load if no errors occurred\r\n * @param onError defines a callback triggered in case of error during load\r\n * @param format defines the internal format to use for the texture once loaded\r\n * @param prefiltered defines whether or not the texture is created from prefiltered data\r\n * @param forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name\r\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @param loaderOptions options to be passed to the loader\r\n * @param useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false)\r\n * @returns the cube texture\r\n */\r\n constructor(\r\n rootUrl: string,\r\n sceneOrEngine: Scene | AbstractEngine,\r\n extensionsOrOptions: Nullable<string[] | ICubeTextureCreationOptions> = null,\r\n noMipmap: boolean = false,\r\n files: Nullable<string[]> = null,\r\n onLoad: Nullable<() => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format: number = Constants.TEXTUREFORMAT_RGBA,\r\n prefiltered = false,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = false,\r\n lodScale: number = defaultLodScale,\r\n lodOffset: number = 0,\r\n loaderOptions?: any,\r\n useSRGBBuffer?: boolean\r\n ) {\r\n super(sceneOrEngine);\r\n\r\n this.name = rootUrl;\r\n this.url = rootUrl;\r\n this._noMipmap = noMipmap;\r\n this.hasAlpha = false;\r\n this.isCube = true;\r\n this._textureMatrix = Matrix.Identity();\r\n this.coordinatesMode = Texture.CUBIC_MODE;\r\n\r\n let extensions: Nullable<string[]> = null;\r\n let buffer: Nullable<ArrayBufferView> = null;\r\n\r\n if (extensionsOrOptions !== null && !Array.isArray(extensionsOrOptions)) {\r\n extensions = extensionsOrOptions.extensions ?? null;\r\n this._noMipmap = extensionsOrOptions.noMipmap ?? false;\r\n files = extensionsOrOptions.files ?? null;\r\n buffer = extensionsOrOptions.buffer ?? null;\r\n this._format = extensionsOrOptions.format ?? Constants.TEXTUREFORMAT_RGBA;\r\n prefiltered = extensionsOrOptions.prefiltered ?? false;\r\n forcedExtension = extensionsOrOptions.forcedExtension ?? null;\r\n this._createPolynomials = extensionsOrOptions.createPolynomials ?? false;\r\n this._lodScale = extensionsOrOptions.lodScale ?? defaultLodScale;\r\n this._lodOffset = extensionsOrOptions.lodOffset ?? 0;\r\n this._loaderOptions = extensionsOrOptions.loaderOptions;\r\n this._useSRGBBuffer = extensionsOrOptions.useSRGBBuffer;\r\n onLoad = extensionsOrOptions.onLoad ?? null;\r\n onError = extensionsOrOptions.onError ?? null;\r\n } else {\r\n this._noMipmap = noMipmap;\r\n this._format = format;\r\n this._createPolynomials = createPolynomials;\r\n extensions = extensionsOrOptions;\r\n this._loaderOptions = loaderOptions;\r\n this._useSRGBBuffer = useSRGBBuffer;\r\n this._lodScale = lodScale;\r\n this._lodOffset = lodOffset;\r\n }\r\n\r\n if (!rootUrl && !files) {\r\n return;\r\n }\r\n\r\n this.updateURL(rootUrl, forcedExtension, onLoad, prefiltered, onError, extensions, this.getScene()?.useDelayedTextureLoading, files, buffer);\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"CubeTexture\"\r\n */\r\n public override getClassName(): string {\r\n return \"CubeTexture\";\r\n }\r\n\r\n /**\r\n * Update the url (and optional buffer) of this texture if url was null during construction.\r\n * @param url the url of the texture\r\n * @param forcedExtension defines the extension to use\r\n * @param onLoad callback called when the texture is loaded (defaults to null)\r\n * @param prefiltered Defines whether the updated texture is prefiltered or not\r\n * @param onError callback called if there was an error during the loading process (defaults to null)\r\n * @param extensions defines the suffixes add to the picture name in case six images are in use like _px.jpg...\r\n * @param delayLoad defines if the texture should be loaded now (false by default)\r\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\r\n * @param buffer the buffer to use instead of loading from the url\r\n */\r\n public updateURL(\r\n url: string,\r\n forcedExtension: Nullable<string> = null,\r\n onLoad: Nullable<() => void> = null,\r\n prefiltered: boolean = false,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n extensions: Nullable<string[]> = null,\r\n delayLoad = false,\r\n files: Nullable<string[]> = null,\r\n buffer: Nullable<ArrayBufferView> = null\r\n ): void {\r\n if (!this.name || this.name.startsWith(\"data:\")) {\r\n this.name = url;\r\n }\r\n this.url = url;\r\n\r\n if (forcedExtension) {\r\n this._forcedExtension = forcedExtension;\r\n }\r\n\r\n const lastDot = url.lastIndexOf(\".\");\r\n const extension = forcedExtension ? forcedExtension : lastDot > -1 ? url.substring(lastDot).toLowerCase() : \"\";\r\n const isDDS = extension.indexOf(\".dds\") === 0;\r\n const isEnv = extension.indexOf(\".env\") === 0;\r\n const isBasis = extension.indexOf(\".basis\") === 0;\r\n\r\n if (isEnv) {\r\n this.gammaSpace = false;\r\n this._prefiltered = false;\r\n this.anisotropicFilteringLevel = 1;\r\n } else {\r\n this._prefiltered = prefiltered;\r\n\r\n if (prefiltered) {\r\n this.gammaSpace = false;\r\n this.anisotropicFilteringLevel = 1;\r\n }\r\n }\r\n\r\n if (files) {\r\n this._files = files;\r\n } else {\r\n if (!isBasis && !isEnv && !isDDS && !extensions) {\r\n extensions = [\"_px.jpg\", \"_py.jpg\", \"_pz.jpg\", \"_nx.jpg\", \"_ny.jpg\", \"_nz.jpg\"];\r\n }\r\n\r\n this._files = this._files || [];\r\n this._files.length = 0;\r\n\r\n if (extensions) {\r\n for (let index = 0; index < extensions.length; index++) {\r\n this._files.push(url + extensions[index]);\r\n }\r\n this._extensions = extensions;\r\n }\r\n }\r\n\r\n this._buffer = buffer;\r\n\r\n if (delayLoad) {\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n this._delayedOnLoad = onLoad;\r\n this._delayedOnError = onError;\r\n } else {\r\n this._loadTexture(onLoad, onError);\r\n }\r\n }\r\n\r\n /**\r\n * Delays loading of the cube texture\r\n * @param forcedExtension defines the extension to use\r\n */\r\n public override delayLoad(forcedExtension?: string): void {\r\n if (this.delayLoadState !== Constants.DELAYLOADSTATE_NOTLOADED) {\r\n return;\r\n }\r\n if (forcedExtension) {\r\n this._forcedExtension = forcedExtension;\r\n }\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\r\n this._loadTexture(this._delayedOnLoad, this._delayedOnError);\r\n }\r\n\r\n /**\r\n * Returns the reflection texture matrix\r\n * @returns the reflection texture matrix\r\n */\r\n public override getReflectionTextureMatrix(): Matrix {\r\n return this._textureMatrix;\r\n }\r\n\r\n /**\r\n * Sets the reflection texture matrix\r\n * @param value Reflection texture matrix\r\n */\r\n public setReflectionTextureMatrix(value: Matrix): void {\r\n if (value.updateFlag === this._textureMatrix.updateFlag) {\r\n return;\r\n }\r\n\r\n if (value.isIdentity() !== this._textureMatrix.isIdentity()) {\r\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => mat.getActiveTextures().indexOf(this) !== -1);\r\n }\r\n\r\n this._textureMatrix = value;\r\n\r\n if (!this.getScene()?.useRightHandedSystem) {\r\n return;\r\n }\r\n\r\n const scale = TmpVectors.Vector3[0];\r\n const quat = TmpVectors.Quaternion[0];\r\n const trans = TmpVectors.Vector3[1];\r\n\r\n this._textureMatrix.decompose(scale, quat, trans);\r\n\r\n quat.z *= -1; // these two operations correspond to negating the x and y euler angles\r\n quat.w *= -1;\r\n\r\n Matrix.ComposeToRef(scale, quat, trans, this._textureMatrixRefraction);\r\n }\r\n\r\n /**\r\n * Gets a suitable rotate/transform matrix when the texture is used for refraction.\r\n * There's a separate function from getReflectionTextureMatrix because refraction requires a special configuration of the matrix in right-handed mode.\r\n * @returns The refraction matrix\r\n */\r\n public override getRefractionTextureMatrix(): Matrix {\r\n return this.getScene()?.useRightHandedSystem ? this._textureMatrixRefraction : this._textureMatrix;\r\n }\r\n\r\n private _loadTexture(onLoad: Nullable<() => void> = null, onError: Nullable<(message?: string, exception?: any) => void> = null) {\r\n const scene = this.getScene();\r\n const oldTexture = this._texture;\r\n this._texture = this._getFromCache(this.url, this._noMipmap, undefined, undefined, this._useSRGBBuffer, this.isCube);\r\n\r\n const onLoadProcessing = () => {\r\n this.onLoadObservable.notifyObservers(this);\r\n if (oldTexture) {\r\n oldTexture.dispose();\r\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n };\r\n\r\n const errorHandler = (message?: string, exception?: any) => {\r\n this._loadingError = true;\r\n this._errorObject = { message, exception };\r\n if (onError) {\r\n onError(message, exception);\r\n }\r\n Texture.OnTextureLoadErrorObservable.notifyObservers(this);\r\n };\r\n\r\n if (!this._texture) {\r\n if (this._prefiltered) {\r\n this._texture = this._getEngine()!.createPrefilteredCubeTexture(\r\n this.url,\r\n scene,\r\n this._lodScale,\r\n this._lodOffset,\r\n onLoad,\r\n errorHandler,\r\n this._format,\r\n this._forcedExtension,\r\n this._createPolynomials\r\n );\r\n } else {\r\n this._texture = this._getEngine()!.createCubeTexture(\r\n this.url,\r\n scene,\r\n this._files,\r\n this._noMipmap,\r\n onLoad,\r\n errorHandler,\r\n this._format,\r\n this._forcedExtension,\r\n false,\r\n this._lodScale,\r\n this._lodOffset,\r\n null,\r\n this._loaderOptions,\r\n !!this._useSRGBBuffer,\r\n this._buffer\r\n );\r\n }\r\n\r\n this._texture?.onLoadedObservable.add(() => this.onLoadObservable.notifyObservers(this));\r\n } else {\r\n if (this._texture.isReady) {\r\n Tools.SetImmediate(() => onLoadProcessing());\r\n } else {\r\n this._texture.onLoadedObservable.add(() => onLoadProcessing());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Parses text to create a cube texture\r\n * @param parsedTexture define the serialized text to read from\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root url of the cube texture\r\n * @returns a cube texture\r\n */\r\n public static Parse(parsedTexture: any, scene: Scene, rootUrl: string): CubeTexture {\r\n const texture = SerializationHelper.Parse(\r\n () => {\r\n let prefiltered: boolean = false;\r\n if (parsedTexture.prefiltered) {\r\n prefiltered = parsedTexture.prefiltered;\r\n }\r\n return new CubeTexture(\r\n rootUrl + (parsedTexture.url ?? parsedTexture.name),\r\n scene,\r\n parsedTexture.extensions,\r\n false,\r\n parsedTexture.files || null,\r\n null,\r\n null,\r\n undefined,\r\n prefiltered,\r\n parsedTexture.forcedExtension\r\n );\r\n },\r\n parsedTexture,\r\n scene\r\n );\r\n\r\n // Local Cubemaps\r\n if (parsedTexture.boundingBoxPosition) {\r\n texture.boundingBoxPosition = Vector3.FromArray(parsedTexture.boundingBoxPosition);\r\n }\r\n if (parsedTexture.boundingBoxSize) {\r\n texture.boundingBoxSize = Vector3.FromArray(parsedTexture.boundingBoxSize);\r\n }\r\n\r\n // Animations\r\n if (parsedTexture.animations) {\r\n for (let animationIndex = 0; animationIndex < parsedTexture.animations.length; animationIndex++) {\r\n const parsedAnimation = parsedTexture.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n texture.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n }\r\n\r\n return texture;\r\n }\r\n\r\n /**\r\n * Makes a clone, or deep copy, of the cube texture\r\n * @returns a new cube texture\r\n */\r\n public override clone(): CubeTexture {\r\n let uniqueId = 0;\r\n\r\n const newCubeTexture = SerializationHelper.Clone(() => {\r\n const cubeTexture = new CubeTexture(this.url, this.getScene() || this._getEngine()!, this._extensions, this._noMipmap, this._files);\r\n uniqueId = cubeTexture.uniqueId;\r\n\r\n return cubeTexture;\r\n }, this);\r\n\r\n newCubeTexture.uniqueId = uniqueId;\r\n\r\n return newCubeTexture;\r\n }\r\n}\r\n\r\nTexture._CubeTextureParser = CubeTexture.Parse;\r\n// Some exporters relies on Tools.Instantiate\r\nRegisterClass(\"BABYLON.CubeTexture\", CubeTexture);\r\n"]}
@@ -1,7 +1,6 @@
1
1
  import { BaseTexture } from "./baseTexture";
2
2
  import type { Scene } from "../../scene";
3
3
  import type { Nullable } from "../../types";
4
- import "../../Engines/Extensions/engine.rawTexture";
5
4
  /**
6
5
  * This represents a texture coming from an equirectangular image supported by the web browser canvas.
7
6
  */
@@ -2,7 +2,6 @@ import { PanoramaToCubeMapTools } from "../../Misc/HighDynamicRange/panoramaToCu
2
2
  import { BaseTexture } from "./baseTexture.js";
3
3
  import { Texture } from "./texture.js";
4
4
  import { Tools } from "../../Misc/tools.js";
5
- import "../../Engines/Extensions/engine.rawTexture.js";
6
5
 
7
6
  import { LoadImage } from "../../Misc/fileTools.js";
8
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"equiRectangularCubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/equiRectangularCubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { PanoramaToCubeMapTools } from \"../../Misc/HighDynamicRange/panoramaToCubemap\";\r\nimport { BaseTexture } from \"./baseTexture\";\r\nimport { Texture } from \"./texture\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport \"../../Engines/Extensions/engine.rawTexture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { LoadImage } from \"../../Misc/fileTools\";\r\n\r\n/**\r\n * This represents a texture coming from an equirectangular image supported by the web browser canvas.\r\n */\r\nexport class EquiRectangularCubeTexture extends BaseTexture {\r\n /** The six faces of the cube. */\r\n private static _FacesMapping = [\"right\", \"left\", \"up\", \"down\", \"front\", \"back\"];\r\n\r\n private _noMipmap: boolean;\r\n private _onLoad: Nullable<() => void> = null;\r\n private _onError: Nullable<() => void> = null;\r\n\r\n /** The size of the cubemap. */\r\n private _size: number;\r\n\r\n /** Whether to supersample the input image */\r\n private _supersample: boolean;\r\n\r\n /** The buffer of the image. */\r\n private _buffer: ArrayBuffer;\r\n\r\n /** The width of the input image. */\r\n private _width: number;\r\n\r\n /** The height of the input image. */\r\n private _height: number;\r\n\r\n /** The URL to the image. */\r\n public url: string;\r\n\r\n /**\r\n * Instantiates an EquiRectangularCubeTexture from the following parameters.\r\n * @param url The location of the image\r\n * @param scene The scene the texture will be used in\r\n * @param size The cubemap desired size (the more it increases the longer the generation will be)\r\n * @param noMipmap Forces to not generate the mipmap if true\r\n * @param gammaSpace Specifies if the texture will be used in gamma or linear space\r\n * (the PBR material requires those textures in linear space, but the standard material would require them in Gamma space)\r\n * @param onLoad — defines a callback called when texture is loaded\r\n * @param onError — defines a callback called if there is an error\r\n * @param supersample — defines if texture must be supersampled (default: false)\r\n */\r\n constructor(\r\n url: string,\r\n scene: Scene,\r\n size: number,\r\n noMipmap: boolean = false,\r\n gammaSpace: boolean = true,\r\n onLoad: Nullable<() => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n supersample = false\r\n ) {\r\n super(scene);\r\n\r\n if (!url) {\r\n throw new Error(\"Image url is not set\");\r\n }\r\n\r\n this._coordinatesMode = Texture.CUBIC_MODE;\r\n this.name = url;\r\n this.url = url;\r\n this._size = size;\r\n this._supersample = supersample;\r\n this._noMipmap = noMipmap;\r\n this.gammaSpace = gammaSpace;\r\n this._onLoad = onLoad;\r\n this._onError = onError;\r\n\r\n this.hasAlpha = false;\r\n this.isCube = true;\r\n\r\n this._texture = this._getFromCache(url, this._noMipmap, undefined, undefined, undefined, this.isCube);\r\n\r\n if (!this._texture) {\r\n if (!scene.useDelayedTextureLoading) {\r\n this._loadImage(() => this._loadTexture(), this._onError);\r\n } else {\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n }\r\n } else if (onLoad) {\r\n if (this._texture.isReady) {\r\n Tools.SetImmediate(() => onLoad());\r\n } else {\r\n this._texture.onLoadedObservable.add(onLoad);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Load the image data, by putting the image on a canvas and extracting its buffer.\r\n * @param loadTextureCallback\r\n * @param onError\r\n */\r\n private _loadImage(loadTextureCallback: () => void, onError: Nullable<(message?: string, exception?: any) => void>): void {\r\n const scene = this.getScene();\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n // Create texture before loading\r\n const texture = scene\r\n .getEngine()\r\n .createRawCubeTexture(\r\n null,\r\n this._size,\r\n Constants.TEXTUREFORMAT_RGB,\r\n scene.getEngine().getCaps().textureFloat ? Constants.TEXTURETYPE_FLOAT : Constants.TEXTURETYPE_UNSIGNED_INTEGER,\r\n !this._noMipmap,\r\n false,\r\n Constants.TEXTURE_TRILINEAR_SAMPLINGMODE\r\n );\r\n texture.generateMipMaps = !this._noMipmap;\r\n scene.addPendingData(texture);\r\n texture.url = this.url;\r\n texture.isReady = false;\r\n scene.getEngine()._internalTexturesCache.push(texture);\r\n this._texture = texture;\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n LoadImage(\r\n this.url,\r\n (image) => {\r\n this._width = image.width;\r\n this._height = image.height;\r\n canvas.width = this._width;\r\n canvas.height = this._height;\r\n\r\n const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\r\n ctx.drawImage(image, 0, 0);\r\n\r\n const imageData = ctx.getImageData(0, 0, image.width, image.height);\r\n this._buffer = imageData.data.buffer as ArrayBuffer;\r\n\r\n canvas.remove();\r\n loadTextureCallback();\r\n },\r\n (_, e) => {\r\n scene.removePendingData(texture);\r\n if (onError) {\r\n onError(`${this.getClassName()} could not be loaded`, e);\r\n }\r\n },\r\n scene ? scene.offlineProvider : null\r\n );\r\n }\r\n\r\n /**\r\n * Convert the image buffer into a cubemap and create a CubeTexture.\r\n */\r\n private _loadTexture(): void {\r\n const scene = this.getScene();\r\n const callback = (): ArrayBufferView[] => {\r\n const imageData = this._getFloat32ArrayFromArrayBuffer(this._buffer);\r\n\r\n // Extract the raw linear data.\r\n const data = PanoramaToCubeMapTools.ConvertPanoramaToCubemap(imageData, this._width, this._height, this._size, this._supersample);\r\n\r\n const results = [];\r\n\r\n // Push each faces.\r\n for (let i = 0; i < 6; i++) {\r\n const dataFace = (data as any)[EquiRectangularCubeTexture._FacesMapping[i]];\r\n results.push(dataFace);\r\n }\r\n\r\n return results;\r\n };\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n const faceDataArrays = callback();\r\n\r\n const texture = this._texture!;\r\n scene.getEngine().updateRawCubeTexture(texture, faceDataArrays, texture.format, texture.type, texture.invertY);\r\n texture.isReady = true;\r\n scene.removePendingData(texture);\r\n\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n\r\n if (this._onLoad) {\r\n this._onLoad();\r\n }\r\n }\r\n\r\n /**\r\n * Convert the ArrayBuffer into a Float32Array and drop the transparency channel.\r\n * @param buffer The ArrayBuffer that should be converted.\r\n * @returns The buffer as Float32Array.\r\n */\r\n private _getFloat32ArrayFromArrayBuffer(buffer: ArrayBuffer): Float32Array {\r\n const dataView = new DataView(buffer);\r\n const floatImageData = new Float32Array((buffer.byteLength * 3) / 4);\r\n\r\n let k = 0;\r\n for (let i = 0; i < buffer.byteLength; i++) {\r\n // We drop the transparency channel, because we do not need/want it\r\n if ((i + 1) % 4 !== 0) {\r\n floatImageData[k++] = dataView.getUint8(i) / 255;\r\n }\r\n }\r\n\r\n return floatImageData;\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"EquiRectangularCubeTexture\"\r\n */\r\n public override getClassName(): string {\r\n return \"EquiRectangularCubeTexture\";\r\n }\r\n\r\n /**\r\n * Create a clone of the current EquiRectangularCubeTexture and return it.\r\n * @returns A clone of the current EquiRectangularCubeTexture.\r\n */\r\n public override clone(): EquiRectangularCubeTexture {\r\n const scene = this.getScene();\r\n if (!scene) {\r\n return this;\r\n }\r\n\r\n const newTexture = new EquiRectangularCubeTexture(this.url, scene, this._size, this._noMipmap, this.gammaSpace);\r\n\r\n // Base texture\r\n newTexture.level = this.level;\r\n newTexture.wrapU = this.wrapU;\r\n newTexture.wrapV = this.wrapV;\r\n newTexture.coordinatesIndex = this.coordinatesIndex;\r\n newTexture.coordinatesMode = this.coordinatesMode;\r\n\r\n return newTexture;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"equiRectangularCubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/equiRectangularCubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { PanoramaToCubeMapTools } from \"../../Misc/HighDynamicRange/panoramaToCubemap\";\r\nimport { BaseTexture } from \"./baseTexture\";\r\nimport { Texture } from \"./texture\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { LoadImage } from \"../../Misc/fileTools\";\r\n\r\n/**\r\n * This represents a texture coming from an equirectangular image supported by the web browser canvas.\r\n */\r\nexport class EquiRectangularCubeTexture extends BaseTexture {\r\n /** The six faces of the cube. */\r\n private static _FacesMapping = [\"right\", \"left\", \"up\", \"down\", \"front\", \"back\"];\r\n\r\n private _noMipmap: boolean;\r\n private _onLoad: Nullable<() => void> = null;\r\n private _onError: Nullable<() => void> = null;\r\n\r\n /** The size of the cubemap. */\r\n private _size: number;\r\n\r\n /** Whether to supersample the input image */\r\n private _supersample: boolean;\r\n\r\n /** The buffer of the image. */\r\n private _buffer: ArrayBuffer;\r\n\r\n /** The width of the input image. */\r\n private _width: number;\r\n\r\n /** The height of the input image. */\r\n private _height: number;\r\n\r\n /** The URL to the image. */\r\n public url: string;\r\n\r\n /**\r\n * Instantiates an EquiRectangularCubeTexture from the following parameters.\r\n * @param url The location of the image\r\n * @param scene The scene the texture will be used in\r\n * @param size The cubemap desired size (the more it increases the longer the generation will be)\r\n * @param noMipmap Forces to not generate the mipmap if true\r\n * @param gammaSpace Specifies if the texture will be used in gamma or linear space\r\n * (the PBR material requires those textures in linear space, but the standard material would require them in Gamma space)\r\n * @param onLoad — defines a callback called when texture is loaded\r\n * @param onError — defines a callback called if there is an error\r\n * @param supersample — defines if texture must be supersampled (default: false)\r\n */\r\n constructor(\r\n url: string,\r\n scene: Scene,\r\n size: number,\r\n noMipmap: boolean = false,\r\n gammaSpace: boolean = true,\r\n onLoad: Nullable<() => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n supersample = false\r\n ) {\r\n super(scene);\r\n\r\n if (!url) {\r\n throw new Error(\"Image url is not set\");\r\n }\r\n\r\n this._coordinatesMode = Texture.CUBIC_MODE;\r\n this.name = url;\r\n this.url = url;\r\n this._size = size;\r\n this._supersample = supersample;\r\n this._noMipmap = noMipmap;\r\n this.gammaSpace = gammaSpace;\r\n this._onLoad = onLoad;\r\n this._onError = onError;\r\n\r\n this.hasAlpha = false;\r\n this.isCube = true;\r\n\r\n this._texture = this._getFromCache(url, this._noMipmap, undefined, undefined, undefined, this.isCube);\r\n\r\n if (!this._texture) {\r\n if (!scene.useDelayedTextureLoading) {\r\n this._loadImage(() => this._loadTexture(), this._onError);\r\n } else {\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n }\r\n } else if (onLoad) {\r\n if (this._texture.isReady) {\r\n Tools.SetImmediate(() => onLoad());\r\n } else {\r\n this._texture.onLoadedObservable.add(onLoad);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Load the image data, by putting the image on a canvas and extracting its buffer.\r\n * @param loadTextureCallback\r\n * @param onError\r\n */\r\n private _loadImage(loadTextureCallback: () => void, onError: Nullable<(message?: string, exception?: any) => void>): void {\r\n const scene = this.getScene();\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n // Create texture before loading\r\n const texture = scene\r\n .getEngine()\r\n .createRawCubeTexture(\r\n null,\r\n this._size,\r\n Constants.TEXTUREFORMAT_RGB,\r\n scene.getEngine().getCaps().textureFloat ? Constants.TEXTURETYPE_FLOAT : Constants.TEXTURETYPE_UNSIGNED_INTEGER,\r\n !this._noMipmap,\r\n false,\r\n Constants.TEXTURE_TRILINEAR_SAMPLINGMODE\r\n );\r\n texture.generateMipMaps = !this._noMipmap;\r\n scene.addPendingData(texture);\r\n texture.url = this.url;\r\n texture.isReady = false;\r\n scene.getEngine()._internalTexturesCache.push(texture);\r\n this._texture = texture;\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n LoadImage(\r\n this.url,\r\n (image) => {\r\n this._width = image.width;\r\n this._height = image.height;\r\n canvas.width = this._width;\r\n canvas.height = this._height;\r\n\r\n const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\r\n ctx.drawImage(image, 0, 0);\r\n\r\n const imageData = ctx.getImageData(0, 0, image.width, image.height);\r\n this._buffer = imageData.data.buffer as ArrayBuffer;\r\n\r\n canvas.remove();\r\n loadTextureCallback();\r\n },\r\n (_, e) => {\r\n scene.removePendingData(texture);\r\n if (onError) {\r\n onError(`${this.getClassName()} could not be loaded`, e);\r\n }\r\n },\r\n scene ? scene.offlineProvider : null\r\n );\r\n }\r\n\r\n /**\r\n * Convert the image buffer into a cubemap and create a CubeTexture.\r\n */\r\n private _loadTexture(): void {\r\n const scene = this.getScene();\r\n const callback = (): ArrayBufferView[] => {\r\n const imageData = this._getFloat32ArrayFromArrayBuffer(this._buffer);\r\n\r\n // Extract the raw linear data.\r\n const data = PanoramaToCubeMapTools.ConvertPanoramaToCubemap(imageData, this._width, this._height, this._size, this._supersample);\r\n\r\n const results = [];\r\n\r\n // Push each faces.\r\n for (let i = 0; i < 6; i++) {\r\n const dataFace = (data as any)[EquiRectangularCubeTexture._FacesMapping[i]];\r\n results.push(dataFace);\r\n }\r\n\r\n return results;\r\n };\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n const faceDataArrays = callback();\r\n\r\n const texture = this._texture!;\r\n scene.getEngine().updateRawCubeTexture(texture, faceDataArrays, texture.format, texture.type, texture.invertY);\r\n texture.isReady = true;\r\n scene.removePendingData(texture);\r\n\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n\r\n if (this._onLoad) {\r\n this._onLoad();\r\n }\r\n }\r\n\r\n /**\r\n * Convert the ArrayBuffer into a Float32Array and drop the transparency channel.\r\n * @param buffer The ArrayBuffer that should be converted.\r\n * @returns The buffer as Float32Array.\r\n */\r\n private _getFloat32ArrayFromArrayBuffer(buffer: ArrayBuffer): Float32Array {\r\n const dataView = new DataView(buffer);\r\n const floatImageData = new Float32Array((buffer.byteLength * 3) / 4);\r\n\r\n let k = 0;\r\n for (let i = 0; i < buffer.byteLength; i++) {\r\n // We drop the transparency channel, because we do not need/want it\r\n if ((i + 1) % 4 !== 0) {\r\n floatImageData[k++] = dataView.getUint8(i) / 255;\r\n }\r\n }\r\n\r\n return floatImageData;\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"EquiRectangularCubeTexture\"\r\n */\r\n public override getClassName(): string {\r\n return \"EquiRectangularCubeTexture\";\r\n }\r\n\r\n /**\r\n * Create a clone of the current EquiRectangularCubeTexture and return it.\r\n * @returns A clone of the current EquiRectangularCubeTexture.\r\n */\r\n public override clone(): EquiRectangularCubeTexture {\r\n const scene = this.getScene();\r\n if (!scene) {\r\n return this;\r\n }\r\n\r\n const newTexture = new EquiRectangularCubeTexture(this.url, scene, this._size, this._noMipmap, this.gammaSpace);\r\n\r\n // Base texture\r\n newTexture.level = this.level;\r\n newTexture.wrapU = this.wrapU;\r\n newTexture.wrapV = this.wrapV;\r\n newTexture.coordinatesIndex = this.coordinatesIndex;\r\n newTexture.coordinatesMode = this.coordinatesMode;\r\n\r\n return newTexture;\r\n }\r\n}\r\n"]}
@@ -4,7 +4,6 @@ import { Matrix, Vector3 } from "../../Maths/math.vector";
4
4
  import { BaseTexture } from "../../Materials/Textures/baseTexture";
5
5
  import { Observable } from "../../Misc/observable";
6
6
  import type { AbstractEngine } from "../../Engines/abstractEngine";
7
- import "../../Engines/Extensions/engine.rawTexture";
8
7
  import "../../Materials/Textures/baseTexture.polynomial";
9
8
  /**
10
9
  * This represents a texture coming from an HDR input.
@@ -10,7 +10,6 @@ import { Tools } from "../../Misc/tools.js";
10
10
  import { ToGammaSpace } from "../../Maths/math.constants.js";
11
11
  import { HDRFiltering } from "../../Materials/Textures/Filtering/hdrFiltering.js";
12
12
  import { ToHalfFloat } from "../../Misc/textureTools.js";
13
- import "../../Engines/Extensions/engine.rawTexture.js";
14
13
  import "../../Materials/Textures/baseTexture.polynomial.js";
15
14
  /**
16
15
  * This represents a texture coming from an HDR input.
@@ -1 +1 @@
1
- {"version":3,"file":"hdrCubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/hdrCubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { GetCubeMapTextureData } from \"../../Misc/HighDynamicRange/hdr\";\r\nimport { CubeMapToSphericalPolynomialTools } from \"../../Misc/HighDynamicRange/cubemapToSphericalPolynomial\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { ToGammaSpace } from \"../../Maths/math.constants\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport { HDRFiltering } from \"../../Materials/Textures/Filtering/hdrFiltering\";\r\nimport { ToHalfFloat } from \"../../Misc/textureTools\";\r\nimport \"../../Engines/Extensions/engine.rawTexture\";\r\nimport \"../../Materials/Textures/baseTexture.polynomial\";\r\n\r\n/**\r\n * This represents a texture coming from an HDR input.\r\n *\r\n * The only supported format is currently panorama picture stored in RGBE format.\r\n * Example of such files can be found on Poly Haven: https://polyhaven.com/hdris\r\n */\r\nexport class HDRCubeTexture extends BaseTexture {\r\n private static _FacesMapping = [\"right\", \"left\", \"up\", \"down\", \"front\", \"back\"];\r\n\r\n private _generateHarmonics = true;\r\n private _noMipmap: boolean;\r\n private _prefilterOnLoad: boolean;\r\n private _textureMatrix: Matrix;\r\n private _size: number;\r\n private _supersample: boolean;\r\n private _onLoad: () => void;\r\n private _onError: Nullable<() => void> = null;\r\n\r\n /**\r\n * The texture URL.\r\n */\r\n public url: string;\r\n\r\n protected _isBlocking: boolean = true;\r\n /**\r\n * Sets whether or not the texture is blocking during loading.\r\n */\r\n public override set isBlocking(value: boolean) {\r\n this._isBlocking = value;\r\n }\r\n /**\r\n * Gets whether or not the texture is blocking during loading.\r\n */\r\n public override get isBlocking(): boolean {\r\n return this._isBlocking;\r\n }\r\n\r\n protected _rotationY: number = 0;\r\n /**\r\n * Sets texture matrix rotation angle around Y axis in radians.\r\n */\r\n public set rotationY(value: number) {\r\n this._rotationY = value;\r\n this.setReflectionTextureMatrix(Matrix.RotationY(this._rotationY));\r\n }\r\n /**\r\n * Gets texture matrix rotation angle around Y axis radians.\r\n */\r\n public get rotationY(): number {\r\n return this._rotationY;\r\n }\r\n\r\n /**\r\n * Gets or sets the center of the bounding box associated with the cube texture\r\n * It must define where the camera used to render the texture was set\r\n */\r\n public boundingBoxPosition = Vector3.Zero();\r\n\r\n private _boundingBoxSize: Vector3;\r\n\r\n /**\r\n * Gets or sets the size of the bounding box associated with the cube texture\r\n * When defined, the cubemap will switch to local mode\r\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\r\n * @example https://www.babylonjs-playground.com/#RNASML\r\n */\r\n public set boundingBoxSize(value: Vector3) {\r\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\r\n return;\r\n }\r\n this._boundingBoxSize = value;\r\n const scene = this.getScene();\r\n if (scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n public get boundingBoxSize(): Vector3 {\r\n return this._boundingBoxSize;\r\n }\r\n\r\n /**\r\n * Observable triggered once the texture has been loaded.\r\n */\r\n public onLoadObservable: Observable<HDRCubeTexture> = new Observable<HDRCubeTexture>();\r\n\r\n /**\r\n * Instantiates an HDRTexture from the following parameters.\r\n *\r\n * @param url The location of the HDR raw data (Panorama stored in RGBE format)\r\n * @param sceneOrEngine The scene or engine the texture will be used in\r\n * @param size The cubemap desired size (the more it increases the longer the generation will be)\r\n * @param noMipmap Forces to not generate the mipmap if true\r\n * @param generateHarmonics Specifies whether you want to extract the polynomial harmonics during the generation process\r\n * @param gammaSpace Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space)\r\n * @param prefilterOnLoad Prefilters HDR texture to allow use of this texture as a PBR reflection texture.\r\n * @param onLoad on success callback function\r\n * @param onError on error callback function\r\n * @param supersample Defines if texture must be supersampled (default: false)\r\n */\r\n constructor(\r\n url: string,\r\n sceneOrEngine: Scene | AbstractEngine,\r\n size: number,\r\n noMipmap = false,\r\n generateHarmonics = true,\r\n gammaSpace = false,\r\n prefilterOnLoad = false,\r\n onLoad: Nullable<() => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n supersample = false\r\n ) {\r\n super(sceneOrEngine);\r\n\r\n if (!url) {\r\n return;\r\n }\r\n\r\n this._coordinatesMode = Texture.CUBIC_MODE;\r\n this.name = url;\r\n this.url = url;\r\n this.hasAlpha = false;\r\n this.isCube = true;\r\n this._textureMatrix = Matrix.Identity();\r\n this._prefilterOnLoad = prefilterOnLoad;\r\n this._onLoad = () => {\r\n this.onLoadObservable.notifyObservers(this);\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n };\r\n\r\n this._onError = onError;\r\n this.gammaSpace = gammaSpace;\r\n\r\n this._noMipmap = noMipmap;\r\n this._size = size;\r\n this._supersample = supersample;\r\n this._generateHarmonics = generateHarmonics;\r\n\r\n this._texture = this._getFromCache(url, this._noMipmap, undefined, undefined, undefined, this.isCube);\r\n\r\n if (!this._texture) {\r\n if (!this.getScene()?.useDelayedTextureLoading) {\r\n this._loadTexture();\r\n } else {\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n }\r\n } else {\r\n if (this._texture.isReady) {\r\n Tools.SetImmediate(() => this._onLoad());\r\n } else {\r\n this._texture.onLoadedObservable.add(this._onLoad);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"HDRCubeTexture\"\r\n */\r\n public override getClassName(): string {\r\n return \"HDRCubeTexture\";\r\n }\r\n\r\n /**\r\n * Occurs when the file is raw .hdr file.\r\n */\r\n private _loadTexture() {\r\n const engine = this._getEngine()!;\r\n const caps = engine.getCaps();\r\n\r\n let textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (caps.textureFloat && caps.textureFloatLinearFiltering) {\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n } else if (caps.textureHalfFloat && caps.textureHalfFloatLinearFiltering) {\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n\r\n const callback = (buffer: ArrayBuffer): Nullable<ArrayBufferView[]> => {\r\n this.lodGenerationOffset = 0.0;\r\n this.lodGenerationScale = 0.8;\r\n\r\n // Extract the raw linear data.\r\n const data = GetCubeMapTextureData(buffer, this._size, this._supersample);\r\n\r\n // Generate harmonics if needed.\r\n if (this._generateHarmonics) {\r\n const sphericalPolynomial = CubeMapToSphericalPolynomialTools.ConvertCubeMapToSphericalPolynomial(data);\r\n this.sphericalPolynomial = sphericalPolynomial;\r\n }\r\n\r\n const results = [];\r\n\r\n let byteArray: Nullable<Uint8Array> = null;\r\n let shortArray: Nullable<Uint16Array> = null;\r\n\r\n // Push each faces.\r\n for (let j = 0; j < 6; j++) {\r\n // Create fallback array\r\n if (textureType === Constants.TEXTURETYPE_HALF_FLOAT) {\r\n shortArray = new Uint16Array(this._size * this._size * 3);\r\n } else if (textureType === Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n // 3 channels of 1 bytes per pixel in bytes.\r\n byteArray = new Uint8Array(this._size * this._size * 3);\r\n }\r\n\r\n const dataFace = <Float32Array>(<any>data)[HDRCubeTexture._FacesMapping[j]];\r\n\r\n // If special cases.\r\n if (this.gammaSpace || shortArray || byteArray) {\r\n for (let i = 0; i < this._size * this._size; i++) {\r\n // Put in gamma space if requested.\r\n if (this.gammaSpace) {\r\n dataFace[i * 3 + 0] = Math.pow(dataFace[i * 3 + 0], ToGammaSpace);\r\n dataFace[i * 3 + 1] = Math.pow(dataFace[i * 3 + 1], ToGammaSpace);\r\n dataFace[i * 3 + 2] = Math.pow(dataFace[i * 3 + 2], ToGammaSpace);\r\n }\r\n\r\n // Convert to half float texture for fallback.\r\n if (shortArray) {\r\n shortArray[i * 3 + 0] = ToHalfFloat(dataFace[i * 3 + 0]);\r\n shortArray[i * 3 + 1] = ToHalfFloat(dataFace[i * 3 + 1]);\r\n shortArray[i * 3 + 2] = ToHalfFloat(dataFace[i * 3 + 2]);\r\n }\r\n\r\n // Convert to int texture for fallback.\r\n if (byteArray) {\r\n let r = Math.max(dataFace[i * 3 + 0] * 255, 0);\r\n let g = Math.max(dataFace[i * 3 + 1] * 255, 0);\r\n let b = Math.max(dataFace[i * 3 + 2] * 255, 0);\r\n\r\n // May use luminance instead if the result is not accurate.\r\n const max = Math.max(Math.max(r, g), b);\r\n if (max > 255) {\r\n const scale = 255 / max;\r\n r *= scale;\r\n g *= scale;\r\n b *= scale;\r\n }\r\n\r\n byteArray[i * 3 + 0] = r;\r\n byteArray[i * 3 + 1] = g;\r\n byteArray[i * 3 + 2] = b;\r\n }\r\n }\r\n }\r\n\r\n if (shortArray) {\r\n results.push(shortArray);\r\n } else if (byteArray) {\r\n results.push(byteArray);\r\n } else {\r\n results.push(dataFace);\r\n }\r\n }\r\n\r\n return results;\r\n };\r\n\r\n if (engine._features.allowTexturePrefiltering && this._prefilterOnLoad) {\r\n const previousOnLoad = this._onLoad;\r\n const hdrFiltering = new HDRFiltering(engine);\r\n this._onLoad = () => {\r\n hdrFiltering.prefilter(this, previousOnLoad);\r\n };\r\n }\r\n\r\n this._texture = engine.createRawCubeTextureFromUrl(\r\n this.url,\r\n this.getScene(),\r\n this._size,\r\n Constants.TEXTUREFORMAT_RGB,\r\n textureType,\r\n this._noMipmap,\r\n callback,\r\n null,\r\n this._onLoad,\r\n this._onError\r\n );\r\n }\r\n\r\n public override clone(): HDRCubeTexture {\r\n const newTexture = new HDRCubeTexture(this.url, this.getScene() || this._getEngine()!, this._size, this._noMipmap, this._generateHarmonics, this.gammaSpace);\r\n\r\n // Base texture\r\n newTexture.level = this.level;\r\n newTexture.wrapU = this.wrapU;\r\n newTexture.wrapV = this.wrapV;\r\n newTexture.coordinatesIndex = this.coordinatesIndex;\r\n newTexture.coordinatesMode = this.coordinatesMode;\r\n\r\n return newTexture;\r\n }\r\n\r\n // Methods\r\n public override delayLoad(): void {\r\n if (this.delayLoadState !== Constants.DELAYLOADSTATE_NOTLOADED) {\r\n return;\r\n }\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\r\n this._texture = this._getFromCache(this.url, this._noMipmap);\r\n\r\n if (!this._texture) {\r\n this._loadTexture();\r\n }\r\n }\r\n\r\n /**\r\n * Get the texture reflection matrix used to rotate/transform the reflection.\r\n * @returns the reflection matrix\r\n */\r\n public override getReflectionTextureMatrix(): Matrix {\r\n return this._textureMatrix;\r\n }\r\n\r\n /**\r\n * Set the texture reflection matrix used to rotate/transform the reflection.\r\n * @param value Define the reflection matrix to set\r\n */\r\n public setReflectionTextureMatrix(value: Matrix): void {\r\n this._textureMatrix = value;\r\n\r\n if (value.updateFlag === this._textureMatrix.updateFlag) {\r\n return;\r\n }\r\n\r\n if (value.isIdentity() !== this._textureMatrix.isIdentity()) {\r\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => mat.getActiveTextures().indexOf(this) !== -1);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the texture and release its associated resources.\r\n */\r\n public override dispose(): void {\r\n this.onLoadObservable.clear();\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Parses a JSON representation of an HDR Texture in order to create the texture\r\n * @param parsedTexture Define the JSON representation\r\n * @param scene Define the scene the texture should be created in\r\n * @param rootUrl Define the root url in case we need to load relative dependencies\r\n * @returns the newly created texture after parsing\r\n */\r\n public static Parse(parsedTexture: any, scene: Scene, rootUrl: string): Nullable<HDRCubeTexture> {\r\n let texture = null;\r\n if (parsedTexture.name && !parsedTexture.isRenderTarget) {\r\n texture = new HDRCubeTexture(\r\n rootUrl + parsedTexture.name,\r\n scene,\r\n parsedTexture.size,\r\n parsedTexture.noMipmap,\r\n parsedTexture.generateHarmonics,\r\n parsedTexture.useInGammaSpace\r\n );\r\n texture.name = parsedTexture.name;\r\n texture.hasAlpha = parsedTexture.hasAlpha;\r\n texture.level = parsedTexture.level;\r\n texture.coordinatesMode = parsedTexture.coordinatesMode;\r\n texture.isBlocking = parsedTexture.isBlocking;\r\n }\r\n if (texture) {\r\n if (parsedTexture.boundingBoxPosition) {\r\n (<any>texture).boundingBoxPosition = Vector3.FromArray(parsedTexture.boundingBoxPosition);\r\n }\r\n if (parsedTexture.boundingBoxSize) {\r\n (<any>texture).boundingBoxSize = Vector3.FromArray(parsedTexture.boundingBoxSize);\r\n }\r\n if (parsedTexture.rotationY) {\r\n (<any>texture).rotationY = parsedTexture.rotationY;\r\n }\r\n }\r\n return texture;\r\n }\r\n\r\n public override serialize(): any {\r\n if (!this.name) {\r\n return null;\r\n }\r\n\r\n const serializationObject: any = {};\r\n serializationObject.name = this.name;\r\n serializationObject.hasAlpha = this.hasAlpha;\r\n serializationObject.isCube = true;\r\n serializationObject.level = this.level;\r\n serializationObject.size = this._size;\r\n serializationObject.coordinatesMode = this.coordinatesMode;\r\n serializationObject.useInGammaSpace = this.gammaSpace;\r\n serializationObject.generateHarmonics = this._generateHarmonics;\r\n serializationObject.customType = \"BABYLON.HDRCubeTexture\";\r\n serializationObject.noMipmap = this._noMipmap;\r\n serializationObject.isBlocking = this._isBlocking;\r\n serializationObject.rotationY = this._rotationY;\r\n\r\n return serializationObject;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.HDRCubeTexture\", HDRCubeTexture);\r\n"]}
1
+ {"version":3,"file":"hdrCubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/hdrCubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { GetCubeMapTextureData } from \"../../Misc/HighDynamicRange/hdr\";\r\nimport { CubeMapToSphericalPolynomialTools } from \"../../Misc/HighDynamicRange/cubemapToSphericalPolynomial\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { ToGammaSpace } from \"../../Maths/math.constants\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport { HDRFiltering } from \"../../Materials/Textures/Filtering/hdrFiltering\";\r\nimport { ToHalfFloat } from \"../../Misc/textureTools\";\r\nimport \"../../Materials/Textures/baseTexture.polynomial\";\r\n\r\n/**\r\n * This represents a texture coming from an HDR input.\r\n *\r\n * The only supported format is currently panorama picture stored in RGBE format.\r\n * Example of such files can be found on Poly Haven: https://polyhaven.com/hdris\r\n */\r\nexport class HDRCubeTexture extends BaseTexture {\r\n private static _FacesMapping = [\"right\", \"left\", \"up\", \"down\", \"front\", \"back\"];\r\n\r\n private _generateHarmonics = true;\r\n private _noMipmap: boolean;\r\n private _prefilterOnLoad: boolean;\r\n private _textureMatrix: Matrix;\r\n private _size: number;\r\n private _supersample: boolean;\r\n private _onLoad: () => void;\r\n private _onError: Nullable<() => void> = null;\r\n\r\n /**\r\n * The texture URL.\r\n */\r\n public url: string;\r\n\r\n protected _isBlocking: boolean = true;\r\n /**\r\n * Sets whether or not the texture is blocking during loading.\r\n */\r\n public override set isBlocking(value: boolean) {\r\n this._isBlocking = value;\r\n }\r\n /**\r\n * Gets whether or not the texture is blocking during loading.\r\n */\r\n public override get isBlocking(): boolean {\r\n return this._isBlocking;\r\n }\r\n\r\n protected _rotationY: number = 0;\r\n /**\r\n * Sets texture matrix rotation angle around Y axis in radians.\r\n */\r\n public set rotationY(value: number) {\r\n this._rotationY = value;\r\n this.setReflectionTextureMatrix(Matrix.RotationY(this._rotationY));\r\n }\r\n /**\r\n * Gets texture matrix rotation angle around Y axis radians.\r\n */\r\n public get rotationY(): number {\r\n return this._rotationY;\r\n }\r\n\r\n /**\r\n * Gets or sets the center of the bounding box associated with the cube texture\r\n * It must define where the camera used to render the texture was set\r\n */\r\n public boundingBoxPosition = Vector3.Zero();\r\n\r\n private _boundingBoxSize: Vector3;\r\n\r\n /**\r\n * Gets or sets the size of the bounding box associated with the cube texture\r\n * When defined, the cubemap will switch to local mode\r\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\r\n * @example https://www.babylonjs-playground.com/#RNASML\r\n */\r\n public set boundingBoxSize(value: Vector3) {\r\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\r\n return;\r\n }\r\n this._boundingBoxSize = value;\r\n const scene = this.getScene();\r\n if (scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n public get boundingBoxSize(): Vector3 {\r\n return this._boundingBoxSize;\r\n }\r\n\r\n /**\r\n * Observable triggered once the texture has been loaded.\r\n */\r\n public onLoadObservable: Observable<HDRCubeTexture> = new Observable<HDRCubeTexture>();\r\n\r\n /**\r\n * Instantiates an HDRTexture from the following parameters.\r\n *\r\n * @param url The location of the HDR raw data (Panorama stored in RGBE format)\r\n * @param sceneOrEngine The scene or engine the texture will be used in\r\n * @param size The cubemap desired size (the more it increases the longer the generation will be)\r\n * @param noMipmap Forces to not generate the mipmap if true\r\n * @param generateHarmonics Specifies whether you want to extract the polynomial harmonics during the generation process\r\n * @param gammaSpace Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space)\r\n * @param prefilterOnLoad Prefilters HDR texture to allow use of this texture as a PBR reflection texture.\r\n * @param onLoad on success callback function\r\n * @param onError on error callback function\r\n * @param supersample Defines if texture must be supersampled (default: false)\r\n */\r\n constructor(\r\n url: string,\r\n sceneOrEngine: Scene | AbstractEngine,\r\n size: number,\r\n noMipmap = false,\r\n generateHarmonics = true,\r\n gammaSpace = false,\r\n prefilterOnLoad = false,\r\n onLoad: Nullable<() => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n supersample = false\r\n ) {\r\n super(sceneOrEngine);\r\n\r\n if (!url) {\r\n return;\r\n }\r\n\r\n this._coordinatesMode = Texture.CUBIC_MODE;\r\n this.name = url;\r\n this.url = url;\r\n this.hasAlpha = false;\r\n this.isCube = true;\r\n this._textureMatrix = Matrix.Identity();\r\n this._prefilterOnLoad = prefilterOnLoad;\r\n this._onLoad = () => {\r\n this.onLoadObservable.notifyObservers(this);\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n };\r\n\r\n this._onError = onError;\r\n this.gammaSpace = gammaSpace;\r\n\r\n this._noMipmap = noMipmap;\r\n this._size = size;\r\n this._supersample = supersample;\r\n this._generateHarmonics = generateHarmonics;\r\n\r\n this._texture = this._getFromCache(url, this._noMipmap, undefined, undefined, undefined, this.isCube);\r\n\r\n if (!this._texture) {\r\n if (!this.getScene()?.useDelayedTextureLoading) {\r\n this._loadTexture();\r\n } else {\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n }\r\n } else {\r\n if (this._texture.isReady) {\r\n Tools.SetImmediate(() => this._onLoad());\r\n } else {\r\n this._texture.onLoadedObservable.add(this._onLoad);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"HDRCubeTexture\"\r\n */\r\n public override getClassName(): string {\r\n return \"HDRCubeTexture\";\r\n }\r\n\r\n /**\r\n * Occurs when the file is raw .hdr file.\r\n */\r\n private _loadTexture() {\r\n const engine = this._getEngine()!;\r\n const caps = engine.getCaps();\r\n\r\n let textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (caps.textureFloat && caps.textureFloatLinearFiltering) {\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n } else if (caps.textureHalfFloat && caps.textureHalfFloatLinearFiltering) {\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n\r\n const callback = (buffer: ArrayBuffer): Nullable<ArrayBufferView[]> => {\r\n this.lodGenerationOffset = 0.0;\r\n this.lodGenerationScale = 0.8;\r\n\r\n // Extract the raw linear data.\r\n const data = GetCubeMapTextureData(buffer, this._size, this._supersample);\r\n\r\n // Generate harmonics if needed.\r\n if (this._generateHarmonics) {\r\n const sphericalPolynomial = CubeMapToSphericalPolynomialTools.ConvertCubeMapToSphericalPolynomial(data);\r\n this.sphericalPolynomial = sphericalPolynomial;\r\n }\r\n\r\n const results = [];\r\n\r\n let byteArray: Nullable<Uint8Array> = null;\r\n let shortArray: Nullable<Uint16Array> = null;\r\n\r\n // Push each faces.\r\n for (let j = 0; j < 6; j++) {\r\n // Create fallback array\r\n if (textureType === Constants.TEXTURETYPE_HALF_FLOAT) {\r\n shortArray = new Uint16Array(this._size * this._size * 3);\r\n } else if (textureType === Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n // 3 channels of 1 bytes per pixel in bytes.\r\n byteArray = new Uint8Array(this._size * this._size * 3);\r\n }\r\n\r\n const dataFace = <Float32Array>(<any>data)[HDRCubeTexture._FacesMapping[j]];\r\n\r\n // If special cases.\r\n if (this.gammaSpace || shortArray || byteArray) {\r\n for (let i = 0; i < this._size * this._size; i++) {\r\n // Put in gamma space if requested.\r\n if (this.gammaSpace) {\r\n dataFace[i * 3 + 0] = Math.pow(dataFace[i * 3 + 0], ToGammaSpace);\r\n dataFace[i * 3 + 1] = Math.pow(dataFace[i * 3 + 1], ToGammaSpace);\r\n dataFace[i * 3 + 2] = Math.pow(dataFace[i * 3 + 2], ToGammaSpace);\r\n }\r\n\r\n // Convert to half float texture for fallback.\r\n if (shortArray) {\r\n shortArray[i * 3 + 0] = ToHalfFloat(dataFace[i * 3 + 0]);\r\n shortArray[i * 3 + 1] = ToHalfFloat(dataFace[i * 3 + 1]);\r\n shortArray[i * 3 + 2] = ToHalfFloat(dataFace[i * 3 + 2]);\r\n }\r\n\r\n // Convert to int texture for fallback.\r\n if (byteArray) {\r\n let r = Math.max(dataFace[i * 3 + 0] * 255, 0);\r\n let g = Math.max(dataFace[i * 3 + 1] * 255, 0);\r\n let b = Math.max(dataFace[i * 3 + 2] * 255, 0);\r\n\r\n // May use luminance instead if the result is not accurate.\r\n const max = Math.max(Math.max(r, g), b);\r\n if (max > 255) {\r\n const scale = 255 / max;\r\n r *= scale;\r\n g *= scale;\r\n b *= scale;\r\n }\r\n\r\n byteArray[i * 3 + 0] = r;\r\n byteArray[i * 3 + 1] = g;\r\n byteArray[i * 3 + 2] = b;\r\n }\r\n }\r\n }\r\n\r\n if (shortArray) {\r\n results.push(shortArray);\r\n } else if (byteArray) {\r\n results.push(byteArray);\r\n } else {\r\n results.push(dataFace);\r\n }\r\n }\r\n\r\n return results;\r\n };\r\n\r\n if (engine._features.allowTexturePrefiltering && this._prefilterOnLoad) {\r\n const previousOnLoad = this._onLoad;\r\n const hdrFiltering = new HDRFiltering(engine);\r\n this._onLoad = () => {\r\n hdrFiltering.prefilter(this, previousOnLoad);\r\n };\r\n }\r\n\r\n this._texture = engine.createRawCubeTextureFromUrl(\r\n this.url,\r\n this.getScene(),\r\n this._size,\r\n Constants.TEXTUREFORMAT_RGB,\r\n textureType,\r\n this._noMipmap,\r\n callback,\r\n null,\r\n this._onLoad,\r\n this._onError\r\n );\r\n }\r\n\r\n public override clone(): HDRCubeTexture {\r\n const newTexture = new HDRCubeTexture(this.url, this.getScene() || this._getEngine()!, this._size, this._noMipmap, this._generateHarmonics, this.gammaSpace);\r\n\r\n // Base texture\r\n newTexture.level = this.level;\r\n newTexture.wrapU = this.wrapU;\r\n newTexture.wrapV = this.wrapV;\r\n newTexture.coordinatesIndex = this.coordinatesIndex;\r\n newTexture.coordinatesMode = this.coordinatesMode;\r\n\r\n return newTexture;\r\n }\r\n\r\n // Methods\r\n public override delayLoad(): void {\r\n if (this.delayLoadState !== Constants.DELAYLOADSTATE_NOTLOADED) {\r\n return;\r\n }\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\r\n this._texture = this._getFromCache(this.url, this._noMipmap);\r\n\r\n if (!this._texture) {\r\n this._loadTexture();\r\n }\r\n }\r\n\r\n /**\r\n * Get the texture reflection matrix used to rotate/transform the reflection.\r\n * @returns the reflection matrix\r\n */\r\n public override getReflectionTextureMatrix(): Matrix {\r\n return this._textureMatrix;\r\n }\r\n\r\n /**\r\n * Set the texture reflection matrix used to rotate/transform the reflection.\r\n * @param value Define the reflection matrix to set\r\n */\r\n public setReflectionTextureMatrix(value: Matrix): void {\r\n this._textureMatrix = value;\r\n\r\n if (value.updateFlag === this._textureMatrix.updateFlag) {\r\n return;\r\n }\r\n\r\n if (value.isIdentity() !== this._textureMatrix.isIdentity()) {\r\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => mat.getActiveTextures().indexOf(this) !== -1);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the texture and release its associated resources.\r\n */\r\n public override dispose(): void {\r\n this.onLoadObservable.clear();\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Parses a JSON representation of an HDR Texture in order to create the texture\r\n * @param parsedTexture Define the JSON representation\r\n * @param scene Define the scene the texture should be created in\r\n * @param rootUrl Define the root url in case we need to load relative dependencies\r\n * @returns the newly created texture after parsing\r\n */\r\n public static Parse(parsedTexture: any, scene: Scene, rootUrl: string): Nullable<HDRCubeTexture> {\r\n let texture = null;\r\n if (parsedTexture.name && !parsedTexture.isRenderTarget) {\r\n texture = new HDRCubeTexture(\r\n rootUrl + parsedTexture.name,\r\n scene,\r\n parsedTexture.size,\r\n parsedTexture.noMipmap,\r\n parsedTexture.generateHarmonics,\r\n parsedTexture.useInGammaSpace\r\n );\r\n texture.name = parsedTexture.name;\r\n texture.hasAlpha = parsedTexture.hasAlpha;\r\n texture.level = parsedTexture.level;\r\n texture.coordinatesMode = parsedTexture.coordinatesMode;\r\n texture.isBlocking = parsedTexture.isBlocking;\r\n }\r\n if (texture) {\r\n if (parsedTexture.boundingBoxPosition) {\r\n (<any>texture).boundingBoxPosition = Vector3.FromArray(parsedTexture.boundingBoxPosition);\r\n }\r\n if (parsedTexture.boundingBoxSize) {\r\n (<any>texture).boundingBoxSize = Vector3.FromArray(parsedTexture.boundingBoxSize);\r\n }\r\n if (parsedTexture.rotationY) {\r\n (<any>texture).rotationY = parsedTexture.rotationY;\r\n }\r\n }\r\n return texture;\r\n }\r\n\r\n public override serialize(): any {\r\n if (!this.name) {\r\n return null;\r\n }\r\n\r\n const serializationObject: any = {};\r\n serializationObject.name = this.name;\r\n serializationObject.hasAlpha = this.hasAlpha;\r\n serializationObject.isCube = true;\r\n serializationObject.level = this.level;\r\n serializationObject.size = this._size;\r\n serializationObject.coordinatesMode = this.coordinatesMode;\r\n serializationObject.useInGammaSpace = this.gammaSpace;\r\n serializationObject.generateHarmonics = this._generateHarmonics;\r\n serializationObject.customType = \"BABYLON.HDRCubeTexture\";\r\n serializationObject.noMipmap = this._noMipmap;\r\n serializationObject.isBlocking = this._isBlocking;\r\n serializationObject.rotationY = this._rotationY;\r\n\r\n return serializationObject;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.HDRCubeTexture\", HDRCubeTexture);\r\n"]}
@@ -2,7 +2,6 @@ import type { Nullable } from "../../types";
2
2
  import type { Scene } from "../../scene";
3
3
  import type { SphericalPolynomial } from "../../Maths/sphericalPolynomial";
4
4
  import { CubeTexture } from "./cubeTexture";
5
- import "../../Engines/Extensions/engine.rawTexture";
6
5
  /**
7
6
  * Raw cube texture where the raw buffers are passed in
8
7
  */
@@ -2,7 +2,6 @@ import { SerializationHelper } from "../../Misc/decorators.serialization.js";
2
2
  import { _UpdateRGBDAsync as UpdateRGBDAsyncEnvTools } from "../../Misc/environmentTextureTools.js";
3
3
  import { CubeTexture } from "./cubeTexture.js";
4
4
 
5
- import "../../Engines/Extensions/engine.rawTexture.js";
6
5
  /**
7
6
  * Raw cube texture where the raw buffers are passed in
8
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"rawCubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/rawCubeTexture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,IAAI,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAKjG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,4CAA4C,CAAC;AAGpD;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC3C;;;;;;;;;;;OAWG;IACH,YACI,KAAY,EACZ,IAAiC,EACjC,IAAY,EACZ,SAAiB,SAAS,CAAC,kBAAkB,EAC7C,OAAe,SAAS,CAAC,wBAAwB,EACjD,kBAA2B,KAAK,EAChC,UAAmB,KAAK,EACxB,eAAuB,SAAS,CAAC,8BAA8B,EAC/D,cAAgC,IAAI;QAEpC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAEjB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC1I,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,IAAuB,EAAE,MAAc,EAAE,IAAY,EAAE,OAAgB,EAAE,cAAgC,IAAI;QACtH,IAAI,CAAC,QAAS,CAAC,SAAS,EAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC1H,CAAC;IAED;;;;;;;OAOG;IACI,eAAe,CAAC,IAAyB,EAAE,sBAAqD,IAAI,EAAE,WAAmB,GAAG,EAAE,YAAoB,CAAC;QACtJ,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAClH,CAAC;IAED;;;OAGG;IACa,KAAK;QACjB,OAAO,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAG,CAAC;YAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,QAAS,CAAC;YAEvC,MAAM,OAAO,GAAG,IAAI,cAAc,CAC9B,KAAK,EACL,eAAe,CAAC,gBAAiB,EACjC,eAAe,CAAC,KAAK,EACrB,eAAe,CAAC,MAAM,EACtB,eAAe,CAAC,IAAI,EACpB,eAAe,CAAC,eAAe,EAC/B,eAAe,CAAC,OAAO,EACvB,eAAe,CAAC,YAAY,EAC5B,eAAe,CAAC,YAAY,CAC/B,CAAC;YAEF,IAAI,eAAe,CAAC,MAAM,+CAAsC,EAAE;gBAC9D,OAAO,CAAC,eAAe,CACnB,eAAe,CAAC,qBAAsB,EACtC,eAAe,CAAC,oBAAoB,EACpC,eAAe,CAAC,mBAAmB,EACnC,eAAe,CAAC,oBAAoB,CACvC,CAAC;aACL;YAED,OAAO,OAAO,CAAC;QACnB,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC;CACJ","sourcesContent":["import { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport { _UpdateRGBDAsync as UpdateRGBDAsyncEnvTools } from \"../../Misc/environmentTextureTools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { SphericalPolynomial } from \"../../Maths/sphericalPolynomial\";\r\nimport { InternalTextureSource } from \"./internalTexture\";\r\nimport { CubeTexture } from \"./cubeTexture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport \"../../Engines/Extensions/engine.rawTexture\";\r\nimport type { Engine } from \"../../Engines/engine\";\r\n\r\n/**\r\n * Raw cube texture where the raw buffers are passed in\r\n */\r\nexport class RawCubeTexture extends CubeTexture {\r\n /**\r\n * Creates a cube texture where the raw buffers are passed in.\r\n * @param scene defines the scene the texture is attached to\r\n * @param data defines the array of data to use to create each face\r\n * @param size defines the size of the textures\r\n * @param format defines the format of the data\r\n * @param type defines the type of the data (like Engine.TEXTURETYPE_UNSIGNED_INT)\r\n * @param generateMipMaps defines if the engine should generate the mip levels\r\n * @param invertY defines if data must be stored with Y axis inverted\r\n * @param samplingMode defines the required sampling mode (like Texture.NEAREST_SAMPLINGMODE)\r\n * @param compression defines the compression used (null by default)\r\n */\r\n constructor(\r\n scene: Scene,\r\n data: Nullable<ArrayBufferView[]>,\r\n size: number,\r\n format: number = Constants.TEXTUREFORMAT_RGBA,\r\n type: number = Constants.TEXTURETYPE_UNSIGNED_INT,\r\n generateMipMaps: boolean = false,\r\n invertY: boolean = false,\r\n samplingMode: number = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE,\r\n compression: Nullable<string> = null\r\n ) {\r\n super(\"\", scene);\r\n\r\n this._texture = scene.getEngine().createRawCubeTexture(data, size, format, type, generateMipMaps, invertY, samplingMode, compression);\r\n }\r\n\r\n /**\r\n * Updates the raw cube texture.\r\n * @param data defines the data to store\r\n * @param format defines the data format\r\n * @param type defines the type fo the data (Engine.TEXTURETYPE_UNSIGNED_INT by default)\r\n * @param invertY defines if data must be stored with Y axis inverted\r\n * @param compression defines the compression used (null by default)\r\n */\r\n public update(data: ArrayBufferView[], format: number, type: number, invertY: boolean, compression: Nullable<string> = null): void {\r\n (this._texture!.getEngine() as Engine).updateRawCubeTexture(this._texture!, data, format, type, invertY, compression);\r\n }\r\n\r\n /**\r\n * Updates a raw cube texture with RGBD encoded data.\r\n * @param data defines the array of data [mipmap][face] to use to create each face\r\n * @param sphericalPolynomial defines the spherical polynomial for irradiance\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @returns a promise that resolves when the operation is complete\r\n */\r\n public updateRGBDAsync(data: ArrayBufferView[][], sphericalPolynomial: Nullable<SphericalPolynomial> = null, lodScale: number = 0.8, lodOffset: number = 0): Promise<void> {\r\n return UpdateRGBDAsyncEnvTools(this._texture!, data, sphericalPolynomial, lodScale, lodOffset).then(() => {});\r\n }\r\n\r\n /**\r\n * Clones the raw cube texture.\r\n * @returns a new cube texture\r\n */\r\n public override clone(): CubeTexture {\r\n return SerializationHelper.Clone(() => {\r\n const scene = this.getScene()!;\r\n const internalTexture = this._texture!;\r\n\r\n const texture = new RawCubeTexture(\r\n scene,\r\n internalTexture._bufferViewArray!,\r\n internalTexture.width,\r\n internalTexture.format,\r\n internalTexture.type,\r\n internalTexture.generateMipMaps,\r\n internalTexture.invertY,\r\n internalTexture.samplingMode,\r\n internalTexture._compression\r\n );\r\n\r\n if (internalTexture.source === InternalTextureSource.CubeRawRGBD) {\r\n texture.updateRGBDAsync(\r\n internalTexture._bufferViewArrayArray!,\r\n internalTexture._sphericalPolynomial,\r\n internalTexture._lodGenerationScale,\r\n internalTexture._lodGenerationOffset\r\n );\r\n }\r\n\r\n return texture;\r\n }, this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"rawCubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/rawCubeTexture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,IAAI,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAKjG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC3C;;;;;;;;;;;OAWG;IACH,YACI,KAAY,EACZ,IAAiC,EACjC,IAAY,EACZ,SAAiB,SAAS,CAAC,kBAAkB,EAC7C,OAAe,SAAS,CAAC,wBAAwB,EACjD,kBAA2B,KAAK,EAChC,UAAmB,KAAK,EACxB,eAAuB,SAAS,CAAC,8BAA8B,EAC/D,cAAgC,IAAI;QAEpC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAEjB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC1I,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,IAAuB,EAAE,MAAc,EAAE,IAAY,EAAE,OAAgB,EAAE,cAAgC,IAAI;QACvH,IAAI,CAAC,QAAS,CAAC,SAAS,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC9G,CAAC;IAED;;;;;;;OAOG;IACI,eAAe,CAAC,IAAyB,EAAE,sBAAqD,IAAI,EAAE,WAAmB,GAAG,EAAE,YAAoB,CAAC;QACtJ,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAClH,CAAC;IAED;;;OAGG;IACa,KAAK;QACjB,OAAO,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAG,CAAC;YAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,QAAS,CAAC;YAEvC,MAAM,OAAO,GAAG,IAAI,cAAc,CAC9B,KAAK,EACL,eAAe,CAAC,gBAAiB,EACjC,eAAe,CAAC,KAAK,EACrB,eAAe,CAAC,MAAM,EACtB,eAAe,CAAC,IAAI,EACpB,eAAe,CAAC,eAAe,EAC/B,eAAe,CAAC,OAAO,EACvB,eAAe,CAAC,YAAY,EAC5B,eAAe,CAAC,YAAY,CAC/B,CAAC;YAEF,IAAI,eAAe,CAAC,MAAM,+CAAsC,EAAE;gBAC9D,OAAO,CAAC,eAAe,CACnB,eAAe,CAAC,qBAAsB,EACtC,eAAe,CAAC,oBAAoB,EACpC,eAAe,CAAC,mBAAmB,EACnC,eAAe,CAAC,oBAAoB,CACvC,CAAC;aACL;YAED,OAAO,OAAO,CAAC;QACnB,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC;CACJ","sourcesContent":["import { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport { _UpdateRGBDAsync as UpdateRGBDAsyncEnvTools } from \"../../Misc/environmentTextureTools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { SphericalPolynomial } from \"../../Maths/sphericalPolynomial\";\r\nimport { InternalTextureSource } from \"./internalTexture\";\r\nimport { CubeTexture } from \"./cubeTexture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\n\r\n/**\r\n * Raw cube texture where the raw buffers are passed in\r\n */\r\nexport class RawCubeTexture extends CubeTexture {\r\n /**\r\n * Creates a cube texture where the raw buffers are passed in.\r\n * @param scene defines the scene the texture is attached to\r\n * @param data defines the array of data to use to create each face\r\n * @param size defines the size of the textures\r\n * @param format defines the format of the data\r\n * @param type defines the type of the data (like Engine.TEXTURETYPE_UNSIGNED_INT)\r\n * @param generateMipMaps defines if the engine should generate the mip levels\r\n * @param invertY defines if data must be stored with Y axis inverted\r\n * @param samplingMode defines the required sampling mode (like Texture.NEAREST_SAMPLINGMODE)\r\n * @param compression defines the compression used (null by default)\r\n */\r\n constructor(\r\n scene: Scene,\r\n data: Nullable<ArrayBufferView[]>,\r\n size: number,\r\n format: number = Constants.TEXTUREFORMAT_RGBA,\r\n type: number = Constants.TEXTURETYPE_UNSIGNED_INT,\r\n generateMipMaps: boolean = false,\r\n invertY: boolean = false,\r\n samplingMode: number = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE,\r\n compression: Nullable<string> = null\r\n ) {\r\n super(\"\", scene);\r\n\r\n this._texture = scene.getEngine().createRawCubeTexture(data, size, format, type, generateMipMaps, invertY, samplingMode, compression);\r\n }\r\n\r\n /**\r\n * Updates the raw cube texture.\r\n * @param data defines the data to store\r\n * @param format defines the data format\r\n * @param type defines the type fo the data (Engine.TEXTURETYPE_UNSIGNED_INT by default)\r\n * @param invertY defines if data must be stored with Y axis inverted\r\n * @param compression defines the compression used (null by default)\r\n */\r\n public update(data: ArrayBufferView[], format: number, type: number, invertY: boolean, compression: Nullable<string> = null): void {\r\n this._texture!.getEngine().updateRawCubeTexture(this._texture!, data, format, type, invertY, compression);\r\n }\r\n\r\n /**\r\n * Updates a raw cube texture with RGBD encoded data.\r\n * @param data defines the array of data [mipmap][face] to use to create each face\r\n * @param sphericalPolynomial defines the spherical polynomial for irradiance\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @returns a promise that resolves when the operation is complete\r\n */\r\n public updateRGBDAsync(data: ArrayBufferView[][], sphericalPolynomial: Nullable<SphericalPolynomial> = null, lodScale: number = 0.8, lodOffset: number = 0): Promise<void> {\r\n return UpdateRGBDAsyncEnvTools(this._texture!, data, sphericalPolynomial, lodScale, lodOffset).then(() => {});\r\n }\r\n\r\n /**\r\n * Clones the raw cube texture.\r\n * @returns a new cube texture\r\n */\r\n public override clone(): CubeTexture {\r\n return SerializationHelper.Clone(() => {\r\n const scene = this.getScene()!;\r\n const internalTexture = this._texture!;\r\n\r\n const texture = new RawCubeTexture(\r\n scene,\r\n internalTexture._bufferViewArray!,\r\n internalTexture.width,\r\n internalTexture.format,\r\n internalTexture.type,\r\n internalTexture.generateMipMaps,\r\n internalTexture.invertY,\r\n internalTexture.samplingMode,\r\n internalTexture._compression\r\n );\r\n\r\n if (internalTexture.source === InternalTextureSource.CubeRawRGBD) {\r\n texture.updateRGBDAsync(\r\n internalTexture._bufferViewArrayArray!,\r\n internalTexture._sphericalPolynomial,\r\n internalTexture._lodGenerationScale,\r\n internalTexture._lodGenerationOffset\r\n );\r\n }\r\n\r\n return texture;\r\n }, this);\r\n }\r\n}\r\n"]}