@babylonjs/core 6.29.0 → 6.29.2

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 (300) hide show
  1. package/Actions/abstractActionManager.js +1 -1
  2. package/Actions/abstractActionManager.js.map +1 -1
  3. package/Actions/actionManager.js +3 -3
  4. package/Actions/actionManager.js.map +1 -1
  5. package/Animations/animatable.js +1 -1
  6. package/Animations/animatable.js.map +1 -1
  7. package/Animations/animation.js +2 -2
  8. package/Animations/animation.js.map +1 -1
  9. package/Animations/pathCursor.js +1 -1
  10. package/Animations/pathCursor.js.map +1 -1
  11. package/Audio/audioSceneComponent.js +2 -2
  12. package/Audio/audioSceneComponent.js.map +1 -1
  13. package/Audio/soundTrack.js +1 -1
  14. package/Audio/soundTrack.js.map +1 -1
  15. package/Behaviors/Meshes/fadeInOutBehavior.js +1 -2
  16. package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
  17. package/Bones/bone.js +2 -2
  18. package/Bones/bone.js.map +1 -1
  19. package/Bones/skeleton.js +2 -2
  20. package/Bones/skeleton.js.map +1 -1
  21. package/Cameras/arcRotateCamera.js +13 -37
  22. package/Cameras/arcRotateCamera.js.map +1 -1
  23. package/Cameras/camera.d.ts +0 -21
  24. package/Cameras/camera.js +1 -36
  25. package/Cameras/camera.js.map +1 -1
  26. package/Cameras/targetCamera.js +30 -51
  27. package/Cameras/targetCamera.js.map +1 -1
  28. package/Culling/Octrees/octree.js +1 -1
  29. package/Culling/Octrees/octree.js.map +1 -1
  30. package/Culling/Octrees/octreeBlock.js +1 -1
  31. package/Culling/Octrees/octreeBlock.js.map +1 -1
  32. package/Culling/ray.js +1 -1
  33. package/Culling/ray.js.map +1 -1
  34. package/Debug/axesViewer.d.ts +3 -1
  35. package/Debug/axesViewer.js +14 -11
  36. package/Debug/axesViewer.js.map +1 -1
  37. package/Engines/Extensions/engine.multiRender.js +8 -8
  38. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  39. package/Engines/Extensions/engine.textureSelector.js +1 -1
  40. package/Engines/Extensions/engine.textureSelector.js.map +1 -1
  41. package/Engines/Processors/shaderCodeInliner.js +1 -1
  42. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  43. package/Engines/WebGPU/Extensions/engine.computeShader.js +2 -10
  44. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  45. package/Engines/WebGPU/Extensions/engine.debugging.js +3 -6
  46. package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
  47. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +1 -1
  48. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  49. package/Engines/WebGPU/Extensions/engine.multiRender.js +9 -14
  50. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  51. package/Engines/WebGPU/Extensions/engine.query.js +2 -6
  52. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  53. package/Engines/WebGPU/Extensions/engine.renderTarget.js +6 -10
  54. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  55. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
  56. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  57. package/Engines/WebGPU/Extensions/engine.videoTexture.js +2 -2
  58. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  59. package/Engines/WebGPU/webgpuBundleList.js +2 -1
  60. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  61. package/Engines/WebGPU/webgpuCacheBindGroups.js +1 -1
  62. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  63. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
  64. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +4 -7
  65. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  66. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +1 -1
  67. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +2 -2
  68. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  69. package/Engines/WebGPU/webgpuCacheSampler.d.ts +1 -1
  70. package/Engines/WebGPU/webgpuCacheSampler.js +5 -5
  71. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  72. package/Engines/WebGPU/webgpuClearQuad.js +2 -2
  73. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  74. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +0 -12
  75. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  76. package/Engines/WebGPU/webgpuMaterialContext.d.ts +3 -3
  77. package/Engines/WebGPU/webgpuMaterialContext.js +14 -10
  78. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  79. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -12
  80. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  81. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +5 -8
  82. package/Engines/WebGPU/webgpuSnapshotRendering.js +24 -33
  83. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  84. package/Engines/WebGPU/webgpuTextureHelper.d.ts +2 -1
  85. package/Engines/WebGPU/webgpuTextureHelper.js +11 -16
  86. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  87. package/Engines/constants.d.ts +2 -2
  88. package/Engines/constants.js +2 -2
  89. package/Engines/constants.js.map +1 -1
  90. package/Engines/engine.js +2 -2
  91. package/Engines/engine.js.map +1 -1
  92. package/Engines/engineCapabilities.d.ts +2 -0
  93. package/Engines/engineCapabilities.js.map +1 -1
  94. package/Engines/engineStore.js +1 -1
  95. package/Engines/engineStore.js.map +1 -1
  96. package/Engines/nativeEngine.js +1 -0
  97. package/Engines/nativeEngine.js.map +1 -1
  98. package/Engines/nullEngine.js +1 -0
  99. package/Engines/nullEngine.js.map +1 -1
  100. package/Engines/thinEngine.js +6 -2
  101. package/Engines/thinEngine.js.map +1 -1
  102. package/Engines/webgpuEngine.d.ts +27 -32
  103. package/Engines/webgpuEngine.js +237 -317
  104. package/Engines/webgpuEngine.js.map +1 -1
  105. package/Gizmos/boundingBoxGizmo.js +1 -1
  106. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  107. package/Gizmos/cameraGizmo.d.ts +3 -1
  108. package/Gizmos/cameraGizmo.js +11 -8
  109. package/Gizmos/cameraGizmo.js.map +1 -1
  110. package/Layers/effectLayerSceneComponent.js +2 -2
  111. package/Layers/effectLayerSceneComponent.js.map +1 -1
  112. package/Layers/layerSceneComponent.js +1 -1
  113. package/Layers/layerSceneComponent.js.map +1 -1
  114. package/LensFlares/lensFlareSystem.js +1 -1
  115. package/LensFlares/lensFlareSystem.js.map +1 -1
  116. package/LensFlares/lensFlareSystemSceneComponent.js +2 -2
  117. package/LensFlares/lensFlareSystemSceneComponent.js.map +1 -1
  118. package/Lights/Shadows/shadowGenerator.js +1 -1
  119. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  120. package/Lights/light.js +2 -2
  121. package/Lights/light.js.map +1 -1
  122. package/Loading/Plugins/babylonFileLoader.js +1 -1
  123. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  124. package/Loading/sceneLoader.js +3 -3
  125. package/Loading/sceneLoader.js.map +1 -1
  126. package/Materials/GreasedLine/greasedLineMaterialDefaults.d.ts +2 -2
  127. package/Materials/GreasedLine/greasedLineMaterialDefaults.js.map +1 -1
  128. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +4 -1
  129. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  130. package/Materials/Node/Blocks/Dual/lightBlock.js +1 -1
  131. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -1
  133. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  134. package/Materials/Node/nodeMaterial.js +1 -1
  135. package/Materials/Node/nodeMaterial.js.map +1 -1
  136. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +2 -2
  137. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  138. package/Materials/Node/nodeMaterialBuildState.js +4 -4
  139. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  140. package/Materials/Node/nodeMaterialBuildStateSharedData.js +12 -12
  141. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  142. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js +1 -1
  143. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
  144. package/Materials/Textures/baseTexture.js +1 -1
  145. package/Materials/Textures/baseTexture.js.map +1 -1
  146. package/Materials/Textures/dynamicTexture.d.ts +4 -3
  147. package/Materials/Textures/dynamicTexture.js +10 -6
  148. package/Materials/Textures/dynamicTexture.js.map +1 -1
  149. package/Materials/Textures/externalTexture.d.ts +4 -0
  150. package/Materials/Textures/externalTexture.js +4 -0
  151. package/Materials/Textures/externalTexture.js.map +1 -1
  152. package/Materials/Textures/internalTexture.d.ts +0 -4
  153. package/Materials/Textures/internalTexture.js.map +1 -1
  154. package/Materials/Textures/renderTargetTexture.js +1 -1
  155. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  156. package/Materials/Textures/textureSampler.d.ts +4 -0
  157. package/Materials/Textures/textureSampler.js.map +1 -1
  158. package/Materials/material.js +1 -1
  159. package/Materials/material.js.map +1 -1
  160. package/Materials/multiMaterial.js +1 -1
  161. package/Materials/multiMaterial.js.map +1 -1
  162. package/Materials/shaderMaterial.js +1 -1
  163. package/Materials/shaderMaterial.js.map +1 -1
  164. package/Maths/math.path.d.ts +9 -1
  165. package/Maths/math.path.js +23 -7
  166. package/Maths/math.path.js.map +1 -1
  167. package/Maths/math.vector.d.ts +93 -0
  168. package/Maths/math.vector.js +157 -26
  169. package/Maths/math.vector.js.map +1 -1
  170. package/Meshes/Builders/cylinderBuilder.js +5 -5
  171. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  172. package/Meshes/Builders/decalBuilder.js +1 -1
  173. package/Meshes/Builders/decalBuilder.js.map +1 -1
  174. package/Meshes/Builders/discBuilder.js +4 -4
  175. package/Meshes/Builders/discBuilder.js.map +1 -1
  176. package/Meshes/Builders/goldbergBuilder.js +4 -4
  177. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  178. package/Meshes/Builders/groundBuilder.js +4 -4
  179. package/Meshes/Builders/groundBuilder.js.map +1 -1
  180. package/Meshes/Builders/icoSphereBuilder.js +4 -4
  181. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  182. package/Meshes/Builders/latheBuilder.js +1 -1
  183. package/Meshes/Builders/latheBuilder.js.map +1 -1
  184. package/Meshes/Builders/linesBuilder.js +2 -2
  185. package/Meshes/Builders/linesBuilder.js.map +1 -1
  186. package/Meshes/Builders/polyhedronBuilder.js +6 -6
  187. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  188. package/Meshes/Builders/shapeBuilder.js +1 -1
  189. package/Meshes/Builders/shapeBuilder.js.map +1 -1
  190. package/Meshes/Builders/textBuilder.js +13 -5
  191. package/Meshes/Builders/textBuilder.js.map +1 -1
  192. package/Meshes/Builders/torusKnotBuilder.js +4 -4
  193. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  194. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +1 -1
  195. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
  196. package/Meshes/Node/Blocks/Sources/boxBlock.js +1 -0
  197. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
  198. package/Meshes/Node/Blocks/Sources/capsuleBlock.js +1 -0
  199. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
  200. package/Meshes/Node/Blocks/Sources/cylinderBlock.js +1 -0
  201. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
  202. package/Meshes/Node/Blocks/Sources/discBlock.js +1 -0
  203. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
  204. package/Meshes/Node/Blocks/Sources/gridBlock.js +1 -0
  205. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
  206. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +1 -0
  207. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
  208. package/Meshes/Node/Blocks/Sources/planeBlock.js +1 -0
  209. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
  210. package/Meshes/Node/Blocks/Sources/sphereBlock.js +1 -0
  211. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
  212. package/Meshes/Node/Blocks/Sources/torusBlock.js +1 -0
  213. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
  214. package/Meshes/Node/nodeGeometry.js +1 -1
  215. package/Meshes/Node/nodeGeometry.js.map +1 -1
  216. package/Meshes/Node/nodeGeometryBlock.js +1 -0
  217. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  218. package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +14 -0
  219. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +32 -5
  220. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  221. package/Meshes/abstractMesh.js +5 -5
  222. package/Meshes/abstractMesh.js.map +1 -1
  223. package/Meshes/csg.js +5 -5
  224. package/Meshes/csg.js.map +1 -1
  225. package/Meshes/geodesicMesh.js +1 -1
  226. package/Meshes/geodesicMesh.js.map +1 -1
  227. package/Meshes/mesh.js +14 -10
  228. package/Meshes/mesh.js.map +1 -1
  229. package/Meshes/mesh.vertexData.js +1 -1
  230. package/Meshes/mesh.vertexData.js.map +1 -1
  231. package/Meshes/meshSimplification.js +2 -2
  232. package/Meshes/meshSimplification.js.map +1 -1
  233. package/Meshes/polygonMesh.js +7 -7
  234. package/Meshes/polygonMesh.js.map +1 -1
  235. package/Meshes/thinInstanceMesh.js +1 -1
  236. package/Meshes/thinInstanceMesh.js.map +1 -1
  237. package/Misc/codeStringParsingTools.d.ts +2 -1
  238. package/Misc/codeStringParsingTools.js +3 -2
  239. package/Misc/codeStringParsingTools.js.map +1 -1
  240. package/Misc/dds.js +1 -1
  241. package/Misc/dds.js.map +1 -1
  242. package/Misc/filesInput.js +1 -1
  243. package/Misc/filesInput.js.map +1 -1
  244. package/Misc/greasedLineTools.d.ts +2 -1
  245. package/Misc/greasedLineTools.js +2 -0
  246. package/Misc/greasedLineTools.js.map +1 -1
  247. package/Misc/precisionDate.js +4 -2
  248. package/Misc/precisionDate.js.map +1 -1
  249. package/Misc/sceneOptimizer.js +2 -2
  250. package/Misc/sceneOptimizer.js.map +1 -1
  251. package/Morph/morphTarget.js +1 -1
  252. package/Morph/morphTarget.js.map +1 -1
  253. package/Particles/gpuParticleSystem.js +1 -1
  254. package/Particles/gpuParticleSystem.js.map +1 -1
  255. package/Particles/particleSystem.js +2 -2
  256. package/Particles/particleSystem.js.map +1 -1
  257. package/Particles/particleSystemComponent.js +2 -2
  258. package/Particles/particleSystemComponent.js.map +1 -1
  259. package/Particles/particleSystemSet.js +1 -1
  260. package/Particles/particleSystemSet.js.map +1 -1
  261. package/Physics/v1/Plugins/cannonJSPlugin.js +2 -2
  262. package/Physics/v1/Plugins/cannonJSPlugin.js.map +1 -1
  263. package/Physics/v2/Plugins/havokPlugin.js +3 -1
  264. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  265. package/PostProcesses/postProcess.d.ts +1 -0
  266. package/PostProcesses/postProcess.js +30 -23
  267. package/PostProcesses/postProcess.js.map +1 -1
  268. package/PostProcesses/volumetricLightScatteringPostProcess.js +2 -2
  269. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  270. package/Probes/reflectionProbe.js +1 -1
  271. package/Probes/reflectionProbe.js.map +1 -1
  272. package/Rendering/edgesRenderer.js +3 -3
  273. package/Rendering/edgesRenderer.js.map +1 -1
  274. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +2 -1
  275. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
  276. package/Rendering/prePassRenderer.js +8 -4
  277. package/Rendering/prePassRenderer.js.map +1 -1
  278. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +2 -1
  279. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  280. package/Sprites/spriteManager.js +1 -1
  281. package/Sprites/spriteManager.js.map +1 -1
  282. package/Sprites/spriteMap.js +4 -4
  283. package/Sprites/spriteMap.js.map +1 -1
  284. package/Sprites/spriteSceneComponent.js +2 -2
  285. package/Sprites/spriteSceneComponent.js.map +1 -1
  286. package/XR/features/WebXRFeaturePointSystem.js +2 -2
  287. package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
  288. package/abstractScene.js +16 -16
  289. package/abstractScene.js.map +1 -1
  290. package/assetContainer.js +2 -2
  291. package/assetContainer.js.map +1 -1
  292. package/node.js +2 -2
  293. package/node.js.map +1 -1
  294. package/package.json +1 -1
  295. package/scene.d.ts +0 -4
  296. package/scene.js +6 -12
  297. package/scene.js.map +1 -1
  298. package/Engines/WebGPU/webgpuRenderPassWrapper.d.ts +0 -13
  299. package/Engines/WebGPU/webgpuRenderPassWrapper.js +0 -18
  300. package/Engines/WebGPU/webgpuRenderPassWrapper.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"thinInstanceMesh.js","sourceRoot":"","sources":["../../../../dev/core/src/Meshes/thinInstanceMesh.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, DeepImmutableObject } from \"../types\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { VertexBuffer, Buffer } from \"../Buffers/buffer\";\r\nimport { Matrix, Vector3, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { BoundingInfo } from \"core/Culling/boundingInfo\";\r\n\r\ndeclare module \"./mesh\" {\r\n export interface Mesh {\r\n /**\r\n * Gets or sets a boolean defining if we want picking to pick thin instances as well\r\n */\r\n thinInstanceEnablePicking: boolean;\r\n /**\r\n * Creates a new thin instance\r\n * @param matrix the matrix or array of matrices (position, rotation, scale) of the thin instance(s) to create\r\n * @param refresh true to refresh the underlying gpu buffer (default: true). If you do multiple calls to this method in a row, set refresh to true only for the last call to save performance\r\n * @returns the thin instance index number. If you pass an array of matrices, other instance indexes are index+1, index+2, etc\r\n */\r\n thinInstanceAdd(matrix: DeepImmutableObject<Matrix> | Array<DeepImmutableObject<Matrix>>, refresh?: boolean): number;\r\n\r\n /**\r\n * Adds the transformation (matrix) of the current mesh as a thin instance\r\n * @param refresh true to refresh the underlying gpu buffer (default: true). If you do multiple calls to this method in a row, set refresh to true only for the last call to save performance\r\n * @returns the thin instance index number\r\n */\r\n thinInstanceAddSelf(refresh?: boolean): number;\r\n\r\n /**\r\n * Registers a custom attribute to be used with thin instances\r\n * @param kind name of the attribute\r\n * @param stride size in floats of the attribute\r\n */\r\n thinInstanceRegisterAttribute(kind: string, stride: number): void;\r\n\r\n /**\r\n * Sets the matrix of a thin instance\r\n * @param index index of the thin instance\r\n * @param matrix matrix to set\r\n * @param refresh true to refresh the underlying gpu buffer (default: true). If you do multiple calls to this method in a row, set refresh to true only for the last call to save performance\r\n */\r\n thinInstanceSetMatrixAt(index: number, matrix: DeepImmutableObject<Matrix>, refresh?: boolean): void;\r\n\r\n /**\r\n * Sets the value of a custom attribute for a thin instance\r\n * @param kind name of the attribute\r\n * @param index index of the thin instance\r\n * @param value value to set\r\n * @param refresh true to refresh the underlying gpu buffer (default: true). If you do multiple calls to this method in a row, set refresh to true only for the last call to save performance\r\n */\r\n thinInstanceSetAttributeAt(kind: string, index: number, value: Array<number>, refresh?: boolean): void;\r\n\r\n /**\r\n * Gets / sets the number of thin instances to display. Note that you can't set a number higher than what the underlying buffer can handle.\r\n */\r\n thinInstanceCount: number;\r\n\r\n /**\r\n * Sets a buffer to be used with thin instances. This method is a faster way to setup multiple instances than calling thinInstanceAdd repeatedly\r\n * @param kind name of the attribute. Use \"matrix\" to setup the buffer of matrices\r\n * @param buffer buffer to set\r\n * @param stride size in floats of each value of the buffer\r\n * @param staticBuffer indicates that the buffer is static, so that you won't change it after it is set (better performances - false by default)\r\n */\r\n thinInstanceSetBuffer(kind: string, buffer: Nullable<Float32Array>, stride?: number, staticBuffer?: boolean): void;\r\n\r\n /**\r\n * Gets the list of world matrices\r\n * @returns an array containing all the world matrices from the thin instances\r\n */\r\n thinInstanceGetWorldMatrices(): Matrix[];\r\n\r\n /**\r\n * Synchronize the gpu buffers with a thin instance buffer. Call this method if you update later on the buffers passed to thinInstanceSetBuffer\r\n * @param kind name of the attribute to update. Use \"matrix\" to update the buffer of matrices\r\n */\r\n thinInstanceBufferUpdated(kind: string): void;\r\n\r\n /**\r\n * Applies a partial update to a buffer directly on the GPU\r\n * Note that the buffer located on the CPU is NOT updated! It's up to you to update it (or not) with the same data you pass to this method\r\n * @param kind name of the attribute to update. Use \"matrix\" to update the buffer of matrices\r\n * @param data the data to set in the GPU buffer\r\n * @param offset the offset in the GPU buffer where to update the data\r\n */\r\n thinInstancePartialBufferUpdate(kind: string, data: Float32Array, offset: number): void;\r\n\r\n /**\r\n * Refreshes the bounding info, taking into account all the thin instances defined\r\n * @param forceRefreshParentInfo true to force recomputing the mesh bounding info and use it to compute the aggregated bounding info\r\n * @param applySkeleton defines whether to apply the skeleton before computing the bounding info\r\n * @param applyMorph defines whether to apply the morph target before computing the bounding info\r\n */\r\n thinInstanceRefreshBoundingInfo(forceRefreshParentInfo?: boolean, applySkeleton?: boolean, applyMorph?: boolean): void;\r\n\r\n /** @internal */\r\n _thinInstanceInitializeUserStorage(): void;\r\n\r\n /** @internal */\r\n _thinInstanceUpdateBufferSize(kind: string, numInstances?: number): void;\r\n\r\n /** @internal */\r\n _thinInstanceCreateMatrixBuffer(kind: string, buffer: Nullable<Float32Array>, staticBuffer: boolean): Buffer;\r\n\r\n /** @internal */\r\n _userThinInstanceBuffersStorage: {\r\n data: { [key: string]: Float32Array };\r\n sizes: { [key: string]: number };\r\n vertexBuffers: { [key: string]: Nullable<VertexBuffer> };\r\n strides: { [key: string]: number };\r\n };\r\n }\r\n}\r\n\r\nMesh.prototype.thinInstanceAdd = function (matrix: DeepImmutableObject<Matrix> | Array<DeepImmutableObject<Matrix>>, refresh: boolean = true): number {\r\n if (!this.getScene().getEngine().getCaps().instancedArrays) {\r\n Logger.Error(\"Thin Instances are not supported on this device as Instanced Array extension not supported\");\r\n return -1;\r\n }\r\n\r\n this._thinInstanceUpdateBufferSize(\"matrix\", Array.isArray(matrix) ? matrix.length : 1);\r\n\r\n const index = this._thinInstanceDataStorage.instancesCount;\r\n\r\n if (Array.isArray(matrix)) {\r\n for (let i = 0; i < matrix.length; ++i) {\r\n this.thinInstanceSetMatrixAt(this._thinInstanceDataStorage.instancesCount++, matrix[i], i === matrix.length - 1 && refresh);\r\n }\r\n } else {\r\n this.thinInstanceSetMatrixAt(this._thinInstanceDataStorage.instancesCount++, matrix, refresh);\r\n }\r\n\r\n return index;\r\n};\r\n\r\nMesh.prototype.thinInstanceAddSelf = function (refresh: boolean = true): number {\r\n return this.thinInstanceAdd(Matrix.IdentityReadOnly, refresh);\r\n};\r\n\r\nMesh.prototype.thinInstanceRegisterAttribute = function (kind: string, stride: number): void {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n this.removeVerticesData(kind);\r\n\r\n this._thinInstanceInitializeUserStorage();\r\n\r\n this._userThinInstanceBuffersStorage.strides[kind] = stride;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = stride * Math.max(32, this._thinInstanceDataStorage.instancesCount); // Initial size\r\n this._userThinInstanceBuffersStorage.data[kind] = new Float32Array(this._userThinInstanceBuffersStorage.sizes[kind]);\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), this._userThinInstanceBuffersStorage.data[kind], kind, true, false, stride, true);\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n};\r\n\r\nMesh.prototype.thinInstanceSetMatrixAt = function (index: number, matrix: DeepImmutableObject<Matrix>, refresh: boolean = true): boolean {\r\n if (!this._thinInstanceDataStorage.matrixData || index >= this._thinInstanceDataStorage.instancesCount) {\r\n return false;\r\n }\r\n\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n matrix.copyToArray(matrixData, index * 16);\r\n\r\n if (this._thinInstanceDataStorage.worldMatrices) {\r\n this._thinInstanceDataStorage.worldMatrices[index] = matrix as Matrix;\r\n }\r\n\r\n if (refresh) {\r\n this.thinInstanceBufferUpdated(\"matrix\");\r\n\r\n if (!this.doNotSyncBoundingInfo) {\r\n this.thinInstanceRefreshBoundingInfo(false);\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nMesh.prototype.thinInstanceSetAttributeAt = function (kind: string, index: number, value: Array<number>, refresh: boolean = true): boolean {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (!this._userThinInstanceBuffersStorage || !this._userThinInstanceBuffersStorage.data[kind] || index >= this._thinInstanceDataStorage.instancesCount) {\r\n return false;\r\n }\r\n\r\n this._thinInstanceUpdateBufferSize(kind, 0); // make sur the buffer for the kind attribute is big enough\r\n\r\n this._userThinInstanceBuffersStorage.data[kind].set(value, index * this._userThinInstanceBuffersStorage.strides[kind]);\r\n\r\n if (refresh) {\r\n this.thinInstanceBufferUpdated(kind);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nObject.defineProperty(Mesh.prototype, \"thinInstanceCount\", {\r\n get: function (this: Mesh) {\r\n return this._thinInstanceDataStorage.instancesCount;\r\n },\r\n set: function (this: Mesh, value: number) {\r\n const matrixData = this._thinInstanceDataStorage.matrixData ?? this.source?._thinInstanceDataStorage.matrixData;\r\n const numMaxInstances = matrixData ? matrixData.length / 16 : 0;\r\n\r\n if (value <= numMaxInstances) {\r\n this._thinInstanceDataStorage.instancesCount = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nMesh.prototype._thinInstanceCreateMatrixBuffer = function (kind: string, buffer: Float32Array, staticBuffer: boolean = false): Buffer {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n const matrixBuffer = new Buffer(this.getEngine(), buffer, !staticBuffer, 16, false, true);\r\n\r\n for (let i = 0; i < 4; i++) {\r\n this.setVerticesBuffer(matrixBuffer.createVertexBuffer(kind + i, i * 4, 4));\r\n }\r\n\r\n return matrixBuffer;\r\n};\r\n\r\nMesh.prototype.thinInstanceSetBuffer = function (kind: string, buffer: Nullable<Float32Array>, stride: number = 0, staticBuffer: boolean = false): void {\r\n stride = stride || 16;\r\n\r\n if (kind === \"matrix\") {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = null;\r\n this._thinInstanceDataStorage.matrixBufferSize = buffer ? buffer.length : 32 * stride;\r\n this._thinInstanceDataStorage.matrixData = buffer;\r\n this._thinInstanceDataStorage.worldMatrices = null;\r\n\r\n if (buffer !== null) {\r\n this._thinInstanceDataStorage.instancesCount = buffer.length / stride;\r\n this._thinInstanceDataStorage.matrixBuffer = this._thinInstanceCreateMatrixBuffer(\"world\", buffer, staticBuffer);\r\n\r\n if (!this.doNotSyncBoundingInfo) {\r\n this.thinInstanceRefreshBoundingInfo(false);\r\n }\r\n } else {\r\n this._thinInstanceDataStorage.instancesCount = 0;\r\n if (!this.doNotSyncBoundingInfo) {\r\n // mesh has no more thin instances, so need to recompute the bounding box because it's the regular mesh that will now be displayed\r\n this.refreshBoundingInfo();\r\n }\r\n }\r\n } else if (kind === \"previousMatrix\") {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = null;\r\n this._thinInstanceDataStorage.previousMatrixData = buffer;\r\n if (buffer !== null) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer = this._thinInstanceCreateMatrixBuffer(\"previousWorld\", buffer, staticBuffer);\r\n }\r\n } else {\r\n // color for instanced mesh is ColorInstanceKind and not ColorKind because of native that needs to do the differenciation\r\n // hot switching kind here to preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (buffer === null) {\r\n if (this._userThinInstanceBuffersStorage?.data[kind]) {\r\n this.removeVerticesData(kind);\r\n delete this._userThinInstanceBuffersStorage.data[kind];\r\n delete this._userThinInstanceBuffersStorage.strides[kind];\r\n delete this._userThinInstanceBuffersStorage.sizes[kind];\r\n delete this._userThinInstanceBuffersStorage.vertexBuffers[kind];\r\n }\r\n } else {\r\n this._thinInstanceInitializeUserStorage();\r\n\r\n this._userThinInstanceBuffersStorage.data[kind] = buffer;\r\n this._userThinInstanceBuffersStorage.strides[kind] = stride;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = buffer.length;\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), buffer, kind, !staticBuffer, false, stride, true);\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n }\r\n }\r\n};\r\n\r\nMesh.prototype.thinInstanceBufferUpdated = function (kind: string): void {\r\n if (kind === \"matrix\") {\r\n this._thinInstanceDataStorage.matrixBuffer?.updateDirectly(this._thinInstanceDataStorage.matrixData!, 0, this._thinInstanceDataStorage.instancesCount);\r\n } else if (kind === \"previousMatrix\") {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.updateDirectly(this._thinInstanceDataStorage.previousMatrixData!, 0, this._thinInstanceDataStorage.instancesCount);\r\n } else {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (this._userThinInstanceBuffersStorage?.vertexBuffers[kind]) {\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]!.updateDirectly(this._userThinInstanceBuffersStorage.data[kind], 0);\r\n }\r\n }\r\n};\r\n\r\nMesh.prototype.thinInstancePartialBufferUpdate = function (kind: string, data: Float32Array, offset: number): void {\r\n if (kind === \"matrix\") {\r\n if (this._thinInstanceDataStorage.matrixBuffer) {\r\n this._thinInstanceDataStorage.matrixBuffer.updateDirectly(data, offset);\r\n }\r\n } else {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (this._userThinInstanceBuffersStorage?.vertexBuffers[kind]) {\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]!.updateDirectly(data, offset);\r\n }\r\n }\r\n};\r\n\r\nMesh.prototype.thinInstanceGetWorldMatrices = function (): Matrix[] {\r\n if (!this._thinInstanceDataStorage.matrixData || !this._thinInstanceDataStorage.matrixBuffer) {\r\n return [];\r\n }\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n if (!this._thinInstanceDataStorage.worldMatrices) {\r\n this._thinInstanceDataStorage.worldMatrices = new Array<Matrix>();\r\n\r\n for (let i = 0; i < this._thinInstanceDataStorage.instancesCount; ++i) {\r\n this._thinInstanceDataStorage.worldMatrices[i] = Matrix.FromArray(matrixData, i * 16);\r\n }\r\n }\r\n\r\n return this._thinInstanceDataStorage.worldMatrices;\r\n};\r\n\r\nMesh.prototype.thinInstanceRefreshBoundingInfo = function (forceRefreshParentInfo: boolean = false, applySkeleton: boolean = false, applyMorph: boolean = false) {\r\n if (!this._thinInstanceDataStorage.matrixData || !this._thinInstanceDataStorage.matrixBuffer) {\r\n return;\r\n }\r\n\r\n const vectors = this._thinInstanceDataStorage.boundingVectors;\r\n\r\n if (forceRefreshParentInfo || !this.rawBoundingInfo) {\r\n vectors.length = 0;\r\n this.refreshBoundingInfo(applySkeleton, applyMorph);\r\n const boundingInfo = this.getBoundingInfo();\r\n this.rawBoundingInfo = new BoundingInfo(boundingInfo.minimum, boundingInfo.maximum);\r\n }\r\n\r\n const boundingInfo = this.getBoundingInfo();\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n if (vectors.length === 0) {\r\n for (let v = 0; v < boundingInfo.boundingBox.vectors.length; ++v) {\r\n vectors.push(boundingInfo.boundingBox.vectors[v].clone());\r\n }\r\n }\r\n\r\n TmpVectors.Vector3[0].setAll(Number.POSITIVE_INFINITY); // min\r\n TmpVectors.Vector3[1].setAll(Number.NEGATIVE_INFINITY); // max\r\n\r\n for (let i = 0; i < this._thinInstanceDataStorage.instancesCount; ++i) {\r\n Matrix.FromArrayToRef(matrixData, i * 16, TmpVectors.Matrix[0]);\r\n\r\n for (let v = 0; v < vectors.length; ++v) {\r\n Vector3.TransformCoordinatesToRef(vectors[v], TmpVectors.Matrix[0], TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[0].minimizeInPlace(TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[1].maximizeInPlace(TmpVectors.Vector3[2]);\r\n }\r\n }\r\n\r\n boundingInfo.reConstruct(TmpVectors.Vector3[0], TmpVectors.Vector3[1]);\r\n\r\n this._updateBoundingInfo();\r\n};\r\n\r\nMesh.prototype._thinInstanceUpdateBufferSize = function (kind: string, numInstances: number = 1) {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n const kindIsMatrix = kind === \"matrix\";\r\n\r\n if (!kindIsMatrix && (!this._userThinInstanceBuffersStorage || !this._userThinInstanceBuffersStorage.strides[kind])) {\r\n return;\r\n }\r\n\r\n const stride = kindIsMatrix ? 16 : this._userThinInstanceBuffersStorage.strides[kind];\r\n const currentSize = kindIsMatrix ? this._thinInstanceDataStorage.matrixBufferSize : this._userThinInstanceBuffersStorage.sizes[kind];\r\n let data = kindIsMatrix ? this._thinInstanceDataStorage.matrixData : this._userThinInstanceBuffersStorage.data[kind];\r\n\r\n const bufferSize = (this._thinInstanceDataStorage.instancesCount + numInstances) * stride;\r\n\r\n let newSize = currentSize;\r\n\r\n while (newSize < bufferSize) {\r\n newSize *= 2;\r\n }\r\n\r\n if (!data || currentSize != newSize) {\r\n if (!data) {\r\n data = new Float32Array(newSize);\r\n } else {\r\n const newData = new Float32Array(newSize);\r\n newData.set(data, 0);\r\n data = newData;\r\n }\r\n\r\n if (kindIsMatrix) {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = this._thinInstanceCreateMatrixBuffer(\"world\", data, false);\r\n this._thinInstanceDataStorage.matrixData = data;\r\n this._thinInstanceDataStorage.matrixBufferSize = newSize;\r\n if (this._scene.needsPreviousWorldMatrices && !this._thinInstanceDataStorage.previousMatrixData) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = this._thinInstanceCreateMatrixBuffer(\"previousWorld\", data, false);\r\n }\r\n } else {\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]?.dispose();\r\n\r\n this._userThinInstanceBuffersStorage.data[kind] = data;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = newSize;\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), data, kind, true, false, stride, true);\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n }\r\n }\r\n};\r\n\r\nMesh.prototype._thinInstanceInitializeUserStorage = function () {\r\n if (!this._userThinInstanceBuffersStorage) {\r\n this._userThinInstanceBuffersStorage = {\r\n data: {},\r\n sizes: {},\r\n vertexBuffers: {},\r\n strides: {},\r\n };\r\n }\r\n};\r\n\r\nMesh.prototype._disposeThinInstanceSpecificData = function () {\r\n if (this._thinInstanceDataStorage?.matrixBuffer) {\r\n this._thinInstanceDataStorage.matrixBuffer.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = null;\r\n }\r\n};\r\n"]}
1
+ {"version":3,"file":"thinInstanceMesh.js","sourceRoot":"","sources":["../../../../dev/core/src/Meshes/thinInstanceMesh.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, DeepImmutableObject } from \"../types\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { VertexBuffer, Buffer } from \"../Buffers/buffer\";\r\nimport { Matrix, Vector3, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { BoundingInfo } from \"core/Culling/boundingInfo\";\r\n\r\ndeclare module \"./mesh\" {\r\n export interface Mesh {\r\n /**\r\n * Gets or sets a boolean defining if we want picking to pick thin instances as well\r\n */\r\n thinInstanceEnablePicking: boolean;\r\n /**\r\n * Creates a new thin instance\r\n * @param matrix the matrix or array of matrices (position, rotation, scale) of the thin instance(s) to create\r\n * @param refresh true to refresh the underlying gpu buffer (default: true). If you do multiple calls to this method in a row, set refresh to true only for the last call to save performance\r\n * @returns the thin instance index number. If you pass an array of matrices, other instance indexes are index+1, index+2, etc\r\n */\r\n thinInstanceAdd(matrix: DeepImmutableObject<Matrix> | Array<DeepImmutableObject<Matrix>>, refresh?: boolean): number;\r\n\r\n /**\r\n * Adds the transformation (matrix) of the current mesh as a thin instance\r\n * @param refresh true to refresh the underlying gpu buffer (default: true). If you do multiple calls to this method in a row, set refresh to true only for the last call to save performance\r\n * @returns the thin instance index number\r\n */\r\n thinInstanceAddSelf(refresh?: boolean): number;\r\n\r\n /**\r\n * Registers a custom attribute to be used with thin instances\r\n * @param kind name of the attribute\r\n * @param stride size in floats of the attribute\r\n */\r\n thinInstanceRegisterAttribute(kind: string, stride: number): void;\r\n\r\n /**\r\n * Sets the matrix of a thin instance\r\n * @param index index of the thin instance\r\n * @param matrix matrix to set\r\n * @param refresh true to refresh the underlying gpu buffer (default: true). If you do multiple calls to this method in a row, set refresh to true only for the last call to save performance\r\n */\r\n thinInstanceSetMatrixAt(index: number, matrix: DeepImmutableObject<Matrix>, refresh?: boolean): void;\r\n\r\n /**\r\n * Sets the value of a custom attribute for a thin instance\r\n * @param kind name of the attribute\r\n * @param index index of the thin instance\r\n * @param value value to set\r\n * @param refresh true to refresh the underlying gpu buffer (default: true). If you do multiple calls to this method in a row, set refresh to true only for the last call to save performance\r\n */\r\n thinInstanceSetAttributeAt(kind: string, index: number, value: Array<number>, refresh?: boolean): void;\r\n\r\n /**\r\n * Gets / sets the number of thin instances to display. Note that you can't set a number higher than what the underlying buffer can handle.\r\n */\r\n thinInstanceCount: number;\r\n\r\n /**\r\n * Sets a buffer to be used with thin instances. This method is a faster way to setup multiple instances than calling thinInstanceAdd repeatedly\r\n * @param kind name of the attribute. Use \"matrix\" to setup the buffer of matrices\r\n * @param buffer buffer to set\r\n * @param stride size in floats of each value of the buffer\r\n * @param staticBuffer indicates that the buffer is static, so that you won't change it after it is set (better performances - false by default)\r\n */\r\n thinInstanceSetBuffer(kind: string, buffer: Nullable<Float32Array>, stride?: number, staticBuffer?: boolean): void;\r\n\r\n /**\r\n * Gets the list of world matrices\r\n * @returns an array containing all the world matrices from the thin instances\r\n */\r\n thinInstanceGetWorldMatrices(): Matrix[];\r\n\r\n /**\r\n * Synchronize the gpu buffers with a thin instance buffer. Call this method if you update later on the buffers passed to thinInstanceSetBuffer\r\n * @param kind name of the attribute to update. Use \"matrix\" to update the buffer of matrices\r\n */\r\n thinInstanceBufferUpdated(kind: string): void;\r\n\r\n /**\r\n * Applies a partial update to a buffer directly on the GPU\r\n * Note that the buffer located on the CPU is NOT updated! It's up to you to update it (or not) with the same data you pass to this method\r\n * @param kind name of the attribute to update. Use \"matrix\" to update the buffer of matrices\r\n * @param data the data to set in the GPU buffer\r\n * @param offset the offset in the GPU buffer where to update the data\r\n */\r\n thinInstancePartialBufferUpdate(kind: string, data: Float32Array, offset: number): void;\r\n\r\n /**\r\n * Refreshes the bounding info, taking into account all the thin instances defined\r\n * @param forceRefreshParentInfo true to force recomputing the mesh bounding info and use it to compute the aggregated bounding info\r\n * @param applySkeleton defines whether to apply the skeleton before computing the bounding info\r\n * @param applyMorph defines whether to apply the morph target before computing the bounding info\r\n */\r\n thinInstanceRefreshBoundingInfo(forceRefreshParentInfo?: boolean, applySkeleton?: boolean, applyMorph?: boolean): void;\r\n\r\n /** @internal */\r\n _thinInstanceInitializeUserStorage(): void;\r\n\r\n /** @internal */\r\n _thinInstanceUpdateBufferSize(kind: string, numInstances?: number): void;\r\n\r\n /** @internal */\r\n _thinInstanceCreateMatrixBuffer(kind: string, buffer: Nullable<Float32Array>, staticBuffer: boolean): Buffer;\r\n\r\n /** @internal */\r\n _userThinInstanceBuffersStorage: {\r\n data: { [key: string]: Float32Array };\r\n sizes: { [key: string]: number };\r\n vertexBuffers: { [key: string]: Nullable<VertexBuffer> };\r\n strides: { [key: string]: number };\r\n };\r\n }\r\n}\r\n\r\nMesh.prototype.thinInstanceAdd = function (matrix: DeepImmutableObject<Matrix> | Array<DeepImmutableObject<Matrix>>, refresh: boolean = true): number {\r\n if (!this.getScene().getEngine().getCaps().instancedArrays) {\r\n Logger.Error(\"Thin Instances are not supported on this device as Instanced Array extension not supported\");\r\n return -1;\r\n }\r\n\r\n this._thinInstanceUpdateBufferSize(\"matrix\", Array.isArray(matrix) ? matrix.length : 1);\r\n\r\n const index = this._thinInstanceDataStorage.instancesCount;\r\n\r\n if (Array.isArray(matrix)) {\r\n for (let i = 0; i < matrix.length; ++i) {\r\n this.thinInstanceSetMatrixAt(this._thinInstanceDataStorage.instancesCount++, matrix[i], i === matrix.length - 1 && refresh);\r\n }\r\n } else {\r\n this.thinInstanceSetMatrixAt(this._thinInstanceDataStorage.instancesCount++, matrix, refresh);\r\n }\r\n\r\n return index;\r\n};\r\n\r\nMesh.prototype.thinInstanceAddSelf = function (refresh: boolean = true): number {\r\n return this.thinInstanceAdd(Matrix.IdentityReadOnly, refresh);\r\n};\r\n\r\nMesh.prototype.thinInstanceRegisterAttribute = function (kind: string, stride: number): void {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n this.removeVerticesData(kind);\r\n\r\n this._thinInstanceInitializeUserStorage();\r\n\r\n this._userThinInstanceBuffersStorage.strides[kind] = stride;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = stride * Math.max(32, this._thinInstanceDataStorage.instancesCount); // Initial size\r\n this._userThinInstanceBuffersStorage.data[kind] = new Float32Array(this._userThinInstanceBuffersStorage.sizes[kind]);\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), this._userThinInstanceBuffersStorage.data[kind], kind, true, false, stride, true);\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n};\r\n\r\nMesh.prototype.thinInstanceSetMatrixAt = function (index: number, matrix: DeepImmutableObject<Matrix>, refresh: boolean = true): boolean {\r\n if (!this._thinInstanceDataStorage.matrixData || index >= this._thinInstanceDataStorage.instancesCount) {\r\n return false;\r\n }\r\n\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n matrix.copyToArray(matrixData, index * 16);\r\n\r\n if (this._thinInstanceDataStorage.worldMatrices) {\r\n this._thinInstanceDataStorage.worldMatrices[index] = matrix as Matrix;\r\n }\r\n\r\n if (refresh) {\r\n this.thinInstanceBufferUpdated(\"matrix\");\r\n\r\n if (!this.doNotSyncBoundingInfo) {\r\n this.thinInstanceRefreshBoundingInfo(false);\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nMesh.prototype.thinInstanceSetAttributeAt = function (kind: string, index: number, value: Array<number>, refresh: boolean = true): boolean {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (!this._userThinInstanceBuffersStorage || !this._userThinInstanceBuffersStorage.data[kind] || index >= this._thinInstanceDataStorage.instancesCount) {\r\n return false;\r\n }\r\n\r\n this._thinInstanceUpdateBufferSize(kind, 0); // make sur the buffer for the kind attribute is big enough\r\n\r\n this._userThinInstanceBuffersStorage.data[kind].set(value, index * this._userThinInstanceBuffersStorage.strides[kind]);\r\n\r\n if (refresh) {\r\n this.thinInstanceBufferUpdated(kind);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nObject.defineProperty(Mesh.prototype, \"thinInstanceCount\", {\r\n get: function (this: Mesh) {\r\n return this._thinInstanceDataStorage.instancesCount;\r\n },\r\n set: function (this: Mesh, value: number) {\r\n const matrixData = this._thinInstanceDataStorage.matrixData ?? this.source?._thinInstanceDataStorage.matrixData;\r\n const numMaxInstances = matrixData ? matrixData.length / 16 : 0;\r\n\r\n if (value <= numMaxInstances) {\r\n this._thinInstanceDataStorage.instancesCount = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nMesh.prototype._thinInstanceCreateMatrixBuffer = function (kind: string, buffer: Float32Array, staticBuffer: boolean = false): Buffer {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n const matrixBuffer = new Buffer(this.getEngine(), buffer, !staticBuffer, 16, false, true);\r\n\r\n for (let i = 0; i < 4; i++) {\r\n this.setVerticesBuffer(matrixBuffer.createVertexBuffer(kind + i, i * 4, 4));\r\n }\r\n\r\n return matrixBuffer;\r\n};\r\n\r\nMesh.prototype.thinInstanceSetBuffer = function (kind: string, buffer: Nullable<Float32Array>, stride: number = 0, staticBuffer: boolean = false): void {\r\n stride = stride || 16;\r\n\r\n if (kind === \"matrix\") {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = null;\r\n this._thinInstanceDataStorage.matrixBufferSize = buffer ? buffer.length : 32 * stride;\r\n this._thinInstanceDataStorage.matrixData = buffer;\r\n this._thinInstanceDataStorage.worldMatrices = null;\r\n\r\n if (buffer !== null) {\r\n this._thinInstanceDataStorage.instancesCount = buffer.length / stride;\r\n this._thinInstanceDataStorage.matrixBuffer = this._thinInstanceCreateMatrixBuffer(\"world\", buffer, staticBuffer);\r\n\r\n if (!this.doNotSyncBoundingInfo) {\r\n this.thinInstanceRefreshBoundingInfo(false);\r\n }\r\n } else {\r\n this._thinInstanceDataStorage.instancesCount = 0;\r\n if (!this.doNotSyncBoundingInfo) {\r\n // mesh has no more thin instances, so need to recompute the bounding box because it's the regular mesh that will now be displayed\r\n this.refreshBoundingInfo();\r\n }\r\n }\r\n } else if (kind === \"previousMatrix\") {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = null;\r\n this._thinInstanceDataStorage.previousMatrixData = buffer;\r\n if (buffer !== null) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer = this._thinInstanceCreateMatrixBuffer(\"previousWorld\", buffer, staticBuffer);\r\n }\r\n } else {\r\n // color for instanced mesh is ColorInstanceKind and not ColorKind because of native that needs to do the differenciation\r\n // hot switching kind here to preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (buffer === null) {\r\n if (this._userThinInstanceBuffersStorage?.data[kind]) {\r\n this.removeVerticesData(kind);\r\n delete this._userThinInstanceBuffersStorage.data[kind];\r\n delete this._userThinInstanceBuffersStorage.strides[kind];\r\n delete this._userThinInstanceBuffersStorage.sizes[kind];\r\n delete this._userThinInstanceBuffersStorage.vertexBuffers[kind];\r\n }\r\n } else {\r\n this._thinInstanceInitializeUserStorage();\r\n\r\n this._userThinInstanceBuffersStorage.data[kind] = buffer;\r\n this._userThinInstanceBuffersStorage.strides[kind] = stride;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = buffer.length;\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), buffer, kind, !staticBuffer, false, stride, true);\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n }\r\n }\r\n};\r\n\r\nMesh.prototype.thinInstanceBufferUpdated = function (kind: string): void {\r\n if (kind === \"matrix\") {\r\n this._thinInstanceDataStorage.matrixBuffer?.updateDirectly(this._thinInstanceDataStorage.matrixData!, 0, this._thinInstanceDataStorage.instancesCount);\r\n } else if (kind === \"previousMatrix\") {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.updateDirectly(this._thinInstanceDataStorage.previousMatrixData!, 0, this._thinInstanceDataStorage.instancesCount);\r\n } else {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (this._userThinInstanceBuffersStorage?.vertexBuffers[kind]) {\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]!.updateDirectly(this._userThinInstanceBuffersStorage.data[kind], 0);\r\n }\r\n }\r\n};\r\n\r\nMesh.prototype.thinInstancePartialBufferUpdate = function (kind: string, data: Float32Array, offset: number): void {\r\n if (kind === \"matrix\") {\r\n if (this._thinInstanceDataStorage.matrixBuffer) {\r\n this._thinInstanceDataStorage.matrixBuffer.updateDirectly(data, offset);\r\n }\r\n } else {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (this._userThinInstanceBuffersStorage?.vertexBuffers[kind]) {\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]!.updateDirectly(data, offset);\r\n }\r\n }\r\n};\r\n\r\nMesh.prototype.thinInstanceGetWorldMatrices = function (): Matrix[] {\r\n if (!this._thinInstanceDataStorage.matrixData || !this._thinInstanceDataStorage.matrixBuffer) {\r\n return [];\r\n }\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n if (!this._thinInstanceDataStorage.worldMatrices) {\r\n this._thinInstanceDataStorage.worldMatrices = [] as Matrix[];\r\n\r\n for (let i = 0; i < this._thinInstanceDataStorage.instancesCount; ++i) {\r\n this._thinInstanceDataStorage.worldMatrices[i] = Matrix.FromArray(matrixData, i * 16);\r\n }\r\n }\r\n\r\n return this._thinInstanceDataStorage.worldMatrices;\r\n};\r\n\r\nMesh.prototype.thinInstanceRefreshBoundingInfo = function (forceRefreshParentInfo: boolean = false, applySkeleton: boolean = false, applyMorph: boolean = false) {\r\n if (!this._thinInstanceDataStorage.matrixData || !this._thinInstanceDataStorage.matrixBuffer) {\r\n return;\r\n }\r\n\r\n const vectors = this._thinInstanceDataStorage.boundingVectors;\r\n\r\n if (forceRefreshParentInfo || !this.rawBoundingInfo) {\r\n vectors.length = 0;\r\n this.refreshBoundingInfo(applySkeleton, applyMorph);\r\n const boundingInfo = this.getBoundingInfo();\r\n this.rawBoundingInfo = new BoundingInfo(boundingInfo.minimum, boundingInfo.maximum);\r\n }\r\n\r\n const boundingInfo = this.getBoundingInfo();\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n if (vectors.length === 0) {\r\n for (let v = 0; v < boundingInfo.boundingBox.vectors.length; ++v) {\r\n vectors.push(boundingInfo.boundingBox.vectors[v].clone());\r\n }\r\n }\r\n\r\n TmpVectors.Vector3[0].setAll(Number.POSITIVE_INFINITY); // min\r\n TmpVectors.Vector3[1].setAll(Number.NEGATIVE_INFINITY); // max\r\n\r\n for (let i = 0; i < this._thinInstanceDataStorage.instancesCount; ++i) {\r\n Matrix.FromArrayToRef(matrixData, i * 16, TmpVectors.Matrix[0]);\r\n\r\n for (let v = 0; v < vectors.length; ++v) {\r\n Vector3.TransformCoordinatesToRef(vectors[v], TmpVectors.Matrix[0], TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[0].minimizeInPlace(TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[1].maximizeInPlace(TmpVectors.Vector3[2]);\r\n }\r\n }\r\n\r\n boundingInfo.reConstruct(TmpVectors.Vector3[0], TmpVectors.Vector3[1]);\r\n\r\n this._updateBoundingInfo();\r\n};\r\n\r\nMesh.prototype._thinInstanceUpdateBufferSize = function (kind: string, numInstances: number = 1) {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n const kindIsMatrix = kind === \"matrix\";\r\n\r\n if (!kindIsMatrix && (!this._userThinInstanceBuffersStorage || !this._userThinInstanceBuffersStorage.strides[kind])) {\r\n return;\r\n }\r\n\r\n const stride = kindIsMatrix ? 16 : this._userThinInstanceBuffersStorage.strides[kind];\r\n const currentSize = kindIsMatrix ? this._thinInstanceDataStorage.matrixBufferSize : this._userThinInstanceBuffersStorage.sizes[kind];\r\n let data = kindIsMatrix ? this._thinInstanceDataStorage.matrixData : this._userThinInstanceBuffersStorage.data[kind];\r\n\r\n const bufferSize = (this._thinInstanceDataStorage.instancesCount + numInstances) * stride;\r\n\r\n let newSize = currentSize;\r\n\r\n while (newSize < bufferSize) {\r\n newSize *= 2;\r\n }\r\n\r\n if (!data || currentSize != newSize) {\r\n if (!data) {\r\n data = new Float32Array(newSize);\r\n } else {\r\n const newData = new Float32Array(newSize);\r\n newData.set(data, 0);\r\n data = newData;\r\n }\r\n\r\n if (kindIsMatrix) {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = this._thinInstanceCreateMatrixBuffer(\"world\", data, false);\r\n this._thinInstanceDataStorage.matrixData = data;\r\n this._thinInstanceDataStorage.matrixBufferSize = newSize;\r\n if (this._scene.needsPreviousWorldMatrices && !this._thinInstanceDataStorage.previousMatrixData) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = this._thinInstanceCreateMatrixBuffer(\"previousWorld\", data, false);\r\n }\r\n } else {\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]?.dispose();\r\n\r\n this._userThinInstanceBuffersStorage.data[kind] = data;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = newSize;\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), data, kind, true, false, stride, true);\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n }\r\n }\r\n};\r\n\r\nMesh.prototype._thinInstanceInitializeUserStorage = function () {\r\n if (!this._userThinInstanceBuffersStorage) {\r\n this._userThinInstanceBuffersStorage = {\r\n data: {},\r\n sizes: {},\r\n vertexBuffers: {},\r\n strides: {},\r\n };\r\n }\r\n};\r\n\r\nMesh.prototype._disposeThinInstanceSpecificData = function () {\r\n if (this._thinInstanceDataStorage?.matrixBuffer) {\r\n this._thinInstanceDataStorage.matrixBuffer.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = null;\r\n }\r\n};\r\n"]}
@@ -31,9 +31,10 @@ export declare function RemoveComments(block: string): string;
31
31
  * @param s the string to parse
32
32
  * @param index starting index in the string
33
33
  * @param c the character to find
34
+ * @param c2 an optional second character to find
34
35
  * @returns the index of the character if found, else -1
35
36
  */
36
- export declare function FindBackward(s: string, index: number, c: string): number;
37
+ export declare function FindBackward(s: string, index: number, c: string, c2?: string): number;
37
38
  /**
38
39
  * Escapes a string so that it is usable as a regular expression
39
40
  * @param s string to escape
@@ -155,10 +155,11 @@ export function RemoveComments(block) {
155
155
  * @param s the string to parse
156
156
  * @param index starting index in the string
157
157
  * @param c the character to find
158
+ * @param c2 an optional second character to find
158
159
  * @returns the index of the character if found, else -1
159
160
  */
160
- export function FindBackward(s, index, c) {
161
- while (index >= 0 && s.charAt(index) !== c) {
161
+ export function FindBackward(s, index, c, c2) {
162
+ while (index >= 0 && s.charAt(index) !== c && (!c2 || s.charAt(index) !== c2)) {
162
163
  index--;
163
164
  }
164
165
  return index;
@@ -1 +1 @@
1
- {"version":3,"file":"codeStringParsingTools.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/codeStringParsingTools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Extracts the characters between two markers (for eg, between \"(\" and \")\"). The function handles nested markers as well as markers inside strings (delimited by \", ' or `) and comments\r\n * @param markerOpen opening marker\r\n * @param markerClose closing marker\r\n * @param block code block to parse\r\n * @param startIndex starting index in block where the extraction must start. The character at block[startIndex] should be the markerOpen character!\r\n * @returns index of the last character for the extraction (or -1 if the string is invalid - no matching closing marker found). The string to extract (without the markers) is the string between startIndex + 1 and the returned value (exclusive)\r\n */\r\nexport function ExtractBetweenMarkers(markerOpen: string, markerClose: string, block: string, startIndex: number): number {\r\n let currPos = startIndex,\r\n openMarkers = 0,\r\n waitForChar = \"\";\r\n\r\n while (currPos < block.length) {\r\n const currChar = block.charAt(currPos);\r\n\r\n if (!waitForChar) {\r\n switch (currChar) {\r\n case markerOpen:\r\n openMarkers++;\r\n break;\r\n case markerClose:\r\n openMarkers--;\r\n break;\r\n case '\"':\r\n case \"'\":\r\n case \"`\":\r\n waitForChar = currChar;\r\n break;\r\n case \"/\":\r\n if (currPos + 1 < block.length) {\r\n const nextChar = block.charAt(currPos + 1);\r\n if (nextChar === \"/\") {\r\n waitForChar = \"\\n\";\r\n } else if (nextChar === \"*\") {\r\n waitForChar = \"*/\";\r\n }\r\n }\r\n break;\r\n }\r\n } else {\r\n if (currChar === waitForChar) {\r\n if (waitForChar === '\"' || waitForChar === \"'\") {\r\n block.charAt(currPos - 1) !== \"\\\\\" && (waitForChar = \"\");\r\n } else {\r\n waitForChar = \"\";\r\n }\r\n } else if (waitForChar === \"*/\" && currChar === \"*\" && currPos + 1 < block.length) {\r\n block.charAt(currPos + 1) === \"/\" && (waitForChar = \"\");\r\n if (waitForChar === \"\") {\r\n currPos++;\r\n }\r\n }\r\n }\r\n\r\n currPos++;\r\n if (openMarkers === 0) {\r\n break;\r\n }\r\n }\r\n\r\n return openMarkers === 0 ? currPos - 1 : -1;\r\n}\r\n\r\n/**\r\n * Parses a string and skip whitespaces\r\n * @param s string to parse\r\n * @param index index where to start parsing\r\n * @returns the index after all whitespaces have been skipped\r\n */\r\nexport function SkipWhitespaces(s: string, index: number): number {\r\n while (index < s.length) {\r\n const c = s[index];\r\n if (c !== \" \" && c !== \"\\n\" && c !== \"\\r\" && c !== \"\\t\" && c !== \"\\u000a\" && c !== \"\\u00a0\") {\r\n break;\r\n }\r\n index++;\r\n }\r\n\r\n return index;\r\n}\r\n\r\n/**\r\n * Checks if a character is an identifier character (meaning, if it is 0-9, A-Z, a-z or _)\r\n * @param c character to check\r\n * @returns true if the character is an identifier character\r\n */\r\nexport function IsIdentifierChar(c: string): boolean {\r\n const v = c.charCodeAt(0);\r\n return (\r\n (v >= 48 && v <= 57) || // 0-9\r\n (v >= 65 && v <= 90) || // A-Z\r\n (v >= 97 && v <= 122) || // a-z\r\n v == 95\r\n ); // _\r\n}\r\n\r\n/**\r\n * Removes the comments of a code block\r\n * @param block code block to parse\r\n * @returns block with the comments removed\r\n */\r\nexport function RemoveComments(block: string): string {\r\n let currPos = 0,\r\n waitForChar = \"\",\r\n inComments = false;\r\n const s = [];\r\n\r\n while (currPos < block.length) {\r\n const currChar = block.charAt(currPos);\r\n\r\n if (!waitForChar) {\r\n switch (currChar) {\r\n case '\"':\r\n case \"'\":\r\n case \"`\":\r\n waitForChar = currChar;\r\n break;\r\n case \"/\":\r\n if (currPos + 1 < block.length) {\r\n const nextChar = block.charAt(currPos + 1);\r\n if (nextChar === \"/\") {\r\n waitForChar = \"\\n\";\r\n inComments = true;\r\n } else if (nextChar === \"*\") {\r\n waitForChar = \"*/\";\r\n inComments = true;\r\n }\r\n }\r\n break;\r\n }\r\n if (!inComments) {\r\n s.push(currChar);\r\n }\r\n } else {\r\n if (currChar === waitForChar) {\r\n if (waitForChar === '\"' || waitForChar === \"'\") {\r\n block.charAt(currPos - 1) !== \"\\\\\" && (waitForChar = \"\");\r\n s.push(currChar);\r\n } else {\r\n waitForChar = \"\";\r\n inComments = false;\r\n }\r\n } else if (waitForChar === \"*/\" && currChar === \"*\" && currPos + 1 < block.length) {\r\n block.charAt(currPos + 1) === \"/\" && (waitForChar = \"\");\r\n if (waitForChar === \"\") {\r\n inComments = false;\r\n currPos++;\r\n }\r\n } else {\r\n if (!inComments) {\r\n s.push(currChar);\r\n }\r\n }\r\n }\r\n\r\n currPos++;\r\n }\r\n\r\n return s.join(\"\");\r\n}\r\n\r\n/**\r\n * Finds the first occurrence of a character in a string going backward\r\n * @param s the string to parse\r\n * @param index starting index in the string\r\n * @param c the character to find\r\n * @returns the index of the character if found, else -1\r\n */\r\nexport function FindBackward(s: string, index: number, c: string): number {\r\n while (index >= 0 && s.charAt(index) !== c) {\r\n index--;\r\n }\r\n\r\n return index;\r\n}\r\n\r\n/**\r\n * Escapes a string so that it is usable as a regular expression\r\n * @param s string to escape\r\n * @returns escaped string\r\n */\r\nexport function EscapeRegExp(s: string): string {\r\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n}\r\n"]}
1
+ {"version":3,"file":"codeStringParsingTools.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/codeStringParsingTools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Extracts the characters between two markers (for eg, between \"(\" and \")\"). The function handles nested markers as well as markers inside strings (delimited by \", ' or `) and comments\r\n * @param markerOpen opening marker\r\n * @param markerClose closing marker\r\n * @param block code block to parse\r\n * @param startIndex starting index in block where the extraction must start. The character at block[startIndex] should be the markerOpen character!\r\n * @returns index of the last character for the extraction (or -1 if the string is invalid - no matching closing marker found). The string to extract (without the markers) is the string between startIndex + 1 and the returned value (exclusive)\r\n */\r\nexport function ExtractBetweenMarkers(markerOpen: string, markerClose: string, block: string, startIndex: number): number {\r\n let currPos = startIndex,\r\n openMarkers = 0,\r\n waitForChar = \"\";\r\n\r\n while (currPos < block.length) {\r\n const currChar = block.charAt(currPos);\r\n\r\n if (!waitForChar) {\r\n switch (currChar) {\r\n case markerOpen:\r\n openMarkers++;\r\n break;\r\n case markerClose:\r\n openMarkers--;\r\n break;\r\n case '\"':\r\n case \"'\":\r\n case \"`\":\r\n waitForChar = currChar;\r\n break;\r\n case \"/\":\r\n if (currPos + 1 < block.length) {\r\n const nextChar = block.charAt(currPos + 1);\r\n if (nextChar === \"/\") {\r\n waitForChar = \"\\n\";\r\n } else if (nextChar === \"*\") {\r\n waitForChar = \"*/\";\r\n }\r\n }\r\n break;\r\n }\r\n } else {\r\n if (currChar === waitForChar) {\r\n if (waitForChar === '\"' || waitForChar === \"'\") {\r\n block.charAt(currPos - 1) !== \"\\\\\" && (waitForChar = \"\");\r\n } else {\r\n waitForChar = \"\";\r\n }\r\n } else if (waitForChar === \"*/\" && currChar === \"*\" && currPos + 1 < block.length) {\r\n block.charAt(currPos + 1) === \"/\" && (waitForChar = \"\");\r\n if (waitForChar === \"\") {\r\n currPos++;\r\n }\r\n }\r\n }\r\n\r\n currPos++;\r\n if (openMarkers === 0) {\r\n break;\r\n }\r\n }\r\n\r\n return openMarkers === 0 ? currPos - 1 : -1;\r\n}\r\n\r\n/**\r\n * Parses a string and skip whitespaces\r\n * @param s string to parse\r\n * @param index index where to start parsing\r\n * @returns the index after all whitespaces have been skipped\r\n */\r\nexport function SkipWhitespaces(s: string, index: number): number {\r\n while (index < s.length) {\r\n const c = s[index];\r\n if (c !== \" \" && c !== \"\\n\" && c !== \"\\r\" && c !== \"\\t\" && c !== \"\\u000a\" && c !== \"\\u00a0\") {\r\n break;\r\n }\r\n index++;\r\n }\r\n\r\n return index;\r\n}\r\n\r\n/**\r\n * Checks if a character is an identifier character (meaning, if it is 0-9, A-Z, a-z or _)\r\n * @param c character to check\r\n * @returns true if the character is an identifier character\r\n */\r\nexport function IsIdentifierChar(c: string): boolean {\r\n const v = c.charCodeAt(0);\r\n return (\r\n (v >= 48 && v <= 57) || // 0-9\r\n (v >= 65 && v <= 90) || // A-Z\r\n (v >= 97 && v <= 122) || // a-z\r\n v == 95\r\n ); // _\r\n}\r\n\r\n/**\r\n * Removes the comments of a code block\r\n * @param block code block to parse\r\n * @returns block with the comments removed\r\n */\r\nexport function RemoveComments(block: string): string {\r\n let currPos = 0,\r\n waitForChar = \"\",\r\n inComments = false;\r\n const s = [];\r\n\r\n while (currPos < block.length) {\r\n const currChar = block.charAt(currPos);\r\n\r\n if (!waitForChar) {\r\n switch (currChar) {\r\n case '\"':\r\n case \"'\":\r\n case \"`\":\r\n waitForChar = currChar;\r\n break;\r\n case \"/\":\r\n if (currPos + 1 < block.length) {\r\n const nextChar = block.charAt(currPos + 1);\r\n if (nextChar === \"/\") {\r\n waitForChar = \"\\n\";\r\n inComments = true;\r\n } else if (nextChar === \"*\") {\r\n waitForChar = \"*/\";\r\n inComments = true;\r\n }\r\n }\r\n break;\r\n }\r\n if (!inComments) {\r\n s.push(currChar);\r\n }\r\n } else {\r\n if (currChar === waitForChar) {\r\n if (waitForChar === '\"' || waitForChar === \"'\") {\r\n block.charAt(currPos - 1) !== \"\\\\\" && (waitForChar = \"\");\r\n s.push(currChar);\r\n } else {\r\n waitForChar = \"\";\r\n inComments = false;\r\n }\r\n } else if (waitForChar === \"*/\" && currChar === \"*\" && currPos + 1 < block.length) {\r\n block.charAt(currPos + 1) === \"/\" && (waitForChar = \"\");\r\n if (waitForChar === \"\") {\r\n inComments = false;\r\n currPos++;\r\n }\r\n } else {\r\n if (!inComments) {\r\n s.push(currChar);\r\n }\r\n }\r\n }\r\n\r\n currPos++;\r\n }\r\n\r\n return s.join(\"\");\r\n}\r\n\r\n/**\r\n * Finds the first occurrence of a character in a string going backward\r\n * @param s the string to parse\r\n * @param index starting index in the string\r\n * @param c the character to find\r\n * @param c2 an optional second character to find\r\n * @returns the index of the character if found, else -1\r\n */\r\nexport function FindBackward(s: string, index: number, c: string, c2?: string): number {\r\n while (index >= 0 && s.charAt(index) !== c && (!c2 || s.charAt(index) !== c2)) {\r\n index--;\r\n }\r\n\r\n return index;\r\n}\r\n\r\n/**\r\n * Escapes a string so that it is usable as a regular expression\r\n * @param s string to escape\r\n * @returns escaped string\r\n */\r\nexport function EscapeRegExp(s: string): string {\r\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n}\r\n"]}
package/Misc/dds.js CHANGED
@@ -299,7 +299,7 @@ export class DDSTools {
299
299
  static UploadDDSLevels(engine, texture, data, info, loadMipmaps, faces, lodIndex = -1, currentFace, destTypeMustBeFilterable = true) {
300
300
  let sphericalPolynomialFaces = null;
301
301
  if (info.sphericalPolynomial) {
302
- sphericalPolynomialFaces = new Array();
302
+ sphericalPolynomialFaces = [];
303
303
  }
304
304
  const ext = !!engine.getCaps().s3tc;
305
305
  // TODO WEBGPU Once generateMipMaps is split into generateMipMaps + hasMipMaps in InternalTexture this line can be removed
package/Misc/dds.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dds.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/dds.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\nimport { SphericalPolynomial } from \"../Maths/sphericalPolynomial\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { CubeMapToSphericalPolynomialTools } from \"../Misc/HighDynamicRange/cubemapToSphericalPolynomial\";\r\nimport type { Scene } from \"../scene\";\r\nimport { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { FromHalfFloat, ToHalfFloat } from \"./textureTools\";\r\n\r\nimport \"../Engines/Extensions/engine.cubeTexture\";\r\n\r\n// Based on demo done by Brandon Jones - http://media.tojicode.com/webgl-samples/dds.html\r\n// All values and structures referenced from:\r\n// http://msdn.microsoft.com/en-us/library/bb943991.aspx/\r\nconst DDS_MAGIC = 0x20534444;\r\n\r\nconst //DDSD_CAPS = 0x1,\r\n //DDSD_HEIGHT = 0x2,\r\n //DDSD_WIDTH = 0x4,\r\n //DDSD_PITCH = 0x8,\r\n //DDSD_PIXELFORMAT = 0x1000,\r\n DDSD_MIPMAPCOUNT = 0x20000;\r\n//DDSD_LINEARSIZE = 0x80000,\r\n//DDSD_DEPTH = 0x800000;\r\n\r\n// var DDSCAPS_COMPLEX = 0x8,\r\n// DDSCAPS_MIPMAP = 0x400000,\r\n// DDSCAPS_TEXTURE = 0x1000;\r\n\r\nconst DDSCAPS2_CUBEMAP = 0x200;\r\n// DDSCAPS2_CUBEMAP_POSITIVEX = 0x400,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800,\r\n// DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000,\r\n// DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000,\r\n// DDSCAPS2_VOLUME = 0x200000;\r\n\r\nconst //DDPF_ALPHAPIXELS = 0x1,\r\n //DDPF_ALPHA = 0x2,\r\n DDPF_FOURCC = 0x4,\r\n DDPF_RGB = 0x40,\r\n //DDPF_YUV = 0x200,\r\n DDPF_LUMINANCE = 0x20000;\r\n\r\nfunction FourCCToInt32(value: string) {\r\n return value.charCodeAt(0) + (value.charCodeAt(1) << 8) + (value.charCodeAt(2) << 16) + (value.charCodeAt(3) << 24);\r\n}\r\n\r\nfunction Int32ToFourCC(value: number) {\r\n return String.fromCharCode(value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >> 24) & 0xff);\r\n}\r\n\r\nconst FOURCC_DXT1 = FourCCToInt32(\"DXT1\");\r\nconst FOURCC_DXT3 = FourCCToInt32(\"DXT3\");\r\nconst FOURCC_DXT5 = FourCCToInt32(\"DXT5\");\r\nconst FOURCC_DX10 = FourCCToInt32(\"DX10\");\r\nconst FOURCC_D3DFMT_R16G16B16A16F = 113;\r\nconst FOURCC_D3DFMT_R32G32B32A32F = 116;\r\n\r\nconst DXGI_FORMAT_R32G32B32A32_FLOAT = 2;\r\nconst DXGI_FORMAT_R16G16B16A16_FLOAT = 10;\r\nconst DXGI_FORMAT_B8G8R8X8_UNORM = 88;\r\n\r\nconst headerLengthInt = 31; // The header length in 32 bit ints\r\n\r\n// Offsets into the header array\r\nconst off_magic = 0;\r\n\r\nconst off_size = 1;\r\nconst off_flags = 2;\r\nconst off_height = 3;\r\nconst off_width = 4;\r\n\r\nconst off_mipmapCount = 7;\r\n\r\nconst off_pfFlags = 20;\r\nconst off_pfFourCC = 21;\r\nconst off_RGBbpp = 22;\r\nconst off_RMask = 23;\r\nconst off_GMask = 24;\r\nconst off_BMask = 25;\r\nconst off_AMask = 26;\r\n// var off_caps1 = 27;\r\nconst off_caps2 = 28;\r\n// var off_caps3 = 29;\r\n// var off_caps4 = 30;\r\nconst off_dxgiFormat = 32;\r\n\r\n/**\r\n * Direct draw surface info\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/direct3ddds/dx-graphics-dds-pguide\r\n */\r\nexport interface DDSInfo {\r\n /**\r\n * Width of the texture\r\n */\r\n width: number;\r\n /**\r\n * Width of the texture\r\n */\r\n height: number;\r\n /**\r\n * Number of Mipmaps for the texture\r\n * @see https://en.wikipedia.org/wiki/Mipmap\r\n */\r\n mipmapCount: number;\r\n /**\r\n * If the textures format is a known fourCC format\r\n * @see https://www.fourcc.org/\r\n */\r\n isFourCC: boolean;\r\n /**\r\n * If the texture is an RGB format eg. DXGI_FORMAT_B8G8R8X8_UNORM format\r\n */\r\n isRGB: boolean;\r\n /**\r\n * If the texture is a lumincance format\r\n */\r\n isLuminance: boolean;\r\n /**\r\n * If this is a cube texture\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/direct3ddds/dds-file-layout-for-cubic-environment-maps\r\n */\r\n isCube: boolean;\r\n /**\r\n * If the texture is a compressed format eg. FOURCC_DXT1\r\n */\r\n isCompressed: boolean;\r\n /**\r\n * The dxgiFormat of the texture\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/api/dxgiformat/ne-dxgiformat-dxgi_format\r\n */\r\n dxgiFormat: number;\r\n /**\r\n * Texture type eg. Engine.TEXTURETYPE_UNSIGNED_INT, Engine.TEXTURETYPE_FLOAT\r\n */\r\n textureType: number;\r\n /**\r\n * Sphericle polynomial created for the dds texture\r\n */\r\n sphericalPolynomial?: SphericalPolynomial;\r\n}\r\n\r\n/**\r\n * Class used to provide DDS decompression tools\r\n */\r\nexport class DDSTools {\r\n /**\r\n * Gets or sets a boolean indicating that LOD info is stored in alpha channel (false by default)\r\n */\r\n public static StoreLODInAlphaChannel = false;\r\n\r\n /**\r\n * Gets DDS information from an array buffer\r\n * @param data defines the array buffer view to read data from\r\n * @returns the DDS information\r\n */\r\n public static GetDDSInfo(data: ArrayBufferView): DDSInfo {\r\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\r\n const extendedHeader = new Int32Array(data.buffer, data.byteOffset, headerLengthInt + 4);\r\n\r\n let mipmapCount = 1;\r\n if (header[off_flags] & DDSD_MIPMAPCOUNT) {\r\n mipmapCount = Math.max(1, header[off_mipmapCount]);\r\n }\r\n\r\n const fourCC = header[off_pfFourCC];\r\n const dxgiFormat = fourCC === FOURCC_DX10 ? extendedHeader[off_dxgiFormat] : 0;\r\n let textureType = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n\r\n switch (fourCC) {\r\n case FOURCC_D3DFMT_R16G16B16A16F:\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n break;\r\n case FOURCC_D3DFMT_R32G32B32A32F:\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n break;\r\n case FOURCC_DX10:\r\n if (dxgiFormat === DXGI_FORMAT_R16G16B16A16_FLOAT) {\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n break;\r\n }\r\n if (dxgiFormat === DXGI_FORMAT_R32G32B32A32_FLOAT) {\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n width: header[off_width],\r\n height: header[off_height],\r\n mipmapCount: mipmapCount,\r\n isFourCC: (header[off_pfFlags] & DDPF_FOURCC) === DDPF_FOURCC,\r\n isRGB: (header[off_pfFlags] & DDPF_RGB) === DDPF_RGB,\r\n isLuminance: (header[off_pfFlags] & DDPF_LUMINANCE) === DDPF_LUMINANCE,\r\n isCube: (header[off_caps2] & DDSCAPS2_CUBEMAP) === DDSCAPS2_CUBEMAP,\r\n isCompressed: fourCC === FOURCC_DXT1 || fourCC === FOURCC_DXT3 || fourCC === FOURCC_DXT5,\r\n dxgiFormat: dxgiFormat,\r\n textureType: textureType,\r\n };\r\n }\r\n\r\n private static _GetHalfFloatAsFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Float32Array {\r\n const destArray = new Float32Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = FromHalfFloat(srcData[srcPos]);\r\n destArray[index + 1] = FromHalfFloat(srcData[srcPos + 1]);\r\n destArray[index + 2] = FromHalfFloat(srcData[srcPos + 2]);\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = FromHalfFloat(srcData[srcPos + 3]);\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetHalfFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint16Array {\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n const destArray = new Uint16Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = srcData[srcPos];\r\n destArray[index + 1] = srcData[srcPos + 1];\r\n destArray[index + 2] = srcData[srcPos + 2];\r\n destArray[index + 3] = ToHalfFloat(lod);\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n return new Uint16Array(arrayBuffer, dataOffset, dataLength);\r\n }\r\n\r\n private static _GetFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Float32Array {\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n const destArray = new Float32Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = srcData[srcPos];\r\n destArray[index + 1] = srcData[srcPos + 1];\r\n destArray[index + 2] = srcData[srcPos + 2];\r\n destArray[index + 3] = lod;\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n return new Float32Array(arrayBuffer, dataOffset, dataLength);\r\n }\r\n\r\n private static _GetFloatAsHalfFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint16Array {\r\n const destArray = new Uint16Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n destArray[index] = ToHalfFloat(srcData[index]);\r\n destArray[index + 1] = ToHalfFloat(srcData[index + 1]);\r\n destArray[index + 2] = ToHalfFloat(srcData[index + 2]);\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = ToHalfFloat(lod);\r\n } else {\r\n destArray[index + 3] = ToHalfFloat(srcData[index + 3]);\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetFloatAsUIntRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint8Array {\r\n const destArray = new Uint8Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = Scalar.Clamp(srcData[srcPos]) * 255;\r\n destArray[index + 1] = Scalar.Clamp(srcData[srcPos + 1]) * 255;\r\n destArray[index + 2] = Scalar.Clamp(srcData[srcPos + 2]) * 255;\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = Scalar.Clamp(srcData[srcPos + 3]) * 255;\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetHalfFloatAsUIntRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint8Array {\r\n const destArray = new Uint8Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = Scalar.Clamp(FromHalfFloat(srcData[srcPos])) * 255;\r\n destArray[index + 1] = Scalar.Clamp(FromHalfFloat(srcData[srcPos + 1])) * 255;\r\n destArray[index + 2] = Scalar.Clamp(FromHalfFloat(srcData[srcPos + 2])) * 255;\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = Scalar.Clamp(FromHalfFloat(srcData[srcPos + 3])) * 255;\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetRGBAArrayBuffer(\r\n width: number,\r\n height: number,\r\n dataOffset: number,\r\n dataLength: number,\r\n arrayBuffer: ArrayBuffer,\r\n rOffset: number,\r\n gOffset: number,\r\n bOffset: number,\r\n aOffset: number\r\n ): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n\r\n byteArray[index] = srcData[srcPos + rOffset];\r\n byteArray[index + 1] = srcData[srcPos + gOffset];\r\n byteArray[index + 2] = srcData[srcPos + bOffset];\r\n byteArray[index + 3] = srcData[srcPos + aOffset];\r\n index += 4;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n private static _ExtractLongWordOrder(value: number): number {\r\n if (value === 0 || value === 255 || value === -16777216) {\r\n return 0;\r\n }\r\n\r\n return 1 + DDSTools._ExtractLongWordOrder(value >> 8);\r\n }\r\n\r\n private static _GetRGBArrayBuffer(\r\n width: number,\r\n height: number,\r\n dataOffset: number,\r\n dataLength: number,\r\n arrayBuffer: ArrayBuffer,\r\n rOffset: number,\r\n gOffset: number,\r\n bOffset: number\r\n ): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 3;\r\n\r\n byteArray[index] = srcData[srcPos + rOffset];\r\n byteArray[index + 1] = srcData[srcPos + gOffset];\r\n byteArray[index + 2] = srcData[srcPos + bOffset];\r\n index += 3;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n private static _GetLuminanceArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = x + y * width;\r\n byteArray[index] = srcData[srcPos];\r\n index++;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n /**\r\n * Uploads DDS Levels to a Babylon Texture\r\n * @internal\r\n */\r\n public static UploadDDSLevels(\r\n engine: ThinEngine,\r\n texture: InternalTexture,\r\n data: ArrayBufferView,\r\n info: DDSInfo,\r\n loadMipmaps: boolean,\r\n faces: number,\r\n lodIndex = -1,\r\n currentFace?: number,\r\n destTypeMustBeFilterable = true\r\n ) {\r\n let sphericalPolynomialFaces: Nullable<Array<ArrayBufferView>> = null;\r\n if (info.sphericalPolynomial) {\r\n sphericalPolynomialFaces = new Array<ArrayBufferView>();\r\n }\r\n const ext = !!engine.getCaps().s3tc;\r\n\r\n // TODO WEBGPU Once generateMipMaps is split into generateMipMaps + hasMipMaps in InternalTexture this line can be removed\r\n texture.generateMipMaps = loadMipmaps;\r\n\r\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\r\n let fourCC: number,\r\n width: number,\r\n height: number,\r\n dataLength: number = 0,\r\n dataOffset: number;\r\n let byteArray: Uint8Array, mipmapCount: number, mip: number;\r\n let internalCompressedFormat = 0;\r\n let blockBytes = 1;\r\n\r\n if (header[off_magic] !== DDS_MAGIC) {\r\n Logger.Error(\"Invalid magic number in DDS header\");\r\n return;\r\n }\r\n\r\n if (!info.isFourCC && !info.isRGB && !info.isLuminance) {\r\n Logger.Error(\"Unsupported format, must contain a FourCC, RGB or LUMINANCE code\");\r\n return;\r\n }\r\n\r\n if (info.isCompressed && !ext) {\r\n Logger.Error(\"Compressed textures are not supported on this platform.\");\r\n return;\r\n }\r\n\r\n let bpp = header[off_RGBbpp];\r\n dataOffset = header[off_size] + 4;\r\n\r\n let computeFormats = false;\r\n\r\n if (info.isFourCC) {\r\n fourCC = header[off_pfFourCC];\r\n switch (fourCC) {\r\n case FOURCC_DXT1:\r\n blockBytes = 8;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1;\r\n break;\r\n case FOURCC_DXT3:\r\n blockBytes = 16;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3;\r\n break;\r\n case FOURCC_DXT5:\r\n blockBytes = 16;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n break;\r\n case FOURCC_D3DFMT_R16G16B16A16F:\r\n computeFormats = true;\r\n bpp = 64;\r\n break;\r\n case FOURCC_D3DFMT_R32G32B32A32F:\r\n computeFormats = true;\r\n bpp = 128;\r\n break;\r\n case FOURCC_DX10: {\r\n // There is an additionnal header so dataOffset need to be changed\r\n dataOffset += 5 * 4; // 5 uints\r\n\r\n let supported = false;\r\n switch (info.dxgiFormat) {\r\n case DXGI_FORMAT_R16G16B16A16_FLOAT:\r\n computeFormats = true;\r\n bpp = 64;\r\n supported = true;\r\n break;\r\n case DXGI_FORMAT_R32G32B32A32_FLOAT:\r\n computeFormats = true;\r\n bpp = 128;\r\n supported = true;\r\n break;\r\n case DXGI_FORMAT_B8G8R8X8_UNORM:\r\n info.isRGB = true;\r\n info.isFourCC = false;\r\n bpp = 32;\r\n supported = true;\r\n break;\r\n }\r\n\r\n if (supported) {\r\n break;\r\n }\r\n }\r\n // eslint-disable-next-line no-fallthrough\r\n default:\r\n console.error(\"Unsupported FourCC code:\", Int32ToFourCC(fourCC));\r\n return;\r\n }\r\n }\r\n\r\n const rOffset = DDSTools._ExtractLongWordOrder(header[off_RMask]);\r\n const gOffset = DDSTools._ExtractLongWordOrder(header[off_GMask]);\r\n const bOffset = DDSTools._ExtractLongWordOrder(header[off_BMask]);\r\n const aOffset = DDSTools._ExtractLongWordOrder(header[off_AMask]);\r\n\r\n if (computeFormats) {\r\n internalCompressedFormat = engine._getRGBABufferInternalSizedFormat(info.textureType);\r\n }\r\n\r\n mipmapCount = 1;\r\n if (header[off_flags] & DDSD_MIPMAPCOUNT && loadMipmaps !== false) {\r\n mipmapCount = Math.max(1, header[off_mipmapCount]);\r\n }\r\n\r\n const startFace = currentFace || 0;\r\n const caps = engine.getCaps();\r\n for (let face = startFace; face < faces; face++) {\r\n width = header[off_width];\r\n height = header[off_height];\r\n\r\n for (mip = 0; mip < mipmapCount; ++mip) {\r\n if (lodIndex === -1 || lodIndex === mip) {\r\n // In case of fixed LOD, if the lod has just been uploaded, early exit.\r\n const i = lodIndex === -1 ? mip : 0;\r\n\r\n if (!info.isCompressed && info.isFourCC) {\r\n texture.format = Constants.TEXTUREFORMAT_RGBA;\r\n dataLength = width * height * 4;\r\n let floatArray: Nullable<ArrayBufferView> = null;\r\n\r\n if (engine._badOS || engine._badDesktopOS || (!caps.textureHalfFloat && !caps.textureFloat)) {\r\n // Required because iOS has many issues with float and half float generation\r\n if (bpp === 128) {\r\n floatArray = DDSTools._GetFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(DDSTools._GetFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i));\r\n }\r\n } else if (bpp === 64) {\r\n floatArray = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(\r\n DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i)\r\n );\r\n }\r\n }\r\n\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n } else {\r\n const floatAvailable = caps.textureFloat && ((destTypeMustBeFilterable && caps.textureFloatLinearFiltering) || !destTypeMustBeFilterable);\r\n const halfFloatAvailable = caps.textureHalfFloat && ((destTypeMustBeFilterable && caps.textureHalfFloatLinearFiltering) || !destTypeMustBeFilterable);\r\n\r\n const destType =\r\n (bpp === 128 || (bpp === 64 && !halfFloatAvailable)) && floatAvailable\r\n ? Constants.TEXTURETYPE_FLOAT\r\n : (bpp === 64 || (bpp === 128 && !floatAvailable)) && halfFloatAvailable\r\n ? Constants.TEXTURETYPE_HALF_FLOAT\r\n : Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n\r\n let dataGetter: (width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number) => ArrayBufferView;\r\n let dataGetterPolynomial: Nullable<\r\n (width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number) => ArrayBufferView\r\n > = null;\r\n\r\n switch (bpp) {\r\n case 128: {\r\n switch (destType) {\r\n case Constants.TEXTURETYPE_FLOAT:\r\n dataGetter = DDSTools._GetFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = null;\r\n break;\r\n case Constants.TEXTURETYPE_HALF_FLOAT:\r\n dataGetter = DDSTools._GetFloatAsHalfFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\r\n break;\r\n case Constants.TEXTURETYPE_UNSIGNED_BYTE:\r\n dataGetter = DDSTools._GetFloatAsUIntRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\r\n break;\r\n }\r\n break;\r\n }\r\n default: {\r\n // 64 bpp\r\n switch (destType) {\r\n case Constants.TEXTURETYPE_FLOAT:\r\n dataGetter = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = null;\r\n break;\r\n case Constants.TEXTURETYPE_HALF_FLOAT:\r\n dataGetter = DDSTools._GetHalfFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n break;\r\n case Constants.TEXTURETYPE_UNSIGNED_BYTE:\r\n dataGetter = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n break;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n texture.type = destType;\r\n\r\n floatArray = dataGetter(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(\r\n dataGetterPolynomial ? dataGetterPolynomial(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i) : floatArray\r\n );\r\n }\r\n }\r\n\r\n if (floatArray) {\r\n engine._uploadDataToTextureDirectly(texture, floatArray, face, i);\r\n }\r\n } else if (info.isRGB) {\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n if (bpp === 24) {\r\n texture.format = Constants.TEXTUREFORMAT_RGB;\r\n dataLength = width * height * 3;\r\n byteArray = DDSTools._GetRGBArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset);\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n } else {\r\n // 32\r\n texture.format = Constants.TEXTUREFORMAT_RGBA;\r\n dataLength = width * height * 4;\r\n byteArray = DDSTools._GetRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset, aOffset);\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n }\r\n } else if (info.isLuminance) {\r\n const unpackAlignment = engine._getUnpackAlignement();\r\n const unpaddedRowSize = width;\r\n const paddedRowSize = Math.floor((width + unpackAlignment - 1) / unpackAlignment) * unpackAlignment;\r\n dataLength = paddedRowSize * (height - 1) + unpaddedRowSize;\r\n\r\n byteArray = DDSTools._GetLuminanceArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer);\r\n texture.format = Constants.TEXTUREFORMAT_LUMINANCE;\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n } else {\r\n dataLength = (((Math.max(4, width) / 4) * Math.max(4, height)) / 4) * blockBytes;\r\n byteArray = new Uint8Array(data.buffer, data.byteOffset + dataOffset, dataLength);\r\n\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n engine._uploadCompressedDataToTextureDirectly(texture, internalCompressedFormat, width, height, byteArray, face, i);\r\n }\r\n }\r\n dataOffset += bpp ? width * height * (bpp / 8) : dataLength;\r\n width *= 0.5;\r\n height *= 0.5;\r\n\r\n width = Math.max(1.0, width);\r\n height = Math.max(1.0, height);\r\n }\r\n\r\n if (currentFace !== undefined) {\r\n // Loading a single face\r\n break;\r\n }\r\n }\r\n if (sphericalPolynomialFaces && sphericalPolynomialFaces.length > 0) {\r\n info.sphericalPolynomial = CubeMapToSphericalPolynomialTools.ConvertCubeMapToSphericalPolynomial({\r\n size: header[off_width],\r\n right: sphericalPolynomialFaces[0],\r\n left: sphericalPolynomialFaces[1],\r\n up: sphericalPolynomialFaces[2],\r\n down: sphericalPolynomialFaces[3],\r\n front: sphericalPolynomialFaces[4],\r\n back: sphericalPolynomialFaces[5],\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n type: Constants.TEXTURETYPE_FLOAT,\r\n gammaSpace: false,\r\n });\r\n } else {\r\n info.sphericalPolynomial = undefined;\r\n }\r\n }\r\n}\r\n\r\ndeclare module \"../Engines/thinEngine\" {\r\n export interface ThinEngine {\r\n /**\r\n * Create a cube texture from prefiltered data (ie. the mipmaps contain ready to use data for PBR reflection)\r\n * @param rootUrl defines the url where the file to load is located\r\n * @param scene defines the current scene\r\n * @param lodScale defines scale to apply to the mip map selection\r\n * @param lodOffset defines offset to apply to the mip map selection\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials defines wheter or not to create polynomails harmonics for the texture\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n createPrefilteredCubeTexture(\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n lodScale: number,\r\n lodOffset: number,\r\n onLoad?: Nullable<(internalTexture: Nullable<InternalTexture>) => void>,\r\n onError?: Nullable<(message?: string, exception?: any) => void>,\r\n format?: number,\r\n forcedExtension?: any,\r\n createPolynomials?: boolean\r\n ): InternalTexture;\r\n }\r\n}\r\n\r\n/**\r\n * Create a cube texture from prefiltered data (ie. the mipmaps contain ready to use data for PBR reflection)\r\n * @param rootUrl defines the url where the file to load is located\r\n * @param scene defines the current scene\r\n * @param lodScale defines scale to apply to the mip map selection\r\n * @param lodOffset defines offset to apply to the mip map selection\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials defines wheter or not to create polynomails harmonics for the texture\r\n * @returns the cube texture as an InternalTexture\r\n */\r\nThinEngine.prototype.createPrefilteredCubeTexture = function (\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n lodScale: number,\r\n lodOffset: number,\r\n onLoad: Nullable<(internalTexture: Nullable<InternalTexture>) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format?: number,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = true\r\n): InternalTexture {\r\n const callback = (loadData: any) => {\r\n if (!loadData) {\r\n if (onLoad) {\r\n onLoad(null);\r\n }\r\n return;\r\n }\r\n\r\n const texture = loadData.texture as InternalTexture;\r\n if (!createPolynomials) {\r\n texture._sphericalPolynomial = new SphericalPolynomial();\r\n } else if (loadData.info.sphericalPolynomial) {\r\n texture._sphericalPolynomial = loadData.info.sphericalPolynomial;\r\n }\r\n texture._source = InternalTextureSource.CubePrefiltered;\r\n\r\n if (this.getCaps().textureLOD) {\r\n // Do not add extra process if texture lod is supported.\r\n if (onLoad) {\r\n onLoad(texture);\r\n }\r\n return;\r\n }\r\n\r\n const mipSlices = 3;\r\n\r\n const gl = this._gl;\r\n const width = loadData.width;\r\n if (!width) {\r\n return;\r\n }\r\n\r\n const textures: BaseTexture[] = [];\r\n for (let i = 0; i < mipSlices; i++) {\r\n //compute LOD from even spacing in smoothness (matching shader calculation)\r\n const smoothness = i / (mipSlices - 1);\r\n const roughness = 1 - smoothness;\r\n\r\n const minLODIndex = lodOffset; // roughness = 0\r\n const maxLODIndex = Scalar.Log2(width) * lodScale + lodOffset; // roughness = 1\r\n\r\n const lodIndex = minLODIndex + (maxLODIndex - minLODIndex) * roughness;\r\n const mipmapIndex = Math.round(Math.min(Math.max(lodIndex, 0), maxLODIndex));\r\n\r\n const glTextureFromLod = new InternalTexture(this, InternalTextureSource.Temp);\r\n glTextureFromLod.type = texture.type;\r\n glTextureFromLod.format = texture.format;\r\n glTextureFromLod.width = Math.pow(2, Math.max(Scalar.Log2(width) - mipmapIndex, 0));\r\n glTextureFromLod.height = glTextureFromLod.width;\r\n glTextureFromLod.isCube = true;\r\n glTextureFromLod._cachedWrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n glTextureFromLod._cachedWrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, glTextureFromLod, true);\r\n\r\n glTextureFromLod.samplingMode = Constants.TEXTURE_LINEAR_LINEAR;\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n\r\n if (loadData.isDDS) {\r\n const info: DDSInfo = loadData.info;\r\n const data: any = loadData.data;\r\n this._unpackFlipY(info.isCompressed);\r\n\r\n DDSTools.UploadDDSLevels(this, glTextureFromLod, data, info, true, 6, mipmapIndex);\r\n } else {\r\n Logger.Warn(\"DDS is the only prefiltered cube map supported so far.\");\r\n }\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, null);\r\n\r\n // Wrap in a base texture for easy binding.\r\n const lodTexture = new BaseTexture(scene);\r\n lodTexture._isCube = true;\r\n lodTexture._texture = glTextureFromLod;\r\n\r\n glTextureFromLod.isReady = true;\r\n textures.push(lodTexture);\r\n }\r\n\r\n texture._lodTextureHigh = textures[2];\r\n texture._lodTextureMid = textures[1];\r\n texture._lodTextureLow = textures[0];\r\n\r\n if (onLoad) {\r\n onLoad(texture);\r\n }\r\n };\r\n\r\n return this.createCubeTexture(rootUrl, scene, null, false, callback, onError, format, forcedExtension, createPolynomials, lodScale, lodOffset);\r\n};\r\n"]}
1
+ {"version":3,"file":"dds.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/dds.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\nimport { SphericalPolynomial } from \"../Maths/sphericalPolynomial\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { CubeMapToSphericalPolynomialTools } from \"../Misc/HighDynamicRange/cubemapToSphericalPolynomial\";\r\nimport type { Scene } from \"../scene\";\r\nimport { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { FromHalfFloat, ToHalfFloat } from \"./textureTools\";\r\n\r\nimport \"../Engines/Extensions/engine.cubeTexture\";\r\n\r\n// Based on demo done by Brandon Jones - http://media.tojicode.com/webgl-samples/dds.html\r\n// All values and structures referenced from:\r\n// http://msdn.microsoft.com/en-us/library/bb943991.aspx/\r\nconst DDS_MAGIC = 0x20534444;\r\n\r\nconst //DDSD_CAPS = 0x1,\r\n //DDSD_HEIGHT = 0x2,\r\n //DDSD_WIDTH = 0x4,\r\n //DDSD_PITCH = 0x8,\r\n //DDSD_PIXELFORMAT = 0x1000,\r\n DDSD_MIPMAPCOUNT = 0x20000;\r\n//DDSD_LINEARSIZE = 0x80000,\r\n//DDSD_DEPTH = 0x800000;\r\n\r\n// var DDSCAPS_COMPLEX = 0x8,\r\n// DDSCAPS_MIPMAP = 0x400000,\r\n// DDSCAPS_TEXTURE = 0x1000;\r\n\r\nconst DDSCAPS2_CUBEMAP = 0x200;\r\n// DDSCAPS2_CUBEMAP_POSITIVEX = 0x400,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800,\r\n// DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000,\r\n// DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000,\r\n// DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000,\r\n// DDSCAPS2_VOLUME = 0x200000;\r\n\r\nconst //DDPF_ALPHAPIXELS = 0x1,\r\n //DDPF_ALPHA = 0x2,\r\n DDPF_FOURCC = 0x4,\r\n DDPF_RGB = 0x40,\r\n //DDPF_YUV = 0x200,\r\n DDPF_LUMINANCE = 0x20000;\r\n\r\nfunction FourCCToInt32(value: string) {\r\n return value.charCodeAt(0) + (value.charCodeAt(1) << 8) + (value.charCodeAt(2) << 16) + (value.charCodeAt(3) << 24);\r\n}\r\n\r\nfunction Int32ToFourCC(value: number) {\r\n return String.fromCharCode(value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >> 24) & 0xff);\r\n}\r\n\r\nconst FOURCC_DXT1 = FourCCToInt32(\"DXT1\");\r\nconst FOURCC_DXT3 = FourCCToInt32(\"DXT3\");\r\nconst FOURCC_DXT5 = FourCCToInt32(\"DXT5\");\r\nconst FOURCC_DX10 = FourCCToInt32(\"DX10\");\r\nconst FOURCC_D3DFMT_R16G16B16A16F = 113;\r\nconst FOURCC_D3DFMT_R32G32B32A32F = 116;\r\n\r\nconst DXGI_FORMAT_R32G32B32A32_FLOAT = 2;\r\nconst DXGI_FORMAT_R16G16B16A16_FLOAT = 10;\r\nconst DXGI_FORMAT_B8G8R8X8_UNORM = 88;\r\n\r\nconst headerLengthInt = 31; // The header length in 32 bit ints\r\n\r\n// Offsets into the header array\r\nconst off_magic = 0;\r\n\r\nconst off_size = 1;\r\nconst off_flags = 2;\r\nconst off_height = 3;\r\nconst off_width = 4;\r\n\r\nconst off_mipmapCount = 7;\r\n\r\nconst off_pfFlags = 20;\r\nconst off_pfFourCC = 21;\r\nconst off_RGBbpp = 22;\r\nconst off_RMask = 23;\r\nconst off_GMask = 24;\r\nconst off_BMask = 25;\r\nconst off_AMask = 26;\r\n// var off_caps1 = 27;\r\nconst off_caps2 = 28;\r\n// var off_caps3 = 29;\r\n// var off_caps4 = 30;\r\nconst off_dxgiFormat = 32;\r\n\r\n/**\r\n * Direct draw surface info\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/direct3ddds/dx-graphics-dds-pguide\r\n */\r\nexport interface DDSInfo {\r\n /**\r\n * Width of the texture\r\n */\r\n width: number;\r\n /**\r\n * Width of the texture\r\n */\r\n height: number;\r\n /**\r\n * Number of Mipmaps for the texture\r\n * @see https://en.wikipedia.org/wiki/Mipmap\r\n */\r\n mipmapCount: number;\r\n /**\r\n * If the textures format is a known fourCC format\r\n * @see https://www.fourcc.org/\r\n */\r\n isFourCC: boolean;\r\n /**\r\n * If the texture is an RGB format eg. DXGI_FORMAT_B8G8R8X8_UNORM format\r\n */\r\n isRGB: boolean;\r\n /**\r\n * If the texture is a lumincance format\r\n */\r\n isLuminance: boolean;\r\n /**\r\n * If this is a cube texture\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/direct3ddds/dds-file-layout-for-cubic-environment-maps\r\n */\r\n isCube: boolean;\r\n /**\r\n * If the texture is a compressed format eg. FOURCC_DXT1\r\n */\r\n isCompressed: boolean;\r\n /**\r\n * The dxgiFormat of the texture\r\n * @see https://docs.microsoft.com/en-us/windows/desktop/api/dxgiformat/ne-dxgiformat-dxgi_format\r\n */\r\n dxgiFormat: number;\r\n /**\r\n * Texture type eg. Engine.TEXTURETYPE_UNSIGNED_INT, Engine.TEXTURETYPE_FLOAT\r\n */\r\n textureType: number;\r\n /**\r\n * Sphericle polynomial created for the dds texture\r\n */\r\n sphericalPolynomial?: SphericalPolynomial;\r\n}\r\n\r\n/**\r\n * Class used to provide DDS decompression tools\r\n */\r\nexport class DDSTools {\r\n /**\r\n * Gets or sets a boolean indicating that LOD info is stored in alpha channel (false by default)\r\n */\r\n public static StoreLODInAlphaChannel = false;\r\n\r\n /**\r\n * Gets DDS information from an array buffer\r\n * @param data defines the array buffer view to read data from\r\n * @returns the DDS information\r\n */\r\n public static GetDDSInfo(data: ArrayBufferView): DDSInfo {\r\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\r\n const extendedHeader = new Int32Array(data.buffer, data.byteOffset, headerLengthInt + 4);\r\n\r\n let mipmapCount = 1;\r\n if (header[off_flags] & DDSD_MIPMAPCOUNT) {\r\n mipmapCount = Math.max(1, header[off_mipmapCount]);\r\n }\r\n\r\n const fourCC = header[off_pfFourCC];\r\n const dxgiFormat = fourCC === FOURCC_DX10 ? extendedHeader[off_dxgiFormat] : 0;\r\n let textureType = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n\r\n switch (fourCC) {\r\n case FOURCC_D3DFMT_R16G16B16A16F:\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n break;\r\n case FOURCC_D3DFMT_R32G32B32A32F:\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n break;\r\n case FOURCC_DX10:\r\n if (dxgiFormat === DXGI_FORMAT_R16G16B16A16_FLOAT) {\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n break;\r\n }\r\n if (dxgiFormat === DXGI_FORMAT_R32G32B32A32_FLOAT) {\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n width: header[off_width],\r\n height: header[off_height],\r\n mipmapCount: mipmapCount,\r\n isFourCC: (header[off_pfFlags] & DDPF_FOURCC) === DDPF_FOURCC,\r\n isRGB: (header[off_pfFlags] & DDPF_RGB) === DDPF_RGB,\r\n isLuminance: (header[off_pfFlags] & DDPF_LUMINANCE) === DDPF_LUMINANCE,\r\n isCube: (header[off_caps2] & DDSCAPS2_CUBEMAP) === DDSCAPS2_CUBEMAP,\r\n isCompressed: fourCC === FOURCC_DXT1 || fourCC === FOURCC_DXT3 || fourCC === FOURCC_DXT5,\r\n dxgiFormat: dxgiFormat,\r\n textureType: textureType,\r\n };\r\n }\r\n\r\n private static _GetHalfFloatAsFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Float32Array {\r\n const destArray = new Float32Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = FromHalfFloat(srcData[srcPos]);\r\n destArray[index + 1] = FromHalfFloat(srcData[srcPos + 1]);\r\n destArray[index + 2] = FromHalfFloat(srcData[srcPos + 2]);\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = FromHalfFloat(srcData[srcPos + 3]);\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetHalfFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint16Array {\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n const destArray = new Uint16Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = srcData[srcPos];\r\n destArray[index + 1] = srcData[srcPos + 1];\r\n destArray[index + 2] = srcData[srcPos + 2];\r\n destArray[index + 3] = ToHalfFloat(lod);\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n return new Uint16Array(arrayBuffer, dataOffset, dataLength);\r\n }\r\n\r\n private static _GetFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Float32Array {\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n const destArray = new Float32Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = srcData[srcPos];\r\n destArray[index + 1] = srcData[srcPos + 1];\r\n destArray[index + 2] = srcData[srcPos + 2];\r\n destArray[index + 3] = lod;\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n return new Float32Array(arrayBuffer, dataOffset, dataLength);\r\n }\r\n\r\n private static _GetFloatAsHalfFloatRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint16Array {\r\n const destArray = new Uint16Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n destArray[index] = ToHalfFloat(srcData[index]);\r\n destArray[index + 1] = ToHalfFloat(srcData[index + 1]);\r\n destArray[index + 2] = ToHalfFloat(srcData[index + 2]);\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = ToHalfFloat(lod);\r\n } else {\r\n destArray[index + 3] = ToHalfFloat(srcData[index + 3]);\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetFloatAsUIntRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint8Array {\r\n const destArray = new Uint8Array(dataLength);\r\n const srcData = new Float32Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = Scalar.Clamp(srcData[srcPos]) * 255;\r\n destArray[index + 1] = Scalar.Clamp(srcData[srcPos + 1]) * 255;\r\n destArray[index + 2] = Scalar.Clamp(srcData[srcPos + 2]) * 255;\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = Scalar.Clamp(srcData[srcPos + 3]) * 255;\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetHalfFloatAsUIntRGBAArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number): Uint8Array {\r\n const destArray = new Uint8Array(dataLength);\r\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n destArray[index] = Scalar.Clamp(FromHalfFloat(srcData[srcPos])) * 255;\r\n destArray[index + 1] = Scalar.Clamp(FromHalfFloat(srcData[srcPos + 1])) * 255;\r\n destArray[index + 2] = Scalar.Clamp(FromHalfFloat(srcData[srcPos + 2])) * 255;\r\n if (DDSTools.StoreLODInAlphaChannel) {\r\n destArray[index + 3] = lod;\r\n } else {\r\n destArray[index + 3] = Scalar.Clamp(FromHalfFloat(srcData[srcPos + 3])) * 255;\r\n }\r\n index += 4;\r\n }\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n private static _GetRGBAArrayBuffer(\r\n width: number,\r\n height: number,\r\n dataOffset: number,\r\n dataLength: number,\r\n arrayBuffer: ArrayBuffer,\r\n rOffset: number,\r\n gOffset: number,\r\n bOffset: number,\r\n aOffset: number\r\n ): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 4;\r\n\r\n byteArray[index] = srcData[srcPos + rOffset];\r\n byteArray[index + 1] = srcData[srcPos + gOffset];\r\n byteArray[index + 2] = srcData[srcPos + bOffset];\r\n byteArray[index + 3] = srcData[srcPos + aOffset];\r\n index += 4;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n private static _ExtractLongWordOrder(value: number): number {\r\n if (value === 0 || value === 255 || value === -16777216) {\r\n return 0;\r\n }\r\n\r\n return 1 + DDSTools._ExtractLongWordOrder(value >> 8);\r\n }\r\n\r\n private static _GetRGBArrayBuffer(\r\n width: number,\r\n height: number,\r\n dataOffset: number,\r\n dataLength: number,\r\n arrayBuffer: ArrayBuffer,\r\n rOffset: number,\r\n gOffset: number,\r\n bOffset: number\r\n ): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = (x + y * width) * 3;\r\n\r\n byteArray[index] = srcData[srcPos + rOffset];\r\n byteArray[index + 1] = srcData[srcPos + gOffset];\r\n byteArray[index + 2] = srcData[srcPos + bOffset];\r\n index += 3;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n private static _GetLuminanceArrayBuffer(width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer): Uint8Array {\r\n const byteArray = new Uint8Array(dataLength);\r\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\r\n let index = 0;\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcPos = x + y * width;\r\n byteArray[index] = srcData[srcPos];\r\n index++;\r\n }\r\n }\r\n\r\n return byteArray;\r\n }\r\n\r\n /**\r\n * Uploads DDS Levels to a Babylon Texture\r\n * @internal\r\n */\r\n public static UploadDDSLevels(\r\n engine: ThinEngine,\r\n texture: InternalTexture,\r\n data: ArrayBufferView,\r\n info: DDSInfo,\r\n loadMipmaps: boolean,\r\n faces: number,\r\n lodIndex = -1,\r\n currentFace?: number,\r\n destTypeMustBeFilterable = true\r\n ) {\r\n let sphericalPolynomialFaces: Nullable<Array<ArrayBufferView>> = null;\r\n if (info.sphericalPolynomial) {\r\n sphericalPolynomialFaces = [] as ArrayBufferView[];\r\n }\r\n const ext = !!engine.getCaps().s3tc;\r\n\r\n // TODO WEBGPU Once generateMipMaps is split into generateMipMaps + hasMipMaps in InternalTexture this line can be removed\r\n texture.generateMipMaps = loadMipmaps;\r\n\r\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\r\n let fourCC: number,\r\n width: number,\r\n height: number,\r\n dataLength: number = 0,\r\n dataOffset: number;\r\n let byteArray: Uint8Array, mipmapCount: number, mip: number;\r\n let internalCompressedFormat = 0;\r\n let blockBytes = 1;\r\n\r\n if (header[off_magic] !== DDS_MAGIC) {\r\n Logger.Error(\"Invalid magic number in DDS header\");\r\n return;\r\n }\r\n\r\n if (!info.isFourCC && !info.isRGB && !info.isLuminance) {\r\n Logger.Error(\"Unsupported format, must contain a FourCC, RGB or LUMINANCE code\");\r\n return;\r\n }\r\n\r\n if (info.isCompressed && !ext) {\r\n Logger.Error(\"Compressed textures are not supported on this platform.\");\r\n return;\r\n }\r\n\r\n let bpp = header[off_RGBbpp];\r\n dataOffset = header[off_size] + 4;\r\n\r\n let computeFormats = false;\r\n\r\n if (info.isFourCC) {\r\n fourCC = header[off_pfFourCC];\r\n switch (fourCC) {\r\n case FOURCC_DXT1:\r\n blockBytes = 8;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1;\r\n break;\r\n case FOURCC_DXT3:\r\n blockBytes = 16;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3;\r\n break;\r\n case FOURCC_DXT5:\r\n blockBytes = 16;\r\n internalCompressedFormat = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n break;\r\n case FOURCC_D3DFMT_R16G16B16A16F:\r\n computeFormats = true;\r\n bpp = 64;\r\n break;\r\n case FOURCC_D3DFMT_R32G32B32A32F:\r\n computeFormats = true;\r\n bpp = 128;\r\n break;\r\n case FOURCC_DX10: {\r\n // There is an additionnal header so dataOffset need to be changed\r\n dataOffset += 5 * 4; // 5 uints\r\n\r\n let supported = false;\r\n switch (info.dxgiFormat) {\r\n case DXGI_FORMAT_R16G16B16A16_FLOAT:\r\n computeFormats = true;\r\n bpp = 64;\r\n supported = true;\r\n break;\r\n case DXGI_FORMAT_R32G32B32A32_FLOAT:\r\n computeFormats = true;\r\n bpp = 128;\r\n supported = true;\r\n break;\r\n case DXGI_FORMAT_B8G8R8X8_UNORM:\r\n info.isRGB = true;\r\n info.isFourCC = false;\r\n bpp = 32;\r\n supported = true;\r\n break;\r\n }\r\n\r\n if (supported) {\r\n break;\r\n }\r\n }\r\n // eslint-disable-next-line no-fallthrough\r\n default:\r\n console.error(\"Unsupported FourCC code:\", Int32ToFourCC(fourCC));\r\n return;\r\n }\r\n }\r\n\r\n const rOffset = DDSTools._ExtractLongWordOrder(header[off_RMask]);\r\n const gOffset = DDSTools._ExtractLongWordOrder(header[off_GMask]);\r\n const bOffset = DDSTools._ExtractLongWordOrder(header[off_BMask]);\r\n const aOffset = DDSTools._ExtractLongWordOrder(header[off_AMask]);\r\n\r\n if (computeFormats) {\r\n internalCompressedFormat = engine._getRGBABufferInternalSizedFormat(info.textureType);\r\n }\r\n\r\n mipmapCount = 1;\r\n if (header[off_flags] & DDSD_MIPMAPCOUNT && loadMipmaps !== false) {\r\n mipmapCount = Math.max(1, header[off_mipmapCount]);\r\n }\r\n\r\n const startFace = currentFace || 0;\r\n const caps = engine.getCaps();\r\n for (let face = startFace; face < faces; face++) {\r\n width = header[off_width];\r\n height = header[off_height];\r\n\r\n for (mip = 0; mip < mipmapCount; ++mip) {\r\n if (lodIndex === -1 || lodIndex === mip) {\r\n // In case of fixed LOD, if the lod has just been uploaded, early exit.\r\n const i = lodIndex === -1 ? mip : 0;\r\n\r\n if (!info.isCompressed && info.isFourCC) {\r\n texture.format = Constants.TEXTUREFORMAT_RGBA;\r\n dataLength = width * height * 4;\r\n let floatArray: Nullable<ArrayBufferView> = null;\r\n\r\n if (engine._badOS || engine._badDesktopOS || (!caps.textureHalfFloat && !caps.textureFloat)) {\r\n // Required because iOS has many issues with float and half float generation\r\n if (bpp === 128) {\r\n floatArray = DDSTools._GetFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(DDSTools._GetFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i));\r\n }\r\n } else if (bpp === 64) {\r\n floatArray = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(\r\n DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i)\r\n );\r\n }\r\n }\r\n\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n } else {\r\n const floatAvailable = caps.textureFloat && ((destTypeMustBeFilterable && caps.textureFloatLinearFiltering) || !destTypeMustBeFilterable);\r\n const halfFloatAvailable = caps.textureHalfFloat && ((destTypeMustBeFilterable && caps.textureHalfFloatLinearFiltering) || !destTypeMustBeFilterable);\r\n\r\n const destType =\r\n (bpp === 128 || (bpp === 64 && !halfFloatAvailable)) && floatAvailable\r\n ? Constants.TEXTURETYPE_FLOAT\r\n : (bpp === 64 || (bpp === 128 && !floatAvailable)) && halfFloatAvailable\r\n ? Constants.TEXTURETYPE_HALF_FLOAT\r\n : Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n\r\n let dataGetter: (width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number) => ArrayBufferView;\r\n let dataGetterPolynomial: Nullable<\r\n (width: number, height: number, dataOffset: number, dataLength: number, arrayBuffer: ArrayBuffer, lod: number) => ArrayBufferView\r\n > = null;\r\n\r\n switch (bpp) {\r\n case 128: {\r\n switch (destType) {\r\n case Constants.TEXTURETYPE_FLOAT:\r\n dataGetter = DDSTools._GetFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = null;\r\n break;\r\n case Constants.TEXTURETYPE_HALF_FLOAT:\r\n dataGetter = DDSTools._GetFloatAsHalfFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\r\n break;\r\n case Constants.TEXTURETYPE_UNSIGNED_BYTE:\r\n dataGetter = DDSTools._GetFloatAsUIntRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\r\n break;\r\n }\r\n break;\r\n }\r\n default: {\r\n // 64 bpp\r\n switch (destType) {\r\n case Constants.TEXTURETYPE_FLOAT:\r\n dataGetter = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = null;\r\n break;\r\n case Constants.TEXTURETYPE_HALF_FLOAT:\r\n dataGetter = DDSTools._GetHalfFloatRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n break;\r\n case Constants.TEXTURETYPE_UNSIGNED_BYTE:\r\n dataGetter = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer;\r\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\r\n break;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n texture.type = destType;\r\n\r\n floatArray = dataGetter(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\r\n\r\n if (sphericalPolynomialFaces && i == 0) {\r\n sphericalPolynomialFaces.push(\r\n dataGetterPolynomial ? dataGetterPolynomial(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i) : floatArray\r\n );\r\n }\r\n }\r\n\r\n if (floatArray) {\r\n engine._uploadDataToTextureDirectly(texture, floatArray, face, i);\r\n }\r\n } else if (info.isRGB) {\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n if (bpp === 24) {\r\n texture.format = Constants.TEXTUREFORMAT_RGB;\r\n dataLength = width * height * 3;\r\n byteArray = DDSTools._GetRGBArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset);\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n } else {\r\n // 32\r\n texture.format = Constants.TEXTUREFORMAT_RGBA;\r\n dataLength = width * height * 4;\r\n byteArray = DDSTools._GetRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset, aOffset);\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n }\r\n } else if (info.isLuminance) {\r\n const unpackAlignment = engine._getUnpackAlignement();\r\n const unpaddedRowSize = width;\r\n const paddedRowSize = Math.floor((width + unpackAlignment - 1) / unpackAlignment) * unpackAlignment;\r\n dataLength = paddedRowSize * (height - 1) + unpaddedRowSize;\r\n\r\n byteArray = DDSTools._GetLuminanceArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer);\r\n texture.format = Constants.TEXTUREFORMAT_LUMINANCE;\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n\r\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\r\n } else {\r\n dataLength = (((Math.max(4, width) / 4) * Math.max(4, height)) / 4) * blockBytes;\r\n byteArray = new Uint8Array(data.buffer, data.byteOffset + dataOffset, dataLength);\r\n\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n engine._uploadCompressedDataToTextureDirectly(texture, internalCompressedFormat, width, height, byteArray, face, i);\r\n }\r\n }\r\n dataOffset += bpp ? width * height * (bpp / 8) : dataLength;\r\n width *= 0.5;\r\n height *= 0.5;\r\n\r\n width = Math.max(1.0, width);\r\n height = Math.max(1.0, height);\r\n }\r\n\r\n if (currentFace !== undefined) {\r\n // Loading a single face\r\n break;\r\n }\r\n }\r\n if (sphericalPolynomialFaces && sphericalPolynomialFaces.length > 0) {\r\n info.sphericalPolynomial = CubeMapToSphericalPolynomialTools.ConvertCubeMapToSphericalPolynomial({\r\n size: header[off_width],\r\n right: sphericalPolynomialFaces[0],\r\n left: sphericalPolynomialFaces[1],\r\n up: sphericalPolynomialFaces[2],\r\n down: sphericalPolynomialFaces[3],\r\n front: sphericalPolynomialFaces[4],\r\n back: sphericalPolynomialFaces[5],\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n type: Constants.TEXTURETYPE_FLOAT,\r\n gammaSpace: false,\r\n });\r\n } else {\r\n info.sphericalPolynomial = undefined;\r\n }\r\n }\r\n}\r\n\r\ndeclare module \"../Engines/thinEngine\" {\r\n export interface ThinEngine {\r\n /**\r\n * Create a cube texture from prefiltered data (ie. the mipmaps contain ready to use data for PBR reflection)\r\n * @param rootUrl defines the url where the file to load is located\r\n * @param scene defines the current scene\r\n * @param lodScale defines scale to apply to the mip map selection\r\n * @param lodOffset defines offset to apply to the mip map selection\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials defines wheter or not to create polynomails harmonics for the texture\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n createPrefilteredCubeTexture(\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n lodScale: number,\r\n lodOffset: number,\r\n onLoad?: Nullable<(internalTexture: Nullable<InternalTexture>) => void>,\r\n onError?: Nullable<(message?: string, exception?: any) => void>,\r\n format?: number,\r\n forcedExtension?: any,\r\n createPolynomials?: boolean\r\n ): InternalTexture;\r\n }\r\n}\r\n\r\n/**\r\n * Create a cube texture from prefiltered data (ie. the mipmaps contain ready to use data for PBR reflection)\r\n * @param rootUrl defines the url where the file to load is located\r\n * @param scene defines the current scene\r\n * @param lodScale defines scale to apply to the mip map selection\r\n * @param lodOffset defines offset to apply to the mip map selection\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials defines wheter or not to create polynomails harmonics for the texture\r\n * @returns the cube texture as an InternalTexture\r\n */\r\nThinEngine.prototype.createPrefilteredCubeTexture = function (\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n lodScale: number,\r\n lodOffset: number,\r\n onLoad: Nullable<(internalTexture: Nullable<InternalTexture>) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format?: number,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = true\r\n): InternalTexture {\r\n const callback = (loadData: any) => {\r\n if (!loadData) {\r\n if (onLoad) {\r\n onLoad(null);\r\n }\r\n return;\r\n }\r\n\r\n const texture = loadData.texture as InternalTexture;\r\n if (!createPolynomials) {\r\n texture._sphericalPolynomial = new SphericalPolynomial();\r\n } else if (loadData.info.sphericalPolynomial) {\r\n texture._sphericalPolynomial = loadData.info.sphericalPolynomial;\r\n }\r\n texture._source = InternalTextureSource.CubePrefiltered;\r\n\r\n if (this.getCaps().textureLOD) {\r\n // Do not add extra process if texture lod is supported.\r\n if (onLoad) {\r\n onLoad(texture);\r\n }\r\n return;\r\n }\r\n\r\n const mipSlices = 3;\r\n\r\n const gl = this._gl;\r\n const width = loadData.width;\r\n if (!width) {\r\n return;\r\n }\r\n\r\n const textures: BaseTexture[] = [];\r\n for (let i = 0; i < mipSlices; i++) {\r\n //compute LOD from even spacing in smoothness (matching shader calculation)\r\n const smoothness = i / (mipSlices - 1);\r\n const roughness = 1 - smoothness;\r\n\r\n const minLODIndex = lodOffset; // roughness = 0\r\n const maxLODIndex = Scalar.Log2(width) * lodScale + lodOffset; // roughness = 1\r\n\r\n const lodIndex = minLODIndex + (maxLODIndex - minLODIndex) * roughness;\r\n const mipmapIndex = Math.round(Math.min(Math.max(lodIndex, 0), maxLODIndex));\r\n\r\n const glTextureFromLod = new InternalTexture(this, InternalTextureSource.Temp);\r\n glTextureFromLod.type = texture.type;\r\n glTextureFromLod.format = texture.format;\r\n glTextureFromLod.width = Math.pow(2, Math.max(Scalar.Log2(width) - mipmapIndex, 0));\r\n glTextureFromLod.height = glTextureFromLod.width;\r\n glTextureFromLod.isCube = true;\r\n glTextureFromLod._cachedWrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n glTextureFromLod._cachedWrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, glTextureFromLod, true);\r\n\r\n glTextureFromLod.samplingMode = Constants.TEXTURE_LINEAR_LINEAR;\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n\r\n if (loadData.isDDS) {\r\n const info: DDSInfo = loadData.info;\r\n const data: any = loadData.data;\r\n this._unpackFlipY(info.isCompressed);\r\n\r\n DDSTools.UploadDDSLevels(this, glTextureFromLod, data, info, true, 6, mipmapIndex);\r\n } else {\r\n Logger.Warn(\"DDS is the only prefiltered cube map supported so far.\");\r\n }\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, null);\r\n\r\n // Wrap in a base texture for easy binding.\r\n const lodTexture = new BaseTexture(scene);\r\n lodTexture._isCube = true;\r\n lodTexture._texture = glTextureFromLod;\r\n\r\n glTextureFromLod.isReady = true;\r\n textures.push(lodTexture);\r\n }\r\n\r\n texture._lodTextureHigh = textures[2];\r\n texture._lodTextureMid = textures[1];\r\n texture._lodTextureLow = textures[0];\r\n\r\n if (onLoad) {\r\n onLoad(texture);\r\n }\r\n };\r\n\r\n return this.createCubeTexture(rootUrl, scene, null, false, callback, onError, format, forcedExtension, createPolynomials, lodScale, lodOffset);\r\n};\r\n"]}
@@ -165,7 +165,7 @@ export class FilesInput {
165
165
  this._startingProcessingFilesCallback(this._filesToLoad);
166
166
  }
167
167
  if (this._filesToLoad && this._filesToLoad.length > 0) {
168
- const files = new Array();
168
+ const files = [];
169
169
  const folders = [];
170
170
  const items = event.dataTransfer ? event.dataTransfer.items : null;
171
171
  for (let i = 0; i < this._filesToLoad.length; i++) {