@babylonjs/core 5.16.0 → 5.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/Animations/animatable.js +1 -1
  2. package/Animations/animatable.js.map +1 -1
  3. package/Animations/animation.d.ts +8 -1
  4. package/Animations/animation.js +8 -1
  5. package/Animations/animation.js.map +1 -1
  6. package/Animations/animationGroup.js +5 -4
  7. package/Animations/animationGroup.js.map +1 -1
  8. package/Bones/skeleton.js +1 -1
  9. package/Bones/skeleton.js.map +1 -1
  10. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +2 -2
  11. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  12. package/Cameras/Inputs/flyCameraKeyboardInput.js +3 -3
  13. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  14. package/Cameras/Inputs/followCameraKeyboardMoveInput.js +2 -2
  15. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  16. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +3 -3
  17. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  18. package/Cameras/Inputs/freeCameraTouchInput.js +1 -1
  19. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  20. package/Cameras/VR/vrExperienceHelper.js +1 -1
  21. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  22. package/Cameras/VR/webVRCamera.js +1 -1
  23. package/Cameras/VR/webVRCamera.js.map +1 -1
  24. package/Cameras/camera.js +3 -3
  25. package/Cameras/camera.js.map +1 -1
  26. package/Engines/Extensions/engine.views.d.ts +13 -0
  27. package/Engines/Extensions/engine.views.js +16 -1
  28. package/Engines/Extensions/engine.views.js.map +1 -1
  29. package/Engines/Processors/shaderCodeCursor.js +2 -1
  30. package/Engines/Processors/shaderCodeCursor.js.map +1 -1
  31. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
  32. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  33. package/Engines/engine.d.ts +2 -10
  34. package/Engines/engine.js +0 -14
  35. package/Engines/engine.js.map +1 -1
  36. package/Engines/engineFeatures.d.ts +2 -0
  37. package/Engines/engineFeatures.js.map +1 -1
  38. package/Engines/nativeEngine.d.ts +6 -2
  39. package/Engines/nativeEngine.js +13 -6
  40. package/Engines/nativeEngine.js.map +1 -1
  41. package/Engines/nullEngine.js +1 -0
  42. package/Engines/nullEngine.js.map +1 -1
  43. package/Engines/thinEngine.d.ts +10 -0
  44. package/Engines/thinEngine.js +26 -6
  45. package/Engines/thinEngine.js.map +1 -1
  46. package/Engines/webgpuEngine.js +1 -0
  47. package/Engines/webgpuEngine.js.map +1 -1
  48. package/Gizmos/axisDragGizmo.d.ts +11 -8
  49. package/Gizmos/axisDragGizmo.js.map +1 -1
  50. package/Gizmos/axisScaleGizmo.d.ts +20 -13
  51. package/Gizmos/axisScaleGizmo.js.map +1 -1
  52. package/Gizmos/boundingBoxGizmo.d.ts +27 -18
  53. package/Gizmos/boundingBoxGizmo.js +6 -0
  54. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  55. package/Gizmos/cameraGizmo.d.ts +8 -5
  56. package/Gizmos/cameraGizmo.js.map +1 -1
  57. package/Gizmos/gizmo.d.ts +48 -6
  58. package/Gizmos/gizmo.js.map +1 -1
  59. package/Gizmos/gizmoManager.d.ts +17 -9
  60. package/Gizmos/gizmoManager.js.map +1 -1
  61. package/Gizmos/lightGizmo.d.ts +12 -7
  62. package/Gizmos/lightGizmo.js.map +1 -1
  63. package/Gizmos/planeDragGizmo.d.ts +10 -8
  64. package/Gizmos/planeDragGizmo.js.map +1 -1
  65. package/Gizmos/planeRotationGizmo.d.ts +23 -14
  66. package/Gizmos/planeRotationGizmo.js.map +1 -1
  67. package/Gizmos/positionGizmo.d.ts +9 -7
  68. package/Gizmos/positionGizmo.js +1 -1
  69. package/Gizmos/positionGizmo.js.map +1 -1
  70. package/Gizmos/rotationGizmo.d.ts +6 -4
  71. package/Gizmos/rotationGizmo.js.map +1 -1
  72. package/Gizmos/scaleGizmo.d.ts +15 -12
  73. package/Gizmos/scaleGizmo.js.map +1 -1
  74. package/Inputs/scene.inputManager.js +0 -3
  75. package/Inputs/scene.inputManager.js.map +1 -1
  76. package/Loading/sceneLoader.js +5 -5
  77. package/Loading/sceneLoader.js.map +1 -1
  78. package/Materials/Node/Blocks/Fragment/TBNBlock.d.ts +12 -0
  79. package/Materials/Node/Blocks/Fragment/TBNBlock.js +50 -0
  80. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  81. package/Materials/Node/Blocks/Vertex/lightInformationBlock.d.ts +18 -0
  82. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +85 -1
  83. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  84. package/Materials/Node/Blocks/gradientBlock.js +1 -1
  85. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  86. package/Materials/Node/nodeMaterial.d.ts +18 -2
  87. package/Materials/Node/nodeMaterial.js +56 -27
  88. package/Materials/Node/nodeMaterial.js.map +1 -1
  89. package/Materials/Textures/baseTexture.d.ts +2 -1
  90. package/Materials/Textures/baseTexture.js +4 -1
  91. package/Materials/Textures/baseTexture.js.map +1 -1
  92. package/Materials/Textures/prePassRenderTarget.js +1 -1
  93. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  94. package/Materials/Textures/renderTargetTexture.js +11 -3
  95. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  96. package/Materials/materialDefines.js +3 -1
  97. package/Materials/materialDefines.js.map +1 -1
  98. package/Materials/shaderMaterial.d.ts +10 -1
  99. package/Materials/shaderMaterial.js +10 -1
  100. package/Materials/shaderMaterial.js.map +1 -1
  101. package/Maths/math.color.d.ts +9 -1
  102. package/Maths/math.color.js +13 -1
  103. package/Maths/math.color.js.map +1 -1
  104. package/Maths/math.vector.d.ts +2 -2
  105. package/Maths/math.vector.js +18 -30
  106. package/Maths/math.vector.js.map +1 -1
  107. package/Meshes/Builders/icoSphereBuilder.js +2 -2
  108. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  109. package/Meshes/Compression/dracoCompression.js +1 -1
  110. package/Meshes/Compression/dracoCompression.js.map +1 -1
  111. package/Meshes/abstractMesh.js +1 -1
  112. package/Meshes/abstractMesh.js.map +1 -1
  113. package/Meshes/geometry.js +1 -2
  114. package/Meshes/geometry.js.map +1 -1
  115. package/Meshes/thinInstanceMesh.js +5 -0
  116. package/Meshes/thinInstanceMesh.js.map +1 -1
  117. package/Misc/basis.js +3 -0
  118. package/Misc/basis.js.map +1 -1
  119. package/Misc/fileTools.js +2 -2
  120. package/Misc/fileTools.js.map +1 -1
  121. package/Misc/khronosTextureContainer2.js +1 -1
  122. package/Misc/khronosTextureContainer2.js.map +1 -1
  123. package/Misc/smartArray.js +0 -1
  124. package/Misc/smartArray.js.map +1 -1
  125. package/Misc/tools.d.ts +2 -2
  126. package/Misc/tools.js +4 -1
  127. package/Misc/tools.js.map +1 -1
  128. package/Offline/database.js +6 -8
  129. package/Offline/database.js.map +1 -1
  130. package/Particles/computeShaderParticleSystem.js +2 -2
  131. package/Particles/computeShaderParticleSystem.js.map +1 -1
  132. package/Particles/particleHelper.d.ts +12 -1
  133. package/Particles/particleHelper.js +12 -1
  134. package/Particles/particleHelper.js.map +1 -1
  135. package/Particles/particleSystem.js +2 -2
  136. package/Particles/particleSystem.js.map +1 -1
  137. package/Particles/particleSystemSet.js +1 -1
  138. package/Particles/particleSystemSet.js.map +1 -1
  139. package/Particles/solidParticleSystem.d.ts +3 -0
  140. package/Particles/solidParticleSystem.js +3 -0
  141. package/Particles/solidParticleSystem.js.map +1 -1
  142. package/Particles/webgl2ParticleSystem.js +2 -2
  143. package/Particles/webgl2ParticleSystem.js.map +1 -1
  144. package/Physics/Plugins/ammoJSPlugin.d.ts +2 -2
  145. package/Physics/Plugins/ammoJSPlugin.js +29 -29
  146. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  147. package/Physics/Plugins/cannonJSPlugin.d.ts +2 -2
  148. package/Physics/Plugins/cannonJSPlugin.js +26 -26
  149. package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
  150. package/Physics/Plugins/oimoJSPlugin.js +9 -11
  151. package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
  152. package/Physics/physicsImpostor.d.ts +6 -6
  153. package/Physics/physicsImpostor.js +7 -6
  154. package/Physics/physicsImpostor.js.map +1 -1
  155. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +3 -3
  156. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  157. package/Rendering/utilityLayerRenderer.js +1 -1
  158. package/Rendering/utilityLayerRenderer.js.map +1 -1
  159. package/Shaders/sprites.fragment.js +1 -1
  160. package/Shaders/sprites.fragment.js.map +1 -1
  161. package/Sprites/spriteManager.d.ts +10 -1
  162. package/Sprites/spriteManager.js +10 -1
  163. package/Sprites/spriteManager.js.map +1 -1
  164. package/Sprites/spriteRenderer.js +1 -1
  165. package/Sprites/spriteRenderer.js.map +1 -1
  166. package/XR/features/WebXRLayers.js +1 -1
  167. package/XR/features/WebXRLayers.js.map +1 -1
  168. package/assetContainer.js +12 -12
  169. package/assetContainer.js.map +1 -1
  170. package/node.js +1 -1
  171. package/node.js.map +1 -1
  172. package/package.json +1 -1
  173. package/scene.d.ts +2 -0
  174. package/scene.js +15 -8
  175. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Offline/database.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { GetTGAHeader } from \"../Misc/tga\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport type { IOfflineProvider } from \"./IOfflineProvider\";\r\nimport { WebRequest } from \"../Misc/webRequest\";\r\n\r\n// Sets the default offline provider to Babylon.js\r\nEngine.OfflineProviderFactory = (urlToScene: string, callbackManifestChecked: (checked: boolean) => any, disableManifestCheck = false) => {\r\n return new Database(urlToScene, callbackManifestChecked, disableManifestCheck);\r\n};\r\n\r\n/**\r\n * Class used to enable access to IndexedDB\r\n * @see https://doc.babylonjs.com/how_to/caching_resources_in_indexeddb\r\n */\r\nexport class Database implements IOfflineProvider {\r\n private _currentSceneUrl: string;\r\n private _db: Nullable<IDBDatabase>;\r\n private _enableSceneOffline: boolean;\r\n private _enableTexturesOffline: boolean;\r\n private _manifestVersionFound: number;\r\n private _mustUpdateRessources: boolean;\r\n private _hasReachedQuota: boolean;\r\n private _isSupported: boolean;\r\n\r\n // Handling various flavors of prefixed version of IndexedDB\r\n private _idbFactory = <IDBFactory>(typeof window !== \"undefined\" ? window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB : indexedDB);\r\n\r\n /** Gets a boolean indicating if the user agent supports blob storage (this value will be updated after creating the first Database object) */\r\n private static _IsUASupportingBlobStorage = true;\r\n\r\n /**\r\n * Gets a boolean indicating if Database storage is enabled (off by default)\r\n */\r\n static IDBStorageEnabled = false;\r\n\r\n /**\r\n * Gets a boolean indicating if scene must be saved in the database\r\n */\r\n public get enableSceneOffline(): boolean {\r\n return this._enableSceneOffline;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if textures must be saved in the database\r\n */\r\n public get enableTexturesOffline(): boolean {\r\n return this._enableTexturesOffline;\r\n }\r\n\r\n /**\r\n * Creates a new Database\r\n * @param urlToScene defines the url to load the scene\r\n * @param callbackManifestChecked defines the callback to use when manifest is checked\r\n * @param disableManifestCheck defines a boolean indicating that we want to skip the manifest validation (it will be considered validated and up to date)\r\n */\r\n constructor(urlToScene: string, callbackManifestChecked: (checked: boolean) => any, disableManifestCheck = false) {\r\n this._currentSceneUrl = Database._ReturnFullUrlLocation(urlToScene);\r\n this._db = null;\r\n this._enableSceneOffline = false;\r\n this._enableTexturesOffline = false;\r\n this._manifestVersionFound = 0;\r\n this._mustUpdateRessources = false;\r\n this._hasReachedQuota = false;\r\n\r\n if (!Database.IDBStorageEnabled) {\r\n callbackManifestChecked(true);\r\n } else {\r\n if (disableManifestCheck) {\r\n this._enableSceneOffline = true;\r\n this._enableTexturesOffline = true;\r\n this._manifestVersionFound = 1;\r\n Tools.SetImmediate(() => {\r\n callbackManifestChecked(true);\r\n });\r\n } else {\r\n this._checkManifestFile(callbackManifestChecked);\r\n }\r\n }\r\n }\r\n\r\n private static _ParseURL = (url: string) => {\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n const urlWithoutHash = url.substring(0, url.lastIndexOf(\"#\"));\r\n const fileName = url.substring(urlWithoutHash.lastIndexOf(\"/\") + 1, url.length);\r\n const absLocation = url.substring(0, url.indexOf(fileName, 0));\r\n return absLocation;\r\n };\r\n\r\n private static _ReturnFullUrlLocation = (url: string): string => {\r\n if (url.indexOf(\"http:/\") === -1 && url.indexOf(\"https:/\") === -1 && typeof window !== \"undefined\") {\r\n return Database._ParseURL(window.location.href) + url;\r\n } else {\r\n return url;\r\n }\r\n };\r\n\r\n private _checkManifestFile(callbackManifestChecked: (checked: boolean) => any) {\r\n const noManifestFile = () => {\r\n this._enableSceneOffline = false;\r\n this._enableTexturesOffline = false;\r\n callbackManifestChecked(false);\r\n };\r\n\r\n const createManifestURL = (): string => {\r\n try {\r\n // make sure we have a valid URL.\r\n if (typeof URL === \"function\" && this._currentSceneUrl.indexOf(\"http\") === 0) {\r\n // we don't have the base url, so the URL string must have a protocol\r\n const url = new URL(this._currentSceneUrl);\r\n url.pathname += \".manifest\";\r\n return url.toString();\r\n }\r\n } catch (e) {\r\n // defensive - if this fails for any reason, fall back to the older method\r\n }\r\n\r\n return `${this._currentSceneUrl}.manifest`;\r\n };\r\n\r\n let timeStampUsed = false;\r\n let manifestURL = createManifestURL();\r\n\r\n const xhr = new WebRequest();\r\n\r\n if (navigator.onLine) {\r\n // Adding a timestamp to by-pass browsers' cache\r\n timeStampUsed = true;\r\n manifestURL = manifestURL + (manifestURL.match(/\\?/) == null ? \"?\" : \"&\") + Date.now();\r\n }\r\n xhr.open(\"GET\", manifestURL);\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 || Database._ValidateXHRData(xhr, 1)) {\r\n try {\r\n const manifestFile = JSON.parse(xhr.response);\r\n this._enableSceneOffline = manifestFile.enableSceneOffline;\r\n this._enableTexturesOffline = manifestFile.enableTexturesOffline && Database._IsUASupportingBlobStorage;\r\n if (manifestFile.version && !isNaN(parseInt(manifestFile.version))) {\r\n this._manifestVersionFound = manifestFile.version;\r\n }\r\n callbackManifestChecked(true);\r\n } catch (ex) {\r\n noManifestFile();\r\n }\r\n } else {\r\n noManifestFile();\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n if (timeStampUsed) {\r\n timeStampUsed = false;\r\n // Let's retry without the timeStamp\r\n // It could fail when coupled with HTML5 Offline API\r\n const retryManifestURL = createManifestURL();\r\n xhr.open(\"GET\", retryManifestURL);\r\n xhr.send();\r\n } else {\r\n noManifestFile();\r\n }\r\n },\r\n false\r\n );\r\n\r\n try {\r\n xhr.send();\r\n } catch (ex) {\r\n Logger.Error(\"Error on XHR send request.\");\r\n callbackManifestChecked(false);\r\n }\r\n }\r\n\r\n /**\r\n * Open the database and make it available\r\n * @param successCallback defines the callback to call on success\r\n * @param errorCallback defines the callback to call on error\r\n */\r\n public open(successCallback: () => void, errorCallback: () => void): void {\r\n const handleError = () => {\r\n this._isSupported = false;\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n };\r\n\r\n if (!this._idbFactory || !(this._enableSceneOffline || this._enableTexturesOffline)) {\r\n // Your browser doesn't support IndexedDB\r\n this._isSupported = false;\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n } else {\r\n // If the DB hasn't been opened or created yet\r\n if (!this._db) {\r\n this._hasReachedQuota = false;\r\n this._isSupported = true;\r\n\r\n const request: IDBOpenDBRequest = this._idbFactory.open(\"babylonjs\", 1);\r\n\r\n // Could occur if user is blocking the quota for the DB and/or doesn't grant access to IndexedDB\r\n request.onerror = () => {\r\n handleError();\r\n };\r\n\r\n // executes when a version change transaction cannot complete due to other active transactions\r\n request.onblocked = () => {\r\n Logger.Error(\"IDB request blocked. Please reload the page.\");\r\n handleError();\r\n };\r\n\r\n // DB has been opened successfully\r\n request.onsuccess = () => {\r\n this._db = request.result;\r\n successCallback();\r\n };\r\n\r\n // Initialization of the DB. Creating Scenes & Textures stores\r\n request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\r\n this._db = (<any>event.target).result;\r\n if (this._db) {\r\n try {\r\n this._db.createObjectStore(\"scenes\", { keyPath: \"sceneUrl\" });\r\n this._db.createObjectStore(\"versions\", { keyPath: \"sceneUrl\" });\r\n this._db.createObjectStore(\"textures\", { keyPath: \"textureUrl\" });\r\n } catch (ex) {\r\n Logger.Error(\"Error while creating object stores. Exception: \" + ex.message);\r\n handleError();\r\n }\r\n }\r\n };\r\n }\r\n // DB has already been created and opened\r\n else {\r\n if (successCallback) {\r\n successCallback();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Loads an image from the database\r\n * @param url defines the url to load from\r\n * @param image defines the target DOM image\r\n */\r\n public loadImage(url: string, image: HTMLImageElement) {\r\n const completeURL = Database._ReturnFullUrlLocation(url);\r\n\r\n const saveAndLoadImage = () => {\r\n if (!this._hasReachedQuota && this._db !== null) {\r\n // the texture is not yet in the DB, let's try to save it\r\n this._saveImageIntoDBAsync(completeURL, image);\r\n }\r\n // If the texture is not in the DB and we've reached the DB quota limit\r\n // let's load it directly from the web\r\n else {\r\n image.src = url;\r\n }\r\n };\r\n\r\n if (!this._mustUpdateRessources) {\r\n this._loadImageFromDBAsync(completeURL, image, saveAndLoadImage);\r\n }\r\n // First time we're download the images or update requested in the manifest file by a version change\r\n else {\r\n saveAndLoadImage();\r\n }\r\n }\r\n\r\n private _loadImageFromDBAsync(url: string, image: HTMLImageElement, notInDBCallback: () => any) {\r\n if (this._isSupported && this._db !== null) {\r\n let texture: any;\r\n const transaction: IDBTransaction = this._db.transaction([\"textures\"]);\r\n\r\n transaction.onabort = () => {\r\n image.src = url;\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n let blobTextureURL: string;\r\n if (texture) {\r\n const URL = window.URL || window.webkitURL;\r\n blobTextureURL = URL.createObjectURL(texture.data);\r\n image.onerror = () => {\r\n Logger.Error(\"Error loading image from blob URL: \" + blobTextureURL + \" switching back to web url: \" + url);\r\n image.src = url;\r\n };\r\n image.src = blobTextureURL;\r\n } else {\r\n notInDBCallback();\r\n }\r\n };\r\n\r\n const getRequest: IDBRequest = transaction.objectStore(\"textures\").get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n texture = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading texture \" + url + \" from DB.\");\r\n image.src = url;\r\n };\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or BabylonJS Database is not open.\");\r\n image.src = url;\r\n }\r\n }\r\n\r\n private _saveImageIntoDBAsync(url: string, image: HTMLImageElement) {\r\n let blob: Blob;\r\n\r\n if (this._isSupported) {\r\n // In case of error (type not supported or quota exceeded), we're at least sending back XHR data to allow texture loading later on\r\n const generateBlobUrl = () => {\r\n let blobTextureURL;\r\n\r\n if (blob) {\r\n const URL = window.URL || window.webkitURL;\r\n try {\r\n blobTextureURL = URL.createObjectURL(blob);\r\n } catch (ex) {\r\n // Chrome is raising a type error if we're setting the oneTimeOnly parameter\r\n blobTextureURL = URL.createObjectURL(blob);\r\n }\r\n }\r\n\r\n if (blobTextureURL) {\r\n image.src = blobTextureURL;\r\n }\r\n };\r\n\r\n if (Database._IsUASupportingBlobStorage) {\r\n // Create XHR\r\n const xhr = new WebRequest();\r\n\r\n xhr.open(\"GET\", url);\r\n xhr.responseType = \"blob\";\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 && this._db) {\r\n // Blob as response\r\n blob = xhr.response;\r\n\r\n const transaction = this._db.transaction([\"textures\"], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const srcElement = <any>(event.srcElement || event.target);\r\n const error = srcElement.error;\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n generateBlobUrl();\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n generateBlobUrl();\r\n };\r\n\r\n const newTexture = { textureUrl: url, data: blob };\r\n\r\n try {\r\n // Put the blob into the dabase\r\n const addRequest = transaction.objectStore(\"textures\").put(newTexture);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n generateBlobUrl();\r\n };\r\n } catch (ex) {\r\n // \"DataCloneError\" generated by Chrome when you try to inject blob into IndexedDB\r\n if (ex.code === 25) {\r\n Database._IsUASupportingBlobStorage = false;\r\n this._enableTexturesOffline = false;\r\n }\r\n image.src = url;\r\n }\r\n } else {\r\n image.src = url;\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n Logger.Error(\"Error in XHR request in BABYLON.Database.\");\r\n image.src = url;\r\n },\r\n false\r\n );\r\n\r\n xhr.send();\r\n } else {\r\n image.src = url;\r\n }\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n image.src = url;\r\n }\r\n }\r\n\r\n private _checkVersionFromDB(url: string, versionLoaded: (version: number) => void) {\r\n const updateVersion = () => {\r\n // the version is not yet in the DB or we need to update it\r\n this._saveVersionIntoDBAsync(url, versionLoaded);\r\n };\r\n this._loadVersionFromDBAsync(url, versionLoaded, updateVersion);\r\n }\r\n\r\n private _loadVersionFromDBAsync(url: string, callback: (version: number) => void, updateInDBCallback: () => void) {\r\n if (this._isSupported && this._db) {\r\n let version: any;\r\n try {\r\n const transaction = this._db.transaction([\"versions\"]);\r\n\r\n transaction.oncomplete = () => {\r\n if (version) {\r\n // If the version in the JSON file is different from the version in DB\r\n if (this._manifestVersionFound !== version.data) {\r\n this._mustUpdateRessources = true;\r\n updateInDBCallback();\r\n } else {\r\n callback(version.data);\r\n }\r\n }\r\n // version was not found in DB\r\n else {\r\n this._mustUpdateRessources = true;\r\n updateInDBCallback();\r\n }\r\n };\r\n\r\n transaction.onabort = () => {\r\n callback(-1);\r\n };\r\n\r\n const getRequest = transaction.objectStore(\"versions\").get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n version = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading version for scene \" + url + \" from DB.\");\r\n callback(-1);\r\n };\r\n } catch (ex) {\r\n Logger.Error(\"Error while accessing 'versions' object store (READ OP). Exception: \" + ex.message);\r\n callback(-1);\r\n }\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n callback(-1);\r\n }\r\n }\r\n\r\n private _saveVersionIntoDBAsync(url: string, callback: (version: number) => void) {\r\n if (this._isSupported && !this._hasReachedQuota && this._db) {\r\n try {\r\n // Open a transaction to the database\r\n const transaction = this._db.transaction([\"versions\"], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const error = (<any>event.srcElement)[\"error\"];\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n callback(-1);\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n callback(this._manifestVersionFound);\r\n };\r\n\r\n const newVersion = { sceneUrl: url, data: this._manifestVersionFound };\r\n\r\n // Put the scene into the database\r\n const addRequest = transaction.objectStore(\"versions\").put(newVersion);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n Logger.Error(\"Error in DB add version request in BABYLON.Database.\");\r\n };\r\n } catch (ex) {\r\n Logger.Error(\"Error while accessing 'versions' object store (WRITE OP). Exception: \" + ex.message);\r\n callback(-1);\r\n }\r\n } else {\r\n callback(-1);\r\n }\r\n }\r\n\r\n /**\r\n * Loads a file from database\r\n * @param url defines the URL to load from\r\n * @param sceneLoaded defines a callback to call on success\r\n * @param progressCallBack defines a callback to call when progress changed\r\n * @param errorCallback defines a callback to call on error\r\n * @param useArrayBuffer defines a boolean to use array buffer instead of text string\r\n */\r\n public loadFile(url: string, sceneLoaded: (data: any) => void, progressCallBack?: (data: any) => void, errorCallback?: () => void, useArrayBuffer?: boolean): void {\r\n const completeUrl = Database._ReturnFullUrlLocation(url);\r\n\r\n const saveAndLoadFile = () => {\r\n // the scene is not yet in the DB, let's try to save it\r\n this._saveFileAsync(completeUrl, sceneLoaded, progressCallBack, useArrayBuffer, errorCallback);\r\n };\r\n\r\n this._checkVersionFromDB(completeUrl, (version) => {\r\n if (version !== -1) {\r\n if (!this._mustUpdateRessources) {\r\n this._loadFileAsync(completeUrl, sceneLoaded, saveAndLoadFile);\r\n } else {\r\n this._saveFileAsync(completeUrl, sceneLoaded, progressCallBack, useArrayBuffer, errorCallback);\r\n }\r\n } else {\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private _loadFileAsync(url: string, callback: (data?: any) => void, notInDBCallback: () => void) {\r\n if (this._isSupported && this._db) {\r\n let targetStore: string;\r\n if (url.indexOf(\".babylon\") !== -1) {\r\n targetStore = \"scenes\";\r\n } else {\r\n targetStore = \"textures\";\r\n }\r\n\r\n let file: any;\r\n const transaction = this._db.transaction([targetStore]);\r\n\r\n transaction.oncomplete = () => {\r\n if (file) {\r\n callback(file.data);\r\n }\r\n // file was not found in DB\r\n else {\r\n notInDBCallback();\r\n }\r\n };\r\n\r\n transaction.onabort = () => {\r\n notInDBCallback();\r\n };\r\n\r\n const getRequest = transaction.objectStore(targetStore).get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n file = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading file \" + url + \" from DB.\");\r\n notInDBCallback();\r\n };\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or BabylonJS Database is not open.\");\r\n callback();\r\n }\r\n }\r\n\r\n private _saveFileAsync(\r\n url: string,\r\n callback: (data?: any) => void,\r\n progressCallback?: (this: XMLHttpRequestEventTarget, ev: ProgressEvent) => any,\r\n useArrayBuffer?: boolean,\r\n errorCallback?: (data?: any) => void\r\n ) {\r\n if (this._isSupported) {\r\n let targetStore: string;\r\n if (url.indexOf(\".babylon\") !== -1) {\r\n targetStore = \"scenes\";\r\n } else {\r\n targetStore = \"textures\";\r\n }\r\n\r\n // Create XHR\r\n const xhr = new WebRequest();\r\n let fileData: any;\r\n xhr.open(\"GET\", url + (url.match(/\\?/) == null ? \"?\" : \"&\") + Date.now());\r\n\r\n if (useArrayBuffer) {\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n if (progressCallback) {\r\n xhr.onprogress = progressCallback;\r\n }\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 || (xhr.status < 400 && Database._ValidateXHRData(xhr, !useArrayBuffer ? 1 : 6))) {\r\n // Blob as response\r\n fileData = !useArrayBuffer ? xhr.responseText : xhr.response;\r\n\r\n if (!this._hasReachedQuota && this._db) {\r\n // Open a transaction to the database\r\n const transaction = this._db.transaction([targetStore], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const error = (<any>event.srcElement)[\"error\"];\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n callback(fileData);\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n callback(fileData);\r\n };\r\n\r\n let newFile;\r\n if (targetStore === \"scenes\") {\r\n newFile = { sceneUrl: url, data: fileData, version: this._manifestVersionFound };\r\n } else {\r\n newFile = { textureUrl: url, data: fileData };\r\n }\r\n\r\n try {\r\n // Put the scene into the database\r\n const addRequest = transaction.objectStore(targetStore).put(newFile);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n Logger.Error(\"Error in DB add file request in BABYLON.Database.\");\r\n };\r\n } catch (ex) {\r\n callback(fileData);\r\n }\r\n } else {\r\n callback(fileData);\r\n }\r\n } else {\r\n if (xhr.status >= 400 && errorCallback) {\r\n errorCallback(xhr);\r\n } else {\r\n callback();\r\n }\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n Logger.Error(\"error on XHR request.\");\r\n errorCallback && errorCallback();\r\n },\r\n false\r\n );\r\n\r\n xhr.send();\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n errorCallback && errorCallback();\r\n }\r\n }\r\n\r\n /**\r\n * Validates if xhr data is correct\r\n * @param xhr defines the request to validate\r\n * @param dataType defines the expected data type\r\n * @returns true if data is correct\r\n */\r\n private static _ValidateXHRData(xhr: WebRequest, dataType = 7): boolean {\r\n // 1 for text (.babylon, manifest and shaders), 2 for TGA, 4 for DDS, 7 for all\r\n\r\n try {\r\n if (dataType & 1) {\r\n if (xhr.responseText && xhr.responseText.length > 0) {\r\n return true;\r\n } else if (dataType === 1) {\r\n return false;\r\n }\r\n }\r\n\r\n if (dataType & 2) {\r\n // Check header width and height since there is no \"TGA\" magic number\r\n const tgaHeader = GetTGAHeader(xhr.response);\r\n\r\n if (tgaHeader.width && tgaHeader.height && tgaHeader.width > 0 && tgaHeader.height > 0) {\r\n return true;\r\n } else if (dataType === 2) {\r\n return false;\r\n }\r\n }\r\n\r\n if (dataType & 4) {\r\n // Check for the \"DDS\" magic number\r\n const ddsHeader = new Uint8Array(xhr.response, 0, 3);\r\n\r\n if (ddsHeader[0] === 68 && ddsHeader[1] === 68 && ddsHeader[2] === 83) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n } catch (e) {\r\n // Global protection\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Offline/database.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { GetTGAHeader } from \"../Misc/tga\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport type { IOfflineProvider } from \"./IOfflineProvider\";\r\nimport { WebRequest } from \"../Misc/webRequest\";\r\n\r\n// Sets the default offline provider to Babylon.js\r\nEngine.OfflineProviderFactory = (urlToScene: string, callbackManifestChecked: (checked: boolean) => any, disableManifestCheck = false) => {\r\n return new Database(urlToScene, callbackManifestChecked, disableManifestCheck);\r\n};\r\n\r\n/**\r\n * Class used to enable access to IndexedDB\r\n * @see https://doc.babylonjs.com/how_to/caching_resources_in_indexeddb\r\n */\r\nexport class Database implements IOfflineProvider {\r\n private _currentSceneUrl: string;\r\n private _db: Nullable<IDBDatabase>;\r\n private _enableSceneOffline: boolean;\r\n private _enableTexturesOffline: boolean;\r\n private _manifestVersionFound: number;\r\n private _mustUpdateRessources: boolean;\r\n private _hasReachedQuota: boolean;\r\n private _isSupported: boolean;\r\n\r\n // Handling various flavors of prefixed version of IndexedDB\r\n private _idbFactory = <IDBFactory>(typeof indexedDB !== \"undefined\" ? indexedDB : undefined);\r\n\r\n /** Gets a boolean indicating if the user agent supports blob storage (this value will be updated after creating the first Database object) */\r\n private static _IsUASupportingBlobStorage = true;\r\n\r\n /**\r\n * Gets a boolean indicating if Database storage is enabled (off by default)\r\n */\r\n static IDBStorageEnabled = false;\r\n\r\n /**\r\n * Gets a boolean indicating if scene must be saved in the database\r\n */\r\n public get enableSceneOffline(): boolean {\r\n return this._enableSceneOffline;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if textures must be saved in the database\r\n */\r\n public get enableTexturesOffline(): boolean {\r\n return this._enableTexturesOffline;\r\n }\r\n\r\n /**\r\n * Creates a new Database\r\n * @param urlToScene defines the url to load the scene\r\n * @param callbackManifestChecked defines the callback to use when manifest is checked\r\n * @param disableManifestCheck defines a boolean indicating that we want to skip the manifest validation (it will be considered validated and up to date)\r\n */\r\n constructor(urlToScene: string, callbackManifestChecked: (checked: boolean) => any, disableManifestCheck = false) {\r\n this._currentSceneUrl = Database._ReturnFullUrlLocation(urlToScene);\r\n this._db = null;\r\n this._enableSceneOffline = false;\r\n this._enableTexturesOffline = false;\r\n this._manifestVersionFound = 0;\r\n this._mustUpdateRessources = false;\r\n this._hasReachedQuota = false;\r\n\r\n if (!Database.IDBStorageEnabled) {\r\n callbackManifestChecked(true);\r\n } else {\r\n if (disableManifestCheck) {\r\n this._enableSceneOffline = true;\r\n this._enableTexturesOffline = true;\r\n this._manifestVersionFound = 1;\r\n Tools.SetImmediate(() => {\r\n callbackManifestChecked(true);\r\n });\r\n } else {\r\n this._checkManifestFile(callbackManifestChecked);\r\n }\r\n }\r\n }\r\n\r\n private static _ParseURL = (url: string) => {\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n const urlWithoutHash = url.substring(0, url.lastIndexOf(\"#\"));\r\n const fileName = url.substring(urlWithoutHash.lastIndexOf(\"/\") + 1, url.length);\r\n const absLocation = url.substring(0, url.indexOf(fileName, 0));\r\n return absLocation;\r\n };\r\n\r\n private static _ReturnFullUrlLocation = (url: string): string => {\r\n if (url.indexOf(\"http:/\") === -1 && url.indexOf(\"https:/\") === -1 && typeof window !== \"undefined\") {\r\n return Database._ParseURL(window.location.href) + url;\r\n } else {\r\n return url;\r\n }\r\n };\r\n\r\n private _checkManifestFile(callbackManifestChecked: (checked: boolean) => any) {\r\n const noManifestFile = () => {\r\n this._enableSceneOffline = false;\r\n this._enableTexturesOffline = false;\r\n callbackManifestChecked(false);\r\n };\r\n\r\n const createManifestURL = (): string => {\r\n try {\r\n // make sure we have a valid URL.\r\n if (typeof URL === \"function\" && this._currentSceneUrl.indexOf(\"http\") === 0) {\r\n // we don't have the base url, so the URL string must have a protocol\r\n const url = new URL(this._currentSceneUrl);\r\n url.pathname += \".manifest\";\r\n return url.toString();\r\n }\r\n } catch (e) {\r\n // defensive - if this fails for any reason, fall back to the older method\r\n }\r\n\r\n return `${this._currentSceneUrl}.manifest`;\r\n };\r\n\r\n let timeStampUsed = false;\r\n let manifestURL = createManifestURL();\r\n\r\n const xhr = new WebRequest();\r\n\r\n if (navigator.onLine) {\r\n // Adding a timestamp to by-pass browsers' cache\r\n timeStampUsed = true;\r\n manifestURL = manifestURL + (manifestURL.match(/\\?/) == null ? \"?\" : \"&\") + Date.now();\r\n }\r\n xhr.open(\"GET\", manifestURL);\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 || Database._ValidateXHRData(xhr, 1)) {\r\n try {\r\n const manifestFile = JSON.parse(xhr.response);\r\n this._enableSceneOffline = manifestFile.enableSceneOffline;\r\n this._enableTexturesOffline = manifestFile.enableTexturesOffline && Database._IsUASupportingBlobStorage;\r\n if (manifestFile.version && !isNaN(parseInt(manifestFile.version))) {\r\n this._manifestVersionFound = manifestFile.version;\r\n }\r\n callbackManifestChecked(true);\r\n } catch (ex) {\r\n noManifestFile();\r\n }\r\n } else {\r\n noManifestFile();\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n if (timeStampUsed) {\r\n timeStampUsed = false;\r\n // Let's retry without the timeStamp\r\n // It could fail when coupled with HTML5 Offline API\r\n const retryManifestURL = createManifestURL();\r\n xhr.open(\"GET\", retryManifestURL);\r\n xhr.send();\r\n } else {\r\n noManifestFile();\r\n }\r\n },\r\n false\r\n );\r\n\r\n try {\r\n xhr.send();\r\n } catch (ex) {\r\n Logger.Error(\"Error on XHR send request.\");\r\n callbackManifestChecked(false);\r\n }\r\n }\r\n\r\n /**\r\n * Open the database and make it available\r\n * @param successCallback defines the callback to call on success\r\n * @param errorCallback defines the callback to call on error\r\n */\r\n public open(successCallback: () => void, errorCallback: () => void): void {\r\n const handleError = () => {\r\n this._isSupported = false;\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n };\r\n\r\n if (!this._idbFactory || !(this._enableSceneOffline || this._enableTexturesOffline)) {\r\n // Your browser doesn't support IndexedDB\r\n this._isSupported = false;\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n } else {\r\n // If the DB hasn't been opened or created yet\r\n if (!this._db) {\r\n this._hasReachedQuota = false;\r\n this._isSupported = true;\r\n\r\n const request: IDBOpenDBRequest = this._idbFactory.open(\"babylonjs\", 1);\r\n\r\n // Could occur if user is blocking the quota for the DB and/or doesn't grant access to IndexedDB\r\n request.onerror = () => {\r\n handleError();\r\n };\r\n\r\n // executes when a version change transaction cannot complete due to other active transactions\r\n request.onblocked = () => {\r\n Logger.Error(\"IDB request blocked. Please reload the page.\");\r\n handleError();\r\n };\r\n\r\n // DB has been opened successfully\r\n request.onsuccess = () => {\r\n this._db = request.result;\r\n successCallback();\r\n };\r\n\r\n // Initialization of the DB. Creating Scenes & Textures stores\r\n request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\r\n this._db = (<any>event.target).result;\r\n if (this._db) {\r\n try {\r\n this._db.createObjectStore(\"scenes\", { keyPath: \"sceneUrl\" });\r\n this._db.createObjectStore(\"versions\", { keyPath: \"sceneUrl\" });\r\n this._db.createObjectStore(\"textures\", { keyPath: \"textureUrl\" });\r\n } catch (ex) {\r\n Logger.Error(\"Error while creating object stores. Exception: \" + ex.message);\r\n handleError();\r\n }\r\n }\r\n };\r\n }\r\n // DB has already been created and opened\r\n else {\r\n if (successCallback) {\r\n successCallback();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Loads an image from the database\r\n * @param url defines the url to load from\r\n * @param image defines the target DOM image\r\n */\r\n public loadImage(url: string, image: HTMLImageElement) {\r\n const completeURL = Database._ReturnFullUrlLocation(url);\r\n\r\n const saveAndLoadImage = () => {\r\n if (!this._hasReachedQuota && this._db !== null) {\r\n // the texture is not yet in the DB, let's try to save it\r\n this._saveImageIntoDBAsync(completeURL, image);\r\n }\r\n // If the texture is not in the DB and we've reached the DB quota limit\r\n // let's load it directly from the web\r\n else {\r\n image.src = url;\r\n }\r\n };\r\n\r\n if (!this._mustUpdateRessources) {\r\n this._loadImageFromDBAsync(completeURL, image, saveAndLoadImage);\r\n }\r\n // First time we're download the images or update requested in the manifest file by a version change\r\n else {\r\n saveAndLoadImage();\r\n }\r\n }\r\n\r\n private _loadImageFromDBAsync(url: string, image: HTMLImageElement, notInDBCallback: () => any) {\r\n if (this._isSupported && this._db !== null) {\r\n let texture: any;\r\n const transaction: IDBTransaction = this._db.transaction([\"textures\"]);\r\n\r\n transaction.onabort = () => {\r\n image.src = url;\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n let blobTextureURL: string;\r\n if (texture && typeof URL === \"function\") {\r\n blobTextureURL = URL.createObjectURL(texture.data);\r\n image.onerror = () => {\r\n Logger.Error(\"Error loading image from blob URL: \" + blobTextureURL + \" switching back to web url: \" + url);\r\n image.src = url;\r\n };\r\n image.src = blobTextureURL;\r\n } else {\r\n notInDBCallback();\r\n }\r\n };\r\n\r\n const getRequest: IDBRequest = transaction.objectStore(\"textures\").get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n texture = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading texture \" + url + \" from DB.\");\r\n image.src = url;\r\n };\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or BabylonJS Database is not open.\");\r\n image.src = url;\r\n }\r\n }\r\n\r\n private _saveImageIntoDBAsync(url: string, image: HTMLImageElement) {\r\n let blob: Blob;\r\n\r\n if (this._isSupported) {\r\n // In case of error (type not supported or quota exceeded), we're at least sending back XHR data to allow texture loading later on\r\n const generateBlobUrl = () => {\r\n let blobTextureURL;\r\n\r\n if (blob && typeof URL === \"function\") {\r\n try {\r\n blobTextureURL = URL.createObjectURL(blob);\r\n } catch (ex) {\r\n // Chrome is raising a type error if we're setting the oneTimeOnly parameter\r\n blobTextureURL = URL.createObjectURL(blob);\r\n }\r\n }\r\n\r\n if (blobTextureURL) {\r\n image.src = blobTextureURL;\r\n }\r\n };\r\n\r\n if (Database._IsUASupportingBlobStorage) {\r\n // Create XHR\r\n const xhr = new WebRequest();\r\n\r\n xhr.open(\"GET\", url);\r\n xhr.responseType = \"blob\";\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 && this._db) {\r\n // Blob as response\r\n blob = xhr.response;\r\n\r\n const transaction = this._db.transaction([\"textures\"], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const srcElement = <any>(event.srcElement || event.target);\r\n const error = srcElement.error;\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n generateBlobUrl();\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n generateBlobUrl();\r\n };\r\n\r\n const newTexture = { textureUrl: url, data: blob };\r\n\r\n try {\r\n // Put the blob into the dabase\r\n const addRequest = transaction.objectStore(\"textures\").put(newTexture);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n generateBlobUrl();\r\n };\r\n } catch (ex) {\r\n // \"DataCloneError\" generated by Chrome when you try to inject blob into IndexedDB\r\n if (ex.code === 25) {\r\n Database._IsUASupportingBlobStorage = false;\r\n this._enableTexturesOffline = false;\r\n }\r\n image.src = url;\r\n }\r\n } else {\r\n image.src = url;\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n Logger.Error(\"Error in XHR request in BABYLON.Database.\");\r\n image.src = url;\r\n },\r\n false\r\n );\r\n\r\n xhr.send();\r\n } else {\r\n image.src = url;\r\n }\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n image.src = url;\r\n }\r\n }\r\n\r\n private _checkVersionFromDB(url: string, versionLoaded: (version: number) => void) {\r\n const updateVersion = () => {\r\n // the version is not yet in the DB or we need to update it\r\n this._saveVersionIntoDBAsync(url, versionLoaded);\r\n };\r\n this._loadVersionFromDBAsync(url, versionLoaded, updateVersion);\r\n }\r\n\r\n private _loadVersionFromDBAsync(url: string, callback: (version: number) => void, updateInDBCallback: () => void) {\r\n if (this._isSupported && this._db) {\r\n let version: any;\r\n try {\r\n const transaction = this._db.transaction([\"versions\"]);\r\n\r\n transaction.oncomplete = () => {\r\n if (version) {\r\n // If the version in the JSON file is different from the version in DB\r\n if (this._manifestVersionFound !== version.data) {\r\n this._mustUpdateRessources = true;\r\n updateInDBCallback();\r\n } else {\r\n callback(version.data);\r\n }\r\n }\r\n // version was not found in DB\r\n else {\r\n this._mustUpdateRessources = true;\r\n updateInDBCallback();\r\n }\r\n };\r\n\r\n transaction.onabort = () => {\r\n callback(-1);\r\n };\r\n\r\n const getRequest = transaction.objectStore(\"versions\").get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n version = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading version for scene \" + url + \" from DB.\");\r\n callback(-1);\r\n };\r\n } catch (ex) {\r\n Logger.Error(\"Error while accessing 'versions' object store (READ OP). Exception: \" + ex.message);\r\n callback(-1);\r\n }\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n callback(-1);\r\n }\r\n }\r\n\r\n private _saveVersionIntoDBAsync(url: string, callback: (version: number) => void) {\r\n if (this._isSupported && !this._hasReachedQuota && this._db) {\r\n try {\r\n // Open a transaction to the database\r\n const transaction = this._db.transaction([\"versions\"], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const error = (<any>event.srcElement)[\"error\"];\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n callback(-1);\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n callback(this._manifestVersionFound);\r\n };\r\n\r\n const newVersion = { sceneUrl: url, data: this._manifestVersionFound };\r\n\r\n // Put the scene into the database\r\n const addRequest = transaction.objectStore(\"versions\").put(newVersion);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n Logger.Error(\"Error in DB add version request in BABYLON.Database.\");\r\n };\r\n } catch (ex) {\r\n Logger.Error(\"Error while accessing 'versions' object store (WRITE OP). Exception: \" + ex.message);\r\n callback(-1);\r\n }\r\n } else {\r\n callback(-1);\r\n }\r\n }\r\n\r\n /**\r\n * Loads a file from database\r\n * @param url defines the URL to load from\r\n * @param sceneLoaded defines a callback to call on success\r\n * @param progressCallBack defines a callback to call when progress changed\r\n * @param errorCallback defines a callback to call on error\r\n * @param useArrayBuffer defines a boolean to use array buffer instead of text string\r\n */\r\n public loadFile(url: string, sceneLoaded: (data: any) => void, progressCallBack?: (data: any) => void, errorCallback?: () => void, useArrayBuffer?: boolean): void {\r\n const completeUrl = Database._ReturnFullUrlLocation(url);\r\n\r\n const saveAndLoadFile = () => {\r\n // the scene is not yet in the DB, let's try to save it\r\n this._saveFileAsync(completeUrl, sceneLoaded, progressCallBack, useArrayBuffer, errorCallback);\r\n };\r\n\r\n this._checkVersionFromDB(completeUrl, (version) => {\r\n if (version !== -1) {\r\n if (!this._mustUpdateRessources) {\r\n this._loadFileAsync(completeUrl, sceneLoaded, saveAndLoadFile);\r\n } else {\r\n this._saveFileAsync(completeUrl, sceneLoaded, progressCallBack, useArrayBuffer, errorCallback);\r\n }\r\n } else {\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private _loadFileAsync(url: string, callback: (data?: any) => void, notInDBCallback: () => void) {\r\n if (this._isSupported && this._db) {\r\n let targetStore: string;\r\n if (url.indexOf(\".babylon\") !== -1) {\r\n targetStore = \"scenes\";\r\n } else {\r\n targetStore = \"textures\";\r\n }\r\n\r\n let file: any;\r\n const transaction = this._db.transaction([targetStore]);\r\n\r\n transaction.oncomplete = () => {\r\n if (file) {\r\n callback(file.data);\r\n }\r\n // file was not found in DB\r\n else {\r\n notInDBCallback();\r\n }\r\n };\r\n\r\n transaction.onabort = () => {\r\n notInDBCallback();\r\n };\r\n\r\n const getRequest = transaction.objectStore(targetStore).get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n file = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading file \" + url + \" from DB.\");\r\n notInDBCallback();\r\n };\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or BabylonJS Database is not open.\");\r\n callback();\r\n }\r\n }\r\n\r\n private _saveFileAsync(\r\n url: string,\r\n callback: (data?: any) => void,\r\n progressCallback?: (this: XMLHttpRequestEventTarget, ev: ProgressEvent) => any,\r\n useArrayBuffer?: boolean,\r\n errorCallback?: (data?: any) => void\r\n ) {\r\n if (this._isSupported) {\r\n let targetStore: string;\r\n if (url.indexOf(\".babylon\") !== -1) {\r\n targetStore = \"scenes\";\r\n } else {\r\n targetStore = \"textures\";\r\n }\r\n\r\n // Create XHR\r\n const xhr = new WebRequest();\r\n let fileData: any;\r\n xhr.open(\"GET\", url + (url.match(/\\?/) == null ? \"?\" : \"&\") + Date.now());\r\n\r\n if (useArrayBuffer) {\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n if (progressCallback) {\r\n xhr.onprogress = progressCallback;\r\n }\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 || (xhr.status < 400 && Database._ValidateXHRData(xhr, !useArrayBuffer ? 1 : 6))) {\r\n // Blob as response\r\n fileData = !useArrayBuffer ? xhr.responseText : xhr.response;\r\n\r\n if (!this._hasReachedQuota && this._db) {\r\n // Open a transaction to the database\r\n const transaction = this._db.transaction([targetStore], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const error = (<any>event.srcElement)[\"error\"];\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n callback(fileData);\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n callback(fileData);\r\n };\r\n\r\n let newFile;\r\n if (targetStore === \"scenes\") {\r\n newFile = { sceneUrl: url, data: fileData, version: this._manifestVersionFound };\r\n } else {\r\n newFile = { textureUrl: url, data: fileData };\r\n }\r\n\r\n try {\r\n // Put the scene into the database\r\n const addRequest = transaction.objectStore(targetStore).put(newFile);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n Logger.Error(\"Error in DB add file request in BABYLON.Database.\");\r\n };\r\n } catch (ex) {\r\n callback(fileData);\r\n }\r\n } else {\r\n callback(fileData);\r\n }\r\n } else {\r\n if (xhr.status >= 400 && errorCallback) {\r\n errorCallback(xhr);\r\n } else {\r\n callback();\r\n }\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n Logger.Error(\"error on XHR request.\");\r\n errorCallback && errorCallback();\r\n },\r\n false\r\n );\r\n\r\n xhr.send();\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n errorCallback && errorCallback();\r\n }\r\n }\r\n\r\n /**\r\n * Validates if xhr data is correct\r\n * @param xhr defines the request to validate\r\n * @param dataType defines the expected data type\r\n * @returns true if data is correct\r\n */\r\n private static _ValidateXHRData(xhr: WebRequest, dataType = 7): boolean {\r\n // 1 for text (.babylon, manifest and shaders), 2 for TGA, 4 for DDS, 7 for all\r\n\r\n try {\r\n if (dataType & 1) {\r\n if (xhr.responseText && xhr.responseText.length > 0) {\r\n return true;\r\n } else if (dataType === 1) {\r\n return false;\r\n }\r\n }\r\n\r\n if (dataType & 2) {\r\n // Check header width and height since there is no \"TGA\" magic number\r\n const tgaHeader = GetTGAHeader(xhr.response);\r\n\r\n if (tgaHeader.width && tgaHeader.height && tgaHeader.width > 0 && tgaHeader.height > 0) {\r\n return true;\r\n } else if (dataType === 2) {\r\n return false;\r\n }\r\n }\r\n\r\n if (dataType & 4) {\r\n // Check for the \"DDS\" magic number\r\n const ddsHeader = new Uint8Array(xhr.response, 0, 3);\r\n\r\n if (ddsHeader[0] === 68 && ddsHeader[1] === 68 && ddsHeader[2] === 83) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n } catch (e) {\r\n // Global protection\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n"]}
@@ -127,13 +127,13 @@ var ComputeShaderParticleSystem = /** @class */ (function () {
127
127
  for (var i = 0; i < this._bufferComputeShader.length; ++i) {
128
128
  this._bufferComputeShader[i].dispose();
129
129
  }
130
- this._bufferComputeShader = [];
130
+ this._bufferComputeShader.length = 0;
131
131
  (_a = this._simParamsComputeShader) === null || _a === void 0 ? void 0 : _a.dispose();
132
132
  this._simParamsComputeShader = null;
133
133
  this._updateComputeShader = null;
134
134
  };
135
135
  ComputeShaderParticleSystem.prototype.releaseVertexBuffers = function () {
136
- this._renderVertexBuffers = [];
136
+ this._renderVertexBuffers.length = 0;
137
137
  };
138
138
  return ComputeShaderParticleSystem;
139
139
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"computeShaderParticleSystem.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Particles/computeShaderParticleSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { StorageBuffer } from \"../Buffers/storageBuffer\";\r\nimport { ComputeShader } from \"../Compute/computeShader\";\r\nimport { UniformBuffer } from \"../Materials/uniformBuffer\";\r\nimport type { IGPUParticleSystemPlatform } from \"./IGPUParticleSystemPlatform\";\r\nimport type { Buffer, VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { GPUParticleSystem } from \"./gpuParticleSystem\";\r\n\r\nimport type { DataArray } from \"../types\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { UniformBufferEffectCommonAccessor } from \"../Materials/uniformBufferEffectCommonAccessor\";\r\nimport type { ComputeBindingMapping } from \"../Engines/Extensions/engine.computeShader\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\nimport \"../ShadersWGSL/gpuUpdateParticles.compute\";\r\n\r\n/** @hidden */\r\nexport class ComputeShaderParticleSystem implements IGPUParticleSystemPlatform {\r\n private _parent: GPUParticleSystem;\r\n private _engine: ThinEngine;\r\n private _updateComputeShader: ComputeShader;\r\n private _simParamsComputeShader: UniformBuffer;\r\n private _bufferComputeShader: StorageBuffer[] = [];\r\n private _renderVertexBuffers: Array<{ [key: string]: VertexBuffer }> = [];\r\n\r\n public readonly alignDataInBuffer = true;\r\n\r\n constructor(parent: GPUParticleSystem, engine: ThinEngine) {\r\n this._parent = parent;\r\n this._engine = engine;\r\n }\r\n\r\n public isUpdateBufferCreated(): boolean {\r\n return !!this._updateComputeShader;\r\n }\r\n\r\n public isUpdateBufferReady(): boolean {\r\n return this._updateComputeShader?.isReady() ?? false;\r\n }\r\n\r\n public createUpdateBuffer(defines: string): UniformBufferEffectCommonAccessor {\r\n const bindingsMapping: ComputeBindingMapping = {\r\n params: { group: 0, binding: 0 },\r\n particlesIn: { group: 0, binding: 1 },\r\n particlesOut: { group: 0, binding: 2 },\r\n randomTexture: { group: 0, binding: 3 },\r\n randomTexture2: { group: 0, binding: 4 },\r\n };\r\n if (this._parent._sizeGradientsTexture) {\r\n bindingsMapping[\"sizeGradientTexture\"] = { group: 1, binding: 1 };\r\n }\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n bindingsMapping[\"angularSpeedGradientTexture\"] = { group: 1, binding: 3 };\r\n }\r\n if (this._parent._velocityGradientsTexture) {\r\n bindingsMapping[\"velocityGradientTexture\"] = { group: 1, binding: 5 };\r\n }\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n bindingsMapping[\"limitVelocityGradientTexture\"] = { group: 1, binding: 7 };\r\n }\r\n if (this._parent._dragGradientsTexture) {\r\n bindingsMapping[\"dragGradientTexture\"] = { group: 1, binding: 9 };\r\n }\r\n if (this._parent.noiseTexture) {\r\n bindingsMapping[\"noiseTexture\"] = { group: 1, binding: 11 };\r\n }\r\n\r\n this._updateComputeShader = new ComputeShader(\"updateParticles\", this._engine, \"gpuUpdateParticles\", { bindingsMapping, defines: defines.split(\"\\n\") });\r\n\r\n this._simParamsComputeShader?.dispose();\r\n this._simParamsComputeShader = new UniformBuffer(this._engine);\r\n\r\n this._simParamsComputeShader.addUniform(\"currentCount\", 1);\r\n this._simParamsComputeShader.addUniform(\"timeDelta\", 1);\r\n this._simParamsComputeShader.addUniform(\"stopFactor\", 1);\r\n this._simParamsComputeShader.addUniform(\"randomTextureSize\", 1);\r\n this._simParamsComputeShader.addUniform(\"lifeTime\", 2);\r\n this._simParamsComputeShader.addUniform(\"emitPower\", 2);\r\n if (!this._parent._colorGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"color1\", 4);\r\n this._simParamsComputeShader.addUniform(\"color2\", 4);\r\n }\r\n this._simParamsComputeShader.addUniform(\"sizeRange\", 2);\r\n this._simParamsComputeShader.addUniform(\"scaleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"angleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"gravity\", 3);\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"limitVelocityDamping\", 1);\r\n }\r\n if (this._parent.isAnimationSheetEnabled) {\r\n this._simParamsComputeShader.addUniform(\"cellInfos\", 4);\r\n }\r\n if (this._parent.noiseTexture) {\r\n this._simParamsComputeShader.addUniform(\"noiseStrength\", 3);\r\n }\r\n if (!this._parent.isLocal) {\r\n this._simParamsComputeShader.addUniform(\"emitterWM\", 16);\r\n }\r\n if (this._parent.particleEmitterType) {\r\n this._parent.particleEmitterType.buildUniformLayout(this._simParamsComputeShader);\r\n }\r\n\r\n this._updateComputeShader.setUniformBuffer(\"params\", this._simParamsComputeShader);\r\n\r\n return new UniformBufferEffectCommonAccessor(this._simParamsComputeShader);\r\n }\r\n\r\n public createVertexBuffers(updateBuffer: Buffer, renderVertexBuffers: { [key: string]: VertexBuffer }): void {\r\n this._renderVertexBuffers.push(renderVertexBuffers);\r\n }\r\n\r\n public createParticleBuffer(data: number[]): DataArray | DataBuffer {\r\n const buffer = new StorageBuffer(this._engine, data.length * 4, Constants.BUFFER_CREATIONFLAG_READWRITE | Constants.BUFFER_CREATIONFLAG_VERTEX);\r\n\r\n buffer.update(data);\r\n this._bufferComputeShader.push(buffer);\r\n\r\n return buffer.getBuffer();\r\n }\r\n\r\n public bindDrawBuffers(index: number, effect: Effect): void {\r\n this._engine.bindBuffers(this._renderVertexBuffers[index], null, effect);\r\n }\r\n\r\n public preUpdateParticleBuffer(): void {}\r\n\r\n public updateParticleBuffer(index: number, targetBuffer: Buffer, currentActiveCount: number): void {\r\n this._simParamsComputeShader.update();\r\n\r\n this._updateComputeShader.setTexture(\"randomTexture\", this._parent._randomTexture, false);\r\n this._updateComputeShader.setTexture(\"randomTexture2\", this._parent._randomTexture2, false);\r\n if (this._parent._sizeGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"sizeGradientTexture\", this._parent._sizeGradientsTexture);\r\n }\r\n\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"angularSpeedGradientTexture\", this._parent._angularSpeedGradientsTexture);\r\n }\r\n\r\n if (this._parent._velocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"velocityGradientTexture\", this._parent._velocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"limitVelocityGradientTexture\", this._parent._limitVelocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._dragGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"dragGradientTexture\", this._parent._dragGradientsTexture);\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n this._updateComputeShader.setTexture(\"noiseTexture\", this._parent.noiseTexture);\r\n }\r\n\r\n this._updateComputeShader.setStorageBuffer(\"particlesIn\", this._bufferComputeShader[index]);\r\n this._updateComputeShader.setStorageBuffer(\"particlesOut\", this._bufferComputeShader[index ^ 1]);\r\n\r\n this._updateComputeShader.dispatch(Math.ceil(currentActiveCount / 64));\r\n }\r\n\r\n public releaseBuffers(): void {\r\n for (let i = 0; i < this._bufferComputeShader.length; ++i) {\r\n this._bufferComputeShader[i].dispose();\r\n }\r\n\r\n this._bufferComputeShader = [];\r\n\r\n this._simParamsComputeShader?.dispose();\r\n (<any>this._simParamsComputeShader) = null;\r\n\r\n (<any>this._updateComputeShader) = null;\r\n }\r\n\r\n public releaseVertexBuffers(): void {\r\n this._renderVertexBuffers = [];\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ComputeShaderParticleSystem\", ComputeShaderParticleSystem);\r\n"]}
1
+ {"version":3,"file":"computeShaderParticleSystem.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Particles/computeShaderParticleSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { StorageBuffer } from \"../Buffers/storageBuffer\";\r\nimport { ComputeShader } from \"../Compute/computeShader\";\r\nimport { UniformBuffer } from \"../Materials/uniformBuffer\";\r\nimport type { IGPUParticleSystemPlatform } from \"./IGPUParticleSystemPlatform\";\r\nimport type { Buffer, VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { GPUParticleSystem } from \"./gpuParticleSystem\";\r\n\r\nimport type { DataArray } from \"../types\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { UniformBufferEffectCommonAccessor } from \"../Materials/uniformBufferEffectCommonAccessor\";\r\nimport type { ComputeBindingMapping } from \"../Engines/Extensions/engine.computeShader\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\nimport \"../ShadersWGSL/gpuUpdateParticles.compute\";\r\n\r\n/** @hidden */\r\nexport class ComputeShaderParticleSystem implements IGPUParticleSystemPlatform {\r\n private _parent: GPUParticleSystem;\r\n private _engine: ThinEngine;\r\n private _updateComputeShader: ComputeShader;\r\n private _simParamsComputeShader: UniformBuffer;\r\n private _bufferComputeShader: StorageBuffer[] = [];\r\n private _renderVertexBuffers: Array<{ [key: string]: VertexBuffer }> = [];\r\n\r\n public readonly alignDataInBuffer = true;\r\n\r\n constructor(parent: GPUParticleSystem, engine: ThinEngine) {\r\n this._parent = parent;\r\n this._engine = engine;\r\n }\r\n\r\n public isUpdateBufferCreated(): boolean {\r\n return !!this._updateComputeShader;\r\n }\r\n\r\n public isUpdateBufferReady(): boolean {\r\n return this._updateComputeShader?.isReady() ?? false;\r\n }\r\n\r\n public createUpdateBuffer(defines: string): UniformBufferEffectCommonAccessor {\r\n const bindingsMapping: ComputeBindingMapping = {\r\n params: { group: 0, binding: 0 },\r\n particlesIn: { group: 0, binding: 1 },\r\n particlesOut: { group: 0, binding: 2 },\r\n randomTexture: { group: 0, binding: 3 },\r\n randomTexture2: { group: 0, binding: 4 },\r\n };\r\n if (this._parent._sizeGradientsTexture) {\r\n bindingsMapping[\"sizeGradientTexture\"] = { group: 1, binding: 1 };\r\n }\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n bindingsMapping[\"angularSpeedGradientTexture\"] = { group: 1, binding: 3 };\r\n }\r\n if (this._parent._velocityGradientsTexture) {\r\n bindingsMapping[\"velocityGradientTexture\"] = { group: 1, binding: 5 };\r\n }\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n bindingsMapping[\"limitVelocityGradientTexture\"] = { group: 1, binding: 7 };\r\n }\r\n if (this._parent._dragGradientsTexture) {\r\n bindingsMapping[\"dragGradientTexture\"] = { group: 1, binding: 9 };\r\n }\r\n if (this._parent.noiseTexture) {\r\n bindingsMapping[\"noiseTexture\"] = { group: 1, binding: 11 };\r\n }\r\n\r\n this._updateComputeShader = new ComputeShader(\"updateParticles\", this._engine, \"gpuUpdateParticles\", { bindingsMapping, defines: defines.split(\"\\n\") });\r\n\r\n this._simParamsComputeShader?.dispose();\r\n this._simParamsComputeShader = new UniformBuffer(this._engine);\r\n\r\n this._simParamsComputeShader.addUniform(\"currentCount\", 1);\r\n this._simParamsComputeShader.addUniform(\"timeDelta\", 1);\r\n this._simParamsComputeShader.addUniform(\"stopFactor\", 1);\r\n this._simParamsComputeShader.addUniform(\"randomTextureSize\", 1);\r\n this._simParamsComputeShader.addUniform(\"lifeTime\", 2);\r\n this._simParamsComputeShader.addUniform(\"emitPower\", 2);\r\n if (!this._parent._colorGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"color1\", 4);\r\n this._simParamsComputeShader.addUniform(\"color2\", 4);\r\n }\r\n this._simParamsComputeShader.addUniform(\"sizeRange\", 2);\r\n this._simParamsComputeShader.addUniform(\"scaleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"angleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"gravity\", 3);\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"limitVelocityDamping\", 1);\r\n }\r\n if (this._parent.isAnimationSheetEnabled) {\r\n this._simParamsComputeShader.addUniform(\"cellInfos\", 4);\r\n }\r\n if (this._parent.noiseTexture) {\r\n this._simParamsComputeShader.addUniform(\"noiseStrength\", 3);\r\n }\r\n if (!this._parent.isLocal) {\r\n this._simParamsComputeShader.addUniform(\"emitterWM\", 16);\r\n }\r\n if (this._parent.particleEmitterType) {\r\n this._parent.particleEmitterType.buildUniformLayout(this._simParamsComputeShader);\r\n }\r\n\r\n this._updateComputeShader.setUniformBuffer(\"params\", this._simParamsComputeShader);\r\n\r\n return new UniformBufferEffectCommonAccessor(this._simParamsComputeShader);\r\n }\r\n\r\n public createVertexBuffers(updateBuffer: Buffer, renderVertexBuffers: { [key: string]: VertexBuffer }): void {\r\n this._renderVertexBuffers.push(renderVertexBuffers);\r\n }\r\n\r\n public createParticleBuffer(data: number[]): DataArray | DataBuffer {\r\n const buffer = new StorageBuffer(this._engine, data.length * 4, Constants.BUFFER_CREATIONFLAG_READWRITE | Constants.BUFFER_CREATIONFLAG_VERTEX);\r\n\r\n buffer.update(data);\r\n this._bufferComputeShader.push(buffer);\r\n\r\n return buffer.getBuffer();\r\n }\r\n\r\n public bindDrawBuffers(index: number, effect: Effect): void {\r\n this._engine.bindBuffers(this._renderVertexBuffers[index], null, effect);\r\n }\r\n\r\n public preUpdateParticleBuffer(): void {}\r\n\r\n public updateParticleBuffer(index: number, targetBuffer: Buffer, currentActiveCount: number): void {\r\n this._simParamsComputeShader.update();\r\n\r\n this._updateComputeShader.setTexture(\"randomTexture\", this._parent._randomTexture, false);\r\n this._updateComputeShader.setTexture(\"randomTexture2\", this._parent._randomTexture2, false);\r\n if (this._parent._sizeGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"sizeGradientTexture\", this._parent._sizeGradientsTexture);\r\n }\r\n\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"angularSpeedGradientTexture\", this._parent._angularSpeedGradientsTexture);\r\n }\r\n\r\n if (this._parent._velocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"velocityGradientTexture\", this._parent._velocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"limitVelocityGradientTexture\", this._parent._limitVelocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._dragGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"dragGradientTexture\", this._parent._dragGradientsTexture);\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n this._updateComputeShader.setTexture(\"noiseTexture\", this._parent.noiseTexture);\r\n }\r\n\r\n this._updateComputeShader.setStorageBuffer(\"particlesIn\", this._bufferComputeShader[index]);\r\n this._updateComputeShader.setStorageBuffer(\"particlesOut\", this._bufferComputeShader[index ^ 1]);\r\n\r\n this._updateComputeShader.dispatch(Math.ceil(currentActiveCount / 64));\r\n }\r\n\r\n public releaseBuffers(): void {\r\n for (let i = 0; i < this._bufferComputeShader.length; ++i) {\r\n this._bufferComputeShader[i].dispose();\r\n }\r\n\r\n this._bufferComputeShader.length = 0;\r\n\r\n this._simParamsComputeShader?.dispose();\r\n (<any>this._simParamsComputeShader) = null;\r\n\r\n (<any>this._updateComputeShader) = null;\r\n }\r\n\r\n public releaseVertexBuffers(): void {\r\n this._renderVertexBuffers.length = 0;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ComputeShaderParticleSystem\", ComputeShaderParticleSystem);\r\n"]}
@@ -59,5 +59,16 @@ export declare class ParticleHelper {
59
59
  * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)
60
60
  * @returns a promise that will resolve to the new particle system
61
61
  */
62
- static CreateFromSnippetAsync(snippetId: string, scene: Scene, gpu?: boolean, rootUrl?: string, capacity?: number): Promise<IParticleSystem>;
62
+ static ParseFromSnippetAsync(snippetId: string, scene: Scene, gpu?: boolean, rootUrl?: string, capacity?: number): Promise<IParticleSystem>;
63
+ /**
64
+ * Creates a particle system from a snippet saved by the particle system editor
65
+ * @deprecated Please use ParseFromSnippetAsync instead
66
+ * @param snippetId defines the snippet to load (can be set to _BLANK to create a default one)
67
+ * @param scene defines the hosting scene
68
+ * @param gpu If the system will use gpu
69
+ * @param rootUrl defines the root URL to use to load textures and relative dependencies
70
+ * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)
71
+ * @returns a promise that will resolve to the new particle system
72
+ */
73
+ static CreateFromSnippetAsync: typeof ParticleHelper.ParseFromSnippetAsync;
63
74
  }
@@ -142,7 +142,7 @@ var ParticleHelper = /** @class */ (function () {
142
142
  * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)
143
143
  * @returns a promise that will resolve to the new particle system
144
144
  */
145
- ParticleHelper.CreateFromSnippetAsync = function (snippetId, scene, gpu, rootUrl, capacity) {
145
+ ParticleHelper.ParseFromSnippetAsync = function (snippetId, scene, gpu, rootUrl, capacity) {
146
146
  var _this = this;
147
147
  if (gpu === void 0) { gpu = false; }
148
148
  if (rootUrl === void 0) { rootUrl = ""; }
@@ -183,6 +183,17 @@ var ParticleHelper = /** @class */ (function () {
183
183
  ParticleHelper.BaseAssetsUrl = ParticleSystemSet.BaseAssetsUrl;
184
184
  /** Define the Url to load snippets */
185
185
  ParticleHelper.SnippetUrl = `https://snippet.babylonjs.com`;
186
+ /**
187
+ * Creates a particle system from a snippet saved by the particle system editor
188
+ * @deprecated Please use ParseFromSnippetAsync instead
189
+ * @param snippetId defines the snippet to load (can be set to _BLANK to create a default one)
190
+ * @param scene defines the hosting scene
191
+ * @param gpu If the system will use gpu
192
+ * @param rootUrl defines the root URL to use to load textures and relative dependencies
193
+ * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)
194
+ * @returns a promise that will resolve to the new particle system
195
+ */
196
+ ParticleHelper.CreateFromSnippetAsync = ParticleHelper.ParseFromSnippetAsync;
186
197
  return ParticleHelper;
187
198
  }());
188
199
  export { ParticleHelper };
@@ -1 +1 @@
1
- {"version":3,"file":"particleHelper.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Particles/particleHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport type { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { IParticleSystem } from \"./IParticleSystem\";\r\nimport { GPUParticleSystem } from \"./gpuParticleSystem\";\r\nimport { ParticleSystemSet } from \"./particleSystemSet\";\r\nimport { ParticleSystem } from \"./particleSystem\";\r\nimport { WebRequest } from \"../Misc/webRequest\";\r\nimport { Constants } from \"../Engines/constants\";\r\n/**\r\n * This class is made for on one-liner static method to help creating particle system set.\r\n */\r\nexport class ParticleHelper {\r\n /**\r\n * Gets or sets base Assets URL\r\n */\r\n public static BaseAssetsUrl = ParticleSystemSet.BaseAssetsUrl;\r\n\r\n /** Define the Url to load snippets */\r\n public static SnippetUrl = Constants.SnippetUrl;\r\n\r\n /**\r\n * Create a default particle system that you can tweak\r\n * @param emitter defines the emitter to use\r\n * @param capacity defines the system capacity (default is 500 particles)\r\n * @param scene defines the hosting scene\r\n * @param useGPU defines if a GPUParticleSystem must be created (default is false)\r\n * @returns the new Particle system\r\n */\r\n public static CreateDefault(emitter: Nullable<AbstractMesh | Vector3>, capacity = 500, scene?: Scene, useGPU = false): IParticleSystem {\r\n let system: IParticleSystem;\r\n\r\n if (useGPU) {\r\n system = new GPUParticleSystem(\"default system\", { capacity: capacity }, scene!);\r\n } else {\r\n system = new ParticleSystem(\"default system\", capacity, scene!);\r\n }\r\n\r\n system.emitter = emitter;\r\n system.particleTexture = new Texture(\"https://assets.babylonjs.com/textures/flare.png\", system.getScene());\r\n system.createConeEmitter(0.1, Math.PI / 4);\r\n\r\n // Particle color\r\n system.color1 = new Color4(1.0, 1.0, 1.0, 1.0);\r\n system.color2 = new Color4(1.0, 1.0, 1.0, 1.0);\r\n system.colorDead = new Color4(1.0, 1.0, 1.0, 0.0);\r\n\r\n // Particle Size\r\n system.minSize = 0.1;\r\n system.maxSize = 0.1;\r\n\r\n // Emission speed\r\n system.minEmitPower = 2;\r\n system.maxEmitPower = 2;\r\n\r\n // Update speed\r\n system.updateSpeed = 1 / 60;\r\n\r\n system.emitRate = 30;\r\n\r\n return system;\r\n }\r\n\r\n /**\r\n * This is the main static method (one-liner) of this helper to create different particle systems\r\n * @param type This string represents the type to the particle system to create\r\n * @param scene The scene where the particle system should live\r\n * @param gpu If the system will use gpu\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns the ParticleSystemSet created\r\n */\r\n public static CreateAsync(type: string, scene: Nullable<Scene>, gpu: boolean = false, capacity?: number): Promise<ParticleSystemSet> {\r\n if (!scene) {\r\n scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n const token = {};\r\n\r\n scene!.addPendingData(token);\r\n\r\n return new Promise((resolve, reject) => {\r\n if (gpu && !GPUParticleSystem.IsSupported) {\r\n scene!.removePendingData(token);\r\n return reject(\"Particle system with GPU is not supported.\");\r\n }\r\n\r\n Tools.LoadFile(\r\n `${ParticleHelper.BaseAssetsUrl}/systems/${type}.json`,\r\n (data) => {\r\n scene!.removePendingData(token);\r\n const newData = JSON.parse(data.toString());\r\n return resolve(ParticleSystemSet.Parse(newData, scene!, gpu, capacity));\r\n },\r\n undefined,\r\n undefined,\r\n undefined,\r\n () => {\r\n scene!.removePendingData(token);\r\n return reject(`An error occurred with the creation of your particle system. Check if your type '${type}' exists.`);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Static function used to export a particle system to a ParticleSystemSet variable.\r\n * Please note that the emitter shape is not exported\r\n * @param systems defines the particle systems to export\r\n * @returns the created particle system set\r\n */\r\n public static ExportSet(systems: IParticleSystem[]): ParticleSystemSet {\r\n const set = new ParticleSystemSet();\r\n\r\n for (const system of systems) {\r\n set.systems.push(system);\r\n }\r\n\r\n return set;\r\n }\r\n\r\n /**\r\n * Creates a particle system from a snippet saved in a remote file\r\n * @param name defines the name of the particle system to create (can be null or empty to use the one from the json data)\r\n * @param url defines the url to load from\r\n * @param scene defines the hosting scene\r\n * @param gpu If the system will use gpu\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns a promise that will resolve to the new particle system\r\n */\r\n public static ParseFromFileAsync(name: Nullable<string>, url: string, scene: Scene, gpu: boolean = false, rootUrl: string = \"\", capacity?: number): Promise<IParticleSystem> {\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const serializationObject = JSON.parse(request.responseText);\r\n let output: IParticleSystem;\r\n\r\n if (gpu) {\r\n output = GPUParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n } else {\r\n output = ParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n }\r\n\r\n if (name) {\r\n output.name = name;\r\n }\r\n\r\n resolve(output);\r\n } else {\r\n reject(\"Unable to load the particle system\");\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", url);\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a particle system from a snippet saved by the particle system editor\r\n * @param snippetId defines the snippet to load (can be set to _BLANK to create a default one)\r\n * @param scene defines the hosting scene\r\n * @param gpu If the system will use gpu\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns a promise that will resolve to the new particle system\r\n */\r\n public static CreateFromSnippetAsync(snippetId: string, scene: Scene, gpu: boolean = false, rootUrl: string = \"\", capacity?: number): Promise<IParticleSystem> {\r\n if (snippetId === \"_BLANK\") {\r\n const system = this.CreateDefault(null);\r\n system.start();\r\n return Promise.resolve(system);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\r\n const serializationObject = JSON.parse(snippet.particleSystem);\r\n let output: IParticleSystem;\r\n\r\n if (gpu) {\r\n output = GPUParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n } else {\r\n output = ParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n }\r\n output.snippetId = snippetId;\r\n\r\n resolve(output);\r\n } else {\r\n reject(\"Unable to load the snippet \" + snippetId);\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\r\n request.send();\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"particleHelper.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Particles/particleHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport type { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { IParticleSystem } from \"./IParticleSystem\";\r\nimport { GPUParticleSystem } from \"./gpuParticleSystem\";\r\nimport { ParticleSystemSet } from \"./particleSystemSet\";\r\nimport { ParticleSystem } from \"./particleSystem\";\r\nimport { WebRequest } from \"../Misc/webRequest\";\r\nimport { Constants } from \"../Engines/constants\";\r\n/**\r\n * This class is made for on one-liner static method to help creating particle system set.\r\n */\r\nexport class ParticleHelper {\r\n /**\r\n * Gets or sets base Assets URL\r\n */\r\n public static BaseAssetsUrl = ParticleSystemSet.BaseAssetsUrl;\r\n\r\n /** Define the Url to load snippets */\r\n public static SnippetUrl = Constants.SnippetUrl;\r\n\r\n /**\r\n * Create a default particle system that you can tweak\r\n * @param emitter defines the emitter to use\r\n * @param capacity defines the system capacity (default is 500 particles)\r\n * @param scene defines the hosting scene\r\n * @param useGPU defines if a GPUParticleSystem must be created (default is false)\r\n * @returns the new Particle system\r\n */\r\n public static CreateDefault(emitter: Nullable<AbstractMesh | Vector3>, capacity = 500, scene?: Scene, useGPU = false): IParticleSystem {\r\n let system: IParticleSystem;\r\n\r\n if (useGPU) {\r\n system = new GPUParticleSystem(\"default system\", { capacity: capacity }, scene!);\r\n } else {\r\n system = new ParticleSystem(\"default system\", capacity, scene!);\r\n }\r\n\r\n system.emitter = emitter;\r\n system.particleTexture = new Texture(\"https://assets.babylonjs.com/textures/flare.png\", system.getScene());\r\n system.createConeEmitter(0.1, Math.PI / 4);\r\n\r\n // Particle color\r\n system.color1 = new Color4(1.0, 1.0, 1.0, 1.0);\r\n system.color2 = new Color4(1.0, 1.0, 1.0, 1.0);\r\n system.colorDead = new Color4(1.0, 1.0, 1.0, 0.0);\r\n\r\n // Particle Size\r\n system.minSize = 0.1;\r\n system.maxSize = 0.1;\r\n\r\n // Emission speed\r\n system.minEmitPower = 2;\r\n system.maxEmitPower = 2;\r\n\r\n // Update speed\r\n system.updateSpeed = 1 / 60;\r\n\r\n system.emitRate = 30;\r\n\r\n return system;\r\n }\r\n\r\n /**\r\n * This is the main static method (one-liner) of this helper to create different particle systems\r\n * @param type This string represents the type to the particle system to create\r\n * @param scene The scene where the particle system should live\r\n * @param gpu If the system will use gpu\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns the ParticleSystemSet created\r\n */\r\n public static CreateAsync(type: string, scene: Nullable<Scene>, gpu: boolean = false, capacity?: number): Promise<ParticleSystemSet> {\r\n if (!scene) {\r\n scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n const token = {};\r\n\r\n scene!.addPendingData(token);\r\n\r\n return new Promise((resolve, reject) => {\r\n if (gpu && !GPUParticleSystem.IsSupported) {\r\n scene!.removePendingData(token);\r\n return reject(\"Particle system with GPU is not supported.\");\r\n }\r\n\r\n Tools.LoadFile(\r\n `${ParticleHelper.BaseAssetsUrl}/systems/${type}.json`,\r\n (data) => {\r\n scene!.removePendingData(token);\r\n const newData = JSON.parse(data.toString());\r\n return resolve(ParticleSystemSet.Parse(newData, scene!, gpu, capacity));\r\n },\r\n undefined,\r\n undefined,\r\n undefined,\r\n () => {\r\n scene!.removePendingData(token);\r\n return reject(`An error occurred with the creation of your particle system. Check if your type '${type}' exists.`);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Static function used to export a particle system to a ParticleSystemSet variable.\r\n * Please note that the emitter shape is not exported\r\n * @param systems defines the particle systems to export\r\n * @returns the created particle system set\r\n */\r\n public static ExportSet(systems: IParticleSystem[]): ParticleSystemSet {\r\n const set = new ParticleSystemSet();\r\n\r\n for (const system of systems) {\r\n set.systems.push(system);\r\n }\r\n\r\n return set;\r\n }\r\n\r\n /**\r\n * Creates a particle system from a snippet saved in a remote file\r\n * @param name defines the name of the particle system to create (can be null or empty to use the one from the json data)\r\n * @param url defines the url to load from\r\n * @param scene defines the hosting scene\r\n * @param gpu If the system will use gpu\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns a promise that will resolve to the new particle system\r\n */\r\n public static ParseFromFileAsync(name: Nullable<string>, url: string, scene: Scene, gpu: boolean = false, rootUrl: string = \"\", capacity?: number): Promise<IParticleSystem> {\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const serializationObject = JSON.parse(request.responseText);\r\n let output: IParticleSystem;\r\n\r\n if (gpu) {\r\n output = GPUParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n } else {\r\n output = ParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n }\r\n\r\n if (name) {\r\n output.name = name;\r\n }\r\n\r\n resolve(output);\r\n } else {\r\n reject(\"Unable to load the particle system\");\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", url);\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a particle system from a snippet saved by the particle system editor\r\n * @param snippetId defines the snippet to load (can be set to _BLANK to create a default one)\r\n * @param scene defines the hosting scene\r\n * @param gpu If the system will use gpu\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns a promise that will resolve to the new particle system\r\n */\r\n public static ParseFromSnippetAsync(snippetId: string, scene: Scene, gpu: boolean = false, rootUrl: string = \"\", capacity?: number): Promise<IParticleSystem> {\r\n if (snippetId === \"_BLANK\") {\r\n const system = this.CreateDefault(null);\r\n system.start();\r\n return Promise.resolve(system);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\r\n const serializationObject = JSON.parse(snippet.particleSystem);\r\n let output: IParticleSystem;\r\n\r\n if (gpu) {\r\n output = GPUParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n } else {\r\n output = ParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n }\r\n output.snippetId = snippetId;\r\n\r\n resolve(output);\r\n } else {\r\n reject(\"Unable to load the snippet \" + snippetId);\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a particle system from a snippet saved by the particle system editor\r\n * @deprecated Please use ParseFromSnippetAsync instead\r\n * @param snippetId defines the snippet to load (can be set to _BLANK to create a default one)\r\n * @param scene defines the hosting scene\r\n * @param gpu If the system will use gpu\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns a promise that will resolve to the new particle system\r\n */\r\n public static CreateFromSnippetAsync = ParticleHelper.ParseFromSnippetAsync;\r\n}\r\n"]}
@@ -1106,8 +1106,8 @@ var ParticleSystem = /** @class */ (function (_super) {
1106
1106
  * Remove all active particles
1107
1107
  */
1108
1108
  ParticleSystem.prototype.reset = function () {
1109
- this._stockParticles = [];
1110
- this._particles = [];
1109
+ this._stockParticles.length = 0;
1110
+ this._particles.length = 0;
1111
1111
  };
1112
1112
  /**
1113
1113
  * @param index