@babylonjs/core 5.0.0-alpha.57 → 5.0.0-alpha.60

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 (273) hide show
  1. package/Buffers/buffer.js +3 -2
  2. package/Buffers/buffer.js.map +1 -1
  3. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
  4. package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
  5. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  6. package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
  7. package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
  8. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  9. package/Cameras/camera.d.ts +4 -0
  10. package/Cameras/camera.js +2 -0
  11. package/Cameras/camera.js.map +1 -1
  12. package/Culling/boundingBox.d.ts +7 -1
  13. package/Culling/boundingBox.js +4 -0
  14. package/Culling/boundingBox.js.map +1 -1
  15. package/DeviceInput/Helpers/eventFactory.js +1 -2
  16. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  17. package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
  18. package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
  19. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
  20. package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
  21. package/DeviceInput/InputDevices/deviceEnums.js +0 -2
  22. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  23. package/Engines/Extensions/engine.alpha.js +6 -6
  24. package/Engines/Extensions/engine.alpha.js.map +1 -1
  25. package/Engines/Extensions/engine.renderTarget.js +1 -1
  26. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  27. package/Engines/IDrawContext.d.ts +4 -0
  28. package/Engines/IDrawContext.js.map +1 -1
  29. package/Engines/IMaterialContext.d.ts +1 -0
  30. package/Engines/IMaterialContext.js.map +1 -1
  31. package/Engines/WebGPU/Extensions/engine.alpha.js +20 -31
  32. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  33. package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -38
  34. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  35. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
  36. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  37. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
  38. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
  39. package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
  40. package/Engines/WebGPU/webgpuBufferManager.js +3 -0
  41. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  42. package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
  43. package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
  44. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  45. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -18
  46. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  47. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
  48. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
  49. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  50. package/Engines/WebGPU/webgpuDrawContext.d.ts +24 -2
  51. package/Engines/WebGPU/webgpuDrawContext.js +75 -1
  52. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  53. package/Engines/WebGPU/webgpuMaterialContext.d.ts +1 -6
  54. package/Engines/WebGPU/webgpuMaterialContext.js +11 -8
  55. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  56. package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
  57. package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
  58. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  59. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
  60. package/Engines/WebGPU/webgpuTextureHelper.js +67 -1
  61. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  62. package/Engines/constants.d.ts +40 -7
  63. package/Engines/constants.js +40 -7
  64. package/Engines/constants.js.map +1 -1
  65. package/Engines/engine.d.ts +37 -2
  66. package/Engines/engine.js +68 -0
  67. package/Engines/engine.js.map +1 -1
  68. package/Engines/engineFeatures.d.ts +2 -0
  69. package/Engines/engineFeatures.js.map +1 -1
  70. package/Engines/nativeEngine.js +19 -13
  71. package/Engines/nativeEngine.js.map +1 -1
  72. package/Engines/nullEngine.js +1 -0
  73. package/Engines/nullEngine.js.map +1 -1
  74. package/Engines/thinEngine.d.ts +8 -2
  75. package/Engines/thinEngine.js +10 -5
  76. package/Engines/thinEngine.js.map +1 -1
  77. package/Engines/webgpuEngine.d.ts +28 -7
  78. package/Engines/webgpuEngine.js +177 -58
  79. package/Engines/webgpuEngine.js.map +1 -1
  80. package/Inputs/scene.inputManager.js +2 -3
  81. package/Inputs/scene.inputManager.js.map +1 -1
  82. package/Layers/effectLayer.d.ts +0 -2
  83. package/Layers/effectLayer.js +12 -11
  84. package/Layers/effectLayer.js.map +1 -1
  85. package/Layers/effectLayerSceneComponent.js +5 -0
  86. package/Layers/effectLayerSceneComponent.js.map +1 -1
  87. package/Layers/glowLayer.js +2 -0
  88. package/Layers/glowLayer.js.map +1 -1
  89. package/Layers/highlightLayer.js +2 -0
  90. package/Layers/highlightLayer.js.map +1 -1
  91. package/LensFlares/lensFlare.d.ts +3 -0
  92. package/LensFlares/lensFlare.js +5 -0
  93. package/LensFlares/lensFlare.js.map +1 -1
  94. package/LensFlares/lensFlareSystem.d.ts +2 -1
  95. package/LensFlares/lensFlareSystem.js +15 -12
  96. package/LensFlares/lensFlareSystem.js.map +1 -1
  97. package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
  98. package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
  99. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  100. package/Lights/Shadows/shadowGenerator.d.ts +0 -3
  101. package/Lights/Shadows/shadowGenerator.js +8 -14
  102. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  103. package/Lights/light.js +3 -0
  104. package/Lights/light.js.map +1 -1
  105. package/Loading/Plugins/babylonFileLoader.js +3 -0
  106. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  107. package/Materials/Background/backgroundMaterial.js +8 -11
  108. package/Materials/Background/backgroundMaterial.js.map +1 -1
  109. package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
  110. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  111. package/Materials/Node/Blocks/cloudBlock.d.ts +4 -0
  112. package/Materials/Node/Blocks/cloudBlock.js +27 -8
  113. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  114. package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
  115. package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
  116. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  117. package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
  118. package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
  119. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  120. package/Materials/Node/nodeMaterial.js +4 -4
  121. package/Materials/Node/nodeMaterial.js.map +1 -1
  122. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  123. package/Materials/PBR/pbrBaseMaterial.js +10 -5
  124. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  125. package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
  126. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  127. package/Materials/PBR/pbrSheenConfiguration.js +1 -1
  128. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  129. package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
  130. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  131. package/Materials/Textures/baseTexture.d.ts +2 -0
  132. package/Materials/Textures/baseTexture.js +2 -0
  133. package/Materials/Textures/baseTexture.js.map +1 -1
  134. package/Materials/Textures/renderTargetTexture.d.ts +27 -0
  135. package/Materials/Textures/renderTargetTexture.js +127 -14
  136. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  137. package/Materials/Textures/texture.js +11 -4
  138. package/Materials/Textures/texture.js.map +1 -1
  139. package/Materials/drawWrapper.d.ts +2 -1
  140. package/Materials/drawWrapper.js +10 -1
  141. package/Materials/drawWrapper.js.map +1 -1
  142. package/Materials/material.d.ts +3 -1
  143. package/Materials/material.detailMapConfiguration.d.ts +1 -1
  144. package/Materials/material.detailMapConfiguration.js +2 -2
  145. package/Materials/material.detailMapConfiguration.js.map +1 -1
  146. package/Materials/material.js +18 -9
  147. package/Materials/material.js.map +1 -1
  148. package/Materials/materialHelper.js +3 -1
  149. package/Materials/materialHelper.js.map +1 -1
  150. package/Materials/pushMaterial.js +1 -1
  151. package/Materials/pushMaterial.js.map +1 -1
  152. package/Materials/shaderMaterial.d.ts +0 -1
  153. package/Materials/shaderMaterial.js +3 -4
  154. package/Materials/shaderMaterial.js.map +1 -1
  155. package/Materials/shadowDepthWrapper.d.ts +4 -4
  156. package/Materials/shadowDepthWrapper.js +16 -15
  157. package/Materials/shadowDepthWrapper.js.map +1 -1
  158. package/Materials/standardMaterial.d.ts +1 -0
  159. package/Materials/standardMaterial.js +10 -5
  160. package/Materials/standardMaterial.js.map +1 -1
  161. package/Materials/uniformBuffer.d.ts +10 -2
  162. package/Materials/uniformBuffer.js +17 -11
  163. package/Materials/uniformBuffer.js.map +1 -1
  164. package/Meshes/abstractMesh.d.ts +13 -0
  165. package/Meshes/abstractMesh.js +22 -2
  166. package/Meshes/abstractMesh.js.map +1 -1
  167. package/Meshes/geometry.d.ts +7 -0
  168. package/Meshes/geometry.js +16 -0
  169. package/Meshes/geometry.js.map +1 -1
  170. package/Meshes/linesMesh.js +1 -1
  171. package/Meshes/linesMesh.js.map +1 -1
  172. package/Meshes/mesh.js +15 -0
  173. package/Meshes/mesh.js.map +1 -1
  174. package/Meshes/subMesh.d.ts +10 -9
  175. package/Meshes/subMesh.js +44 -43
  176. package/Meshes/subMesh.js.map +1 -1
  177. package/Misc/basis.d.ts +3 -2
  178. package/Misc/basis.js +16 -15
  179. package/Misc/basis.js.map +1 -1
  180. package/Misc/environmentTextureTools.js +1 -0
  181. package/Misc/environmentTextureTools.js.map +1 -1
  182. package/Misc/rgbdTextureTools.js +1 -0
  183. package/Misc/rgbdTextureTools.js.map +1 -1
  184. package/Misc/sceneSerializer.js +17 -17
  185. package/Misc/sceneSerializer.js.map +1 -1
  186. package/Misc/textureTools.js +2 -0
  187. package/Misc/textureTools.js.map +1 -1
  188. package/Particles/gpuParticleSystem.d.ts +5 -1
  189. package/Particles/gpuParticleSystem.js +31 -5
  190. package/Particles/gpuParticleSystem.js.map +1 -1
  191. package/Particles/particleSystem.d.ts +5 -1
  192. package/Particles/particleSystem.js +35 -5
  193. package/Particles/particleSystem.js.map +1 -1
  194. package/Physics/Plugins/ammoJSPlugin.d.ts +1 -0
  195. package/Physics/Plugins/ammoJSPlugin.js +10 -0
  196. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  197. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
  198. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  199. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
  200. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  201. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  202. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  203. package/PostProcesses/bloomMergePostProcess.js +1 -0
  204. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  205. package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
  206. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  207. package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
  208. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  209. package/PostProcesses/extractHighlightsPostProcess.js +1 -0
  210. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  211. package/PostProcesses/postProcess.d.ts +6 -0
  212. package/PostProcesses/postProcess.js +9 -1
  213. package/PostProcesses/postProcess.js.map +1 -1
  214. package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -1
  215. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  216. package/PostProcesses/tonemapPostProcess.d.ts +2 -1
  217. package/PostProcesses/tonemapPostProcess.js +3 -2
  218. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  219. package/Rendering/boundingBoxRenderer.d.ts +5 -3
  220. package/Rendering/boundingBoxRenderer.js +46 -14
  221. package/Rendering/boundingBoxRenderer.js.map +1 -1
  222. package/Rendering/depthPeelingRenderer.d.ts +20 -1
  223. package/Rendering/depthPeelingRenderer.js +125 -32
  224. package/Rendering/depthPeelingRenderer.js.map +1 -1
  225. package/Rendering/depthPeelingSceneComponent.d.ts +2 -0
  226. package/Rendering/depthPeelingSceneComponent.js +16 -0
  227. package/Rendering/depthPeelingSceneComponent.js.map +1 -1
  228. package/Rendering/depthRenderer.d.ts +9 -2
  229. package/Rendering/depthRenderer.js +77 -43
  230. package/Rendering/depthRenderer.js.map +1 -1
  231. package/Rendering/depthRendererSceneComponent.js +0 -1
  232. package/Rendering/depthRendererSceneComponent.js.map +1 -1
  233. package/Rendering/edgesRenderer.d.ts +2 -0
  234. package/Rendering/edgesRenderer.js +11 -0
  235. package/Rendering/edgesRenderer.js.map +1 -1
  236. package/Rendering/geometryBufferRenderer.js +4 -4
  237. package/Rendering/geometryBufferRenderer.js.map +1 -1
  238. package/Rendering/outlineRenderer.d.ts +5 -4
  239. package/Rendering/outlineRenderer.js +24 -19
  240. package/Rendering/outlineRenderer.js.map +1 -1
  241. package/Rendering/prePassRenderer.js +3 -2
  242. package/Rendering/prePassRenderer.js.map +1 -1
  243. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
  244. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
  245. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
  246. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
  247. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
  248. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
  249. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
  250. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
  251. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
  252. package/Shaders/ShadersInclude/oitFragment.js +1 -1
  253. package/Shaders/ShadersInclude/oitFragment.js.map +1 -1
  254. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
  255. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  256. package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
  257. package/Shaders/boundingBoxRenderer.fragment.js +9 -0
  258. package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
  259. package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
  260. package/Shaders/boundingBoxRenderer.vertex.js +9 -0
  261. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
  262. package/Sprites/spriteManager.d.ts +3 -1
  263. package/Sprites/spriteManager.js +16 -5
  264. package/Sprites/spriteManager.js.map +1 -1
  265. package/Sprites/spriteRenderer.d.ts +2 -0
  266. package/Sprites/spriteRenderer.js +26 -0
  267. package/Sprites/spriteRenderer.js.map +1 -1
  268. package/XR/features/WebXRWalkingLocomotion.js +28 -13
  269. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  270. package/package.json +16 -1
  271. package/scene.d.ts +18 -4
  272. package/scene.js +100 -41
  273. package/scene.js.map +1 -1
@@ -77,6 +77,8 @@ var BaseTexture = /** @class */ (function (_super) {
77
77
  _this.isRenderTarget = false;
78
78
  /** @hidden */
79
79
  _this._prefiltered = false;
80
+ /** @hidden */
81
+ _this._forceSerialize = false;
80
82
  /**
81
83
  * Define the list of animation attached to the texture.
82
84
  */
@@ -1 +1 @@
1
- {"version":3,"file":"baseTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/Textures/baseTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize, SerializationHelper, serializeAsTexture } from \"../../Misc/decorators\";\r\nimport { Observer, Observable } from \"../../Misc/observable\";\r\nimport { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport { Matrix } from \"../../Maths/math.vector\";\r\nimport { EngineStore } from \"../../Engines/engineStore\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\n\r\nimport { IAnimatable } from '../../Animations/animatable.interface';\r\nimport { RandomGUID } from '../../Misc/guid';\r\n\r\nimport \"../../Misc/fileTools\";\r\nimport { ThinEngine } from '../../Engines/thinEngine';\r\nimport { ThinTexture } from './thinTexture';\r\nimport { AbstractScene } from \"../../abstractScene\";\r\n\r\ndeclare type Animation = import(\"../../Animations/animation\").Animation;\r\n\r\n/**\r\n * Base class of all the textures in babylon.\r\n * It groups all the common properties the materials, post process, lights... might need\r\n * in order to make a correct use of the texture.\r\n */\r\nexport class BaseTexture extends ThinTexture implements IAnimatable {\r\n /**\r\n * Default anisotropic filtering level for the application.\r\n * It is set to 4 as a good tradeoff between perf and quality.\r\n */\r\n public static DEFAULT_ANISOTROPIC_FILTERING_LEVEL = 4;\r\n\r\n /**\r\n * Gets or sets the unique id of the texture\r\n */\r\n @serialize()\r\n public uniqueId: number;\r\n\r\n /**\r\n * Define the name of the texture.\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * Gets or sets an object used to store user defined information.\r\n */\r\n @serialize()\r\n public metadata: any = null;\r\n\r\n /**\r\n * For internal use only. Please do not use.\r\n */\r\n public reservedDataStore: any = null;\r\n\r\n @serialize(\"hasAlpha\")\r\n private _hasAlpha = false;\r\n /**\r\n * Define if the texture is having a usable alpha value (can be use for transparency or glossiness for instance).\r\n */\r\n public set hasAlpha(value: boolean) {\r\n if (this._hasAlpha === value) {\r\n return;\r\n }\r\n this._hasAlpha = value;\r\n if (this._scene) {\r\n this._scene.markAllMaterialsAsDirty(1 | 16);\r\n }\r\n }\r\n public get hasAlpha(): boolean {\r\n return this._hasAlpha;\r\n }\r\n\r\n /**\r\n * Defines if the alpha value should be determined via the rgb values.\r\n * If true the luminance of the pixel might be used to find the corresponding alpha value.\r\n */\r\n @serialize()\r\n public getAlphaFromRGB = false;\r\n\r\n /**\r\n * Intensity or strength of the texture.\r\n * It is commonly used by materials to fine tune the intensity of the texture\r\n */\r\n @serialize()\r\n public level = 1;\r\n\r\n /**\r\n * Define the UV channel to use starting from 0 and defaulting to 0.\r\n * This is part of the texture as textures usually maps to one uv set.\r\n */\r\n @serialize()\r\n public coordinatesIndex = 0;\r\n\r\n @serialize(\"coordinatesMode\")\r\n protected _coordinatesMode = 0;\r\n\r\n /**\r\n * How a texture is mapped.\r\n *\r\n * | Value | Type | Description |\r\n * | ----- | ----------------------------------- | ----------- |\r\n * | 0 | EXPLICIT_MODE | |\r\n * | 1 | SPHERICAL_MODE | |\r\n * | 2 | PLANAR_MODE | |\r\n * | 3 | CUBIC_MODE | |\r\n * | 4 | PROJECTION_MODE | |\r\n * | 5 | SKYBOX_MODE | |\r\n * | 6 | INVCUBIC_MODE | |\r\n * | 7 | EQUIRECTANGULAR_MODE | |\r\n * | 8 | FIXED_EQUIRECTANGULAR_MODE | |\r\n * | 9 | FIXED_EQUIRECTANGULAR_MIRRORED_MODE | |\r\n */\r\n public set coordinatesMode(value: number) {\r\n if (this._coordinatesMode === value) {\r\n return;\r\n }\r\n this._coordinatesMode = value;\r\n if (this._scene) {\r\n this._scene.markAllMaterialsAsDirty(1);\r\n }\r\n }\r\n public get coordinatesMode(): number {\r\n return this._coordinatesMode;\r\n }\r\n\r\n /**\r\n * | Value | Type | Description |\r\n * | ----- | ------------------ | ----------- |\r\n * | 0 | CLAMP_ADDRESSMODE | |\r\n * | 1 | WRAP_ADDRESSMODE | |\r\n * | 2 | MIRROR_ADDRESSMODE | |\r\n */\r\n @serialize()\r\n public get wrapU() {\r\n return this._wrapU;\r\n }\r\n public set wrapU(value: number) {\r\n this._wrapU = value;\r\n }\r\n\r\n /**\r\n * | Value | Type | Description |\r\n * | ----- | ------------------ | ----------- |\r\n * | 0 | CLAMP_ADDRESSMODE | |\r\n * | 1 | WRAP_ADDRESSMODE | |\r\n * | 2 | MIRROR_ADDRESSMODE | |\r\n */\r\n @serialize()\r\n public get wrapV() {\r\n return this._wrapV;\r\n }\r\n public set wrapV(value: number) {\r\n this._wrapV = value;\r\n }\r\n\r\n /**\r\n * | Value | Type | Description |\r\n * | ----- | ------------------ | ----------- |\r\n * | 0 | CLAMP_ADDRESSMODE | |\r\n * | 1 | WRAP_ADDRESSMODE | |\r\n * | 2 | MIRROR_ADDRESSMODE | |\r\n */\r\n @serialize()\r\n public wrapR = 1;\r\n\r\n /**\r\n * With compliant hardware and browser (supporting anisotropic filtering)\r\n * this defines the level of anisotropic filtering in the texture.\r\n * The higher the better but the slower. This defaults to 4 as it seems to be the best tradeoff.\r\n */\r\n @serialize()\r\n public anisotropicFilteringLevel = BaseTexture.DEFAULT_ANISOTROPIC_FILTERING_LEVEL;\r\n\r\n private _isCube = false;\r\n /**\r\n * Define if the texture is a cube texture or if false a 2d texture.\r\n */\r\n @serialize()\r\n public get isCube(): boolean {\r\n if (!this._texture) {\r\n return this._isCube;\r\n }\r\n\r\n return this._texture.isCube;\r\n }\r\n\r\n public set isCube(value: boolean) {\r\n if (!this._texture) {\r\n this._isCube = value;\r\n } else {\r\n this._texture.isCube = value;\r\n }\r\n }\r\n\r\n /**\r\n * Define if the texture is a 3d texture (webgl 2) or if false a 2d texture.\r\n */\r\n @serialize()\r\n public get is3D(): boolean {\r\n if (!this._texture) {\r\n return false;\r\n }\r\n\r\n return this._texture.is3D;\r\n }\r\n\r\n public set is3D(value: boolean) {\r\n if (!this._texture) {\r\n return;\r\n }\r\n\r\n this._texture.is3D = value;\r\n }\r\n\r\n /**\r\n * Define if the texture is a 2d array texture (webgl 2) or if false a 2d texture.\r\n */\r\n @serialize()\r\n public get is2DArray(): boolean {\r\n if (!this._texture) {\r\n return false;\r\n }\r\n\r\n return this._texture.is2DArray;\r\n }\r\n\r\n public set is2DArray(value: boolean) {\r\n if (!this._texture) {\r\n return;\r\n }\r\n\r\n this._texture.is2DArray = value;\r\n }\r\n\r\n private _gammaSpace = true;\r\n /**\r\n * Define if the texture contains data in gamma space (most of the png/jpg aside bump).\r\n * HDR texture are usually stored in linear space.\r\n * This only impacts the PBR and Background materials\r\n */\r\n @serialize()\r\n public get gammaSpace(): boolean {\r\n if (!this._texture) {\r\n return this._gammaSpace;\r\n } else {\r\n if (this._texture._gammaSpace === null) {\r\n this._texture._gammaSpace = this._gammaSpace;\r\n }\r\n }\r\n\r\n return this._texture._gammaSpace && !this._texture._useSRGBBuffer;\r\n }\r\n\r\n public set gammaSpace(gamma: boolean) {\r\n if (!this._texture) {\r\n if (this._gammaSpace === gamma) {\r\n return;\r\n }\r\n\r\n this._gammaSpace = gamma;\r\n } else {\r\n if (this._texture._gammaSpace === gamma) {\r\n return;\r\n }\r\n this._texture._gammaSpace = gamma;\r\n }\r\n\r\n this._markAllSubMeshesAsTexturesDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets whether or not the texture contains RGBD data.\r\n */\r\n public get isRGBD(): boolean {\r\n return this._texture != null && this._texture._isRGBD;\r\n }\r\n public set isRGBD(value: boolean) {\r\n if (this._texture) { this._texture._isRGBD = value; }\r\n }\r\n\r\n /**\r\n * Is Z inverted in the texture (useful in a cube texture).\r\n */\r\n @serialize()\r\n public invertZ = false;\r\n\r\n /**\r\n * Are mip maps generated for this texture or not.\r\n */\r\n public get noMipmap(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * @hidden\r\n */\r\n @serialize()\r\n public lodLevelInAlpha = false;\r\n\r\n /**\r\n * With prefiltered texture, defined the offset used during the prefiltering steps.\r\n */\r\n @serialize()\r\n public get lodGenerationOffset(): number {\r\n if (this._texture) { return this._texture._lodGenerationOffset; }\r\n\r\n return 0.0;\r\n }\r\n public set lodGenerationOffset(value: number) {\r\n if (this._texture) { this._texture._lodGenerationOffset = value; }\r\n }\r\n\r\n /**\r\n * With prefiltered texture, defined the scale used during the prefiltering steps.\r\n */\r\n @serialize()\r\n public get lodGenerationScale(): number {\r\n if (this._texture) { return this._texture._lodGenerationScale; }\r\n\r\n return 0.0;\r\n }\r\n public set lodGenerationScale(value: number) {\r\n if (this._texture) { this._texture._lodGenerationScale = value; }\r\n }\r\n\r\n /**\r\n * With prefiltered texture, defined if the specular generation is based on a linear ramp.\r\n * By default we are using a log2 of the linear roughness helping to keep a better resolution for\r\n * average roughness values.\r\n */\r\n @serialize()\r\n public get linearSpecularLOD(): boolean {\r\n if (this._texture) { return this._texture._linearSpecularLOD; }\r\n\r\n return false;\r\n }\r\n public set linearSpecularLOD(value: boolean) {\r\n if (this._texture) { this._texture._linearSpecularLOD = value; }\r\n }\r\n\r\n /**\r\n * In case a better definition than spherical harmonics is required for the diffuse part of the environment.\r\n * You can set the irradiance texture to rely on a texture instead of the spherical approach.\r\n * This texture need to have the same characteristics than its parent (Cube vs 2d, coordinates mode, Gamma/Linear, RGBD).\r\n */\r\n @serializeAsTexture()\r\n public get irradianceTexture(): Nullable<BaseTexture> {\r\n if (this._texture) { return this._texture._irradianceTexture; }\r\n\r\n return null;\r\n }\r\n public set irradianceTexture(value: Nullable<BaseTexture>) {\r\n if (this._texture) { this._texture._irradianceTexture = value; }\r\n }\r\n\r\n /**\r\n * Define if the texture is a render target.\r\n */\r\n @serialize()\r\n public isRenderTarget = false;\r\n\r\n /**\r\n * Define the unique id of the texture in the scene.\r\n */\r\n public get uid(): string {\r\n if (!this._uid) {\r\n this._uid = RandomGUID();\r\n }\r\n return this._uid;\r\n }\r\n\r\n /** @hidden */\r\n public _prefiltered: boolean = false;\r\n\r\n /**\r\n * Return a string representation of the texture.\r\n * @returns the texture as a string\r\n */\r\n public toString(): string {\r\n return this.name;\r\n }\r\n\r\n /**\r\n * Get the class name of the texture.\r\n * @returns \"BaseTexture\"\r\n */\r\n public getClassName(): string {\r\n return \"BaseTexture\";\r\n }\r\n\r\n /**\r\n * Define the list of animation attached to the texture.\r\n */\r\n public animations = new Array<Animation>();\r\n\r\n /**\r\n * An event triggered when the texture is disposed.\r\n */\r\n public onDisposeObservable = new Observable<BaseTexture>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<BaseTexture>> = null;\r\n /**\r\n * Callback triggered when the texture has been disposed.\r\n * Kept for back compatibility, you can use the onDisposeObservable instead.\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n protected _scene: Nullable<Scene> = null;\r\n\r\n /** @hidden */\r\n private _uid: Nullable<string> = null;\r\n\r\n /**\r\n * Define if the texture is preventing a material to render or not.\r\n * If not and the texture is not ready, the engine will use a default black texture instead.\r\n */\r\n public get isBlocking(): boolean {\r\n return true;\r\n }\r\n\r\n /** @hidden */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n protected _loadingError: boolean = false;\r\n protected _errorObject?: {\r\n message?: string;\r\n exception?: any;\r\n };\r\n\r\n /**\r\n * Was there any loading error?\r\n */\r\n public get loadingError(): boolean {\r\n return this._loadingError;\r\n }\r\n\r\n /**\r\n * If a loading error occurred this object will be populated with information about the error.\r\n */\r\n public get errorObject(): {\r\n message?: string;\r\n exception?: any;\r\n } | undefined {\r\n return this._errorObject;\r\n }\r\n\r\n /**\r\n * Instantiates a new BaseTexture.\r\n * Base class of all the textures in babylon.\r\n * It groups all the common properties the materials, post process, lights... might need\r\n * in order to make a correct use of the texture.\r\n * @param sceneOrEngine Define the scene or engine the texture belongs to\r\n */\r\n constructor(sceneOrEngine: Nullable<Scene | ThinEngine>) {\r\n super(null);\r\n\r\n if (sceneOrEngine) {\r\n if (BaseTexture._isScene(sceneOrEngine)) {\r\n this._scene = sceneOrEngine;\r\n }\r\n else {\r\n this._engine = sceneOrEngine;\r\n }\r\n }\r\n else {\r\n this._scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n if (this._scene) {\r\n this.uniqueId = this._scene.getUniqueId();\r\n this._scene.addTexture(this);\r\n this._engine = this._scene.getEngine();\r\n }\r\n\r\n this._uid = null;\r\n }\r\n\r\n /**\r\n * Get the scene the texture belongs to.\r\n * @returns the scene or null if undefined\r\n */\r\n public getScene(): Nullable<Scene> {\r\n return this._scene;\r\n }\r\n\r\n /** @hidden */\r\n protected _getEngine(): Nullable<ThinEngine> {\r\n return this._engine;\r\n }\r\n\r\n /**\r\n * Checks if the texture has the same transform matrix than another texture\r\n * @param texture texture to check against\r\n * @returns true if the transforms are the same, else false\r\n */\r\n public checkTransformsAreIdentical(texture: Nullable<BaseTexture>): boolean {\r\n return texture !== null;\r\n }\r\n\r\n /**\r\n * Get the texture transform matrix used to offset tile the texture for instance.\r\n * @returns the transformation matrix\r\n */\r\n public getTextureMatrix(): Matrix {\r\n return <Matrix>Matrix.IdentityReadOnly;\r\n }\r\n\r\n /**\r\n * Get the texture reflection matrix used to rotate/transform the reflection.\r\n * @returns the reflection matrix\r\n */\r\n public getReflectionTextureMatrix(): Matrix {\r\n return <Matrix>Matrix.IdentityReadOnly;\r\n }\r\n\r\n /**\r\n * Get if the texture is ready to be consumed (either it is ready or it is not blocking)\r\n * @returns true if ready, not blocking or if there was an error loading the texture\r\n */\r\n public isReadyOrNotBlocking(): boolean {\r\n return !this.isBlocking || this.isReady() || this.loadingError;\r\n }\r\n\r\n /**\r\n * Scales the texture if is `canRescale()`\r\n * @param ratio the resize factor we want to use to rescale\r\n */\r\n public scale(ratio: number): void {\r\n }\r\n\r\n /**\r\n * Get if the texture can rescale.\r\n */\r\n public get canRescale(): boolean {\r\n return false;\r\n }\r\n\r\n /** @hidden */\r\n public _getFromCache(url: Nullable<string>, noMipmap: boolean, sampling?: number, invertY?: boolean, useSRGBBuffer?: boolean): Nullable<InternalTexture> {\r\n const engine = this._getEngine();\r\n if (!engine) {\r\n return null;\r\n }\r\n\r\n const correctedUseSRGBBuffer = engine._getUseSRGBBuffer(!!useSRGBBuffer, noMipmap);\r\n\r\n var texturesCache = engine.getLoadedTexturesCache();\r\n for (var index = 0; index < texturesCache.length; index++) {\r\n var texturesCacheEntry = texturesCache[index];\r\n\r\n if (useSRGBBuffer === undefined || correctedUseSRGBBuffer === texturesCacheEntry._useSRGBBuffer) {\r\n if (invertY === undefined || invertY === texturesCacheEntry.invertY) {\r\n if (texturesCacheEntry.url === url && texturesCacheEntry.generateMipMaps === !noMipmap) {\r\n if (!sampling || sampling === texturesCacheEntry.samplingMode) {\r\n texturesCacheEntry.incrementReferences();\r\n return texturesCacheEntry;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n\r\n }\r\n\r\n /**\r\n * Clones the texture.\r\n * @returns the cloned texture\r\n */\r\n public clone(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n /**\r\n * Get the texture underlying type (INT, FLOAT...)\r\n */\r\n public get textureType(): number {\r\n if (!this._texture) {\r\n return 0;\r\n }\r\n\r\n return (this._texture.type !== undefined) ? this._texture.type : 0;\r\n }\r\n\r\n /**\r\n * Get the texture underlying format (RGB, RGBA...)\r\n */\r\n public get textureFormat(): number {\r\n if (!this._texture) {\r\n return 5;\r\n }\r\n\r\n return (this._texture.format !== undefined) ? this._texture.format : 5;\r\n }\r\n\r\n /**\r\n * Indicates that textures need to be re-calculated for all materials\r\n */\r\n protected _markAllSubMeshesAsTexturesDirty() {\r\n let scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n scene.markAllMaterialsAsDirty(1);\r\n }\r\n\r\n /**\r\n * Reads the pixels stored in the webgl texture and returns them as an ArrayBuffer.\r\n * This will returns an RGBA array buffer containing either in values (0-255) or\r\n * float values (0-1) depending of the underlying buffer type.\r\n * @param faceIndex defines the face of the texture to read (in case of cube texture)\r\n * @param level defines the LOD level of the texture to read (in case of Mip Maps)\r\n * @param buffer defines a user defined buffer to fill with data (can be null)\r\n * @param flushRenderer true to flush the renderer from the pending commands before reading the pixels\r\n * @param noDataConversion false to convert the data to Uint8Array (if texture type is UNSIGNED_BYTE) or to Float32Array (if texture type is anything but UNSIGNED_BYTE). If true, the type of the generated buffer (if buffer==null) will depend on the type of the texture\r\n * @returns The Array buffer promise containing the pixels data.\r\n */\r\n public readPixels(faceIndex = 0, level = 0, buffer: Nullable<ArrayBufferView> = null, flushRenderer = true, noDataConversion = false): Nullable<Promise<ArrayBufferView>> {\r\n if (!this._texture) {\r\n return null;\r\n }\r\n\r\n var size = this.getSize();\r\n var width = size.width;\r\n var height = size.height;\r\n\r\n const engine = this._getEngine();\r\n if (!engine) {\r\n return null;\r\n }\r\n\r\n if (level != 0) {\r\n width = width / Math.pow(2, level);\r\n height = height / Math.pow(2, level);\r\n\r\n width = Math.round(width);\r\n height = Math.round(height);\r\n }\r\n\r\n try {\r\n if (this._texture.isCube) {\r\n return engine._readTexturePixels(this._texture, width, height, faceIndex, level, buffer, flushRenderer, noDataConversion);\r\n }\r\n\r\n return engine._readTexturePixels(this._texture, width, height, -1, level, buffer, flushRenderer, noDataConversion);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _readPixelsSync(faceIndex = 0, level = 0, buffer: Nullable<ArrayBufferView> = null, flushRenderer = true, noDataConversion = false): Nullable<ArrayBufferView> {\r\n if (!this._texture) {\r\n return null;\r\n }\r\n\r\n var size = this.getSize();\r\n var width = size.width;\r\n var height = size.height;\r\n\r\n const engine = this._getEngine();\r\n if (!engine) {\r\n return null;\r\n }\r\n\r\n if (level != 0) {\r\n width = width / Math.pow(2, level);\r\n height = height / Math.pow(2, level);\r\n\r\n width = Math.round(width);\r\n height = Math.round(height);\r\n }\r\n\r\n try {\r\n if (this._texture.isCube) {\r\n return engine._readTexturePixelsSync(this._texture, width, height, faceIndex, level, buffer, flushRenderer, noDataConversion);\r\n }\r\n\r\n return engine._readTexturePixelsSync(this._texture, width, height, -1, level, buffer, flushRenderer, noDataConversion);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public get _lodTextureHigh(): Nullable<BaseTexture> {\r\n if (this._texture) {\r\n return this._texture._lodTextureHigh;\r\n }\r\n return null;\r\n }\r\n\r\n /** @hidden */\r\n public get _lodTextureMid(): Nullable<BaseTexture> {\r\n if (this._texture) {\r\n return this._texture._lodTextureMid;\r\n }\r\n return null;\r\n }\r\n\r\n /** @hidden */\r\n public get _lodTextureLow(): Nullable<BaseTexture> {\r\n if (this._texture) {\r\n return this._texture._lodTextureLow;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Dispose the texture and release its associated resources.\r\n */\r\n public dispose(): void {\r\n if (this._scene) {\r\n // Animations\r\n if (this._scene.stopAnimation) {\r\n this._scene.stopAnimation(this);\r\n }\r\n\r\n // Remove from scene\r\n this._scene._removePendingData(this);\r\n var index = this._scene.textures.indexOf(this);\r\n\r\n if (index >= 0) {\r\n this._scene.textures.splice(index, 1);\r\n }\r\n this._scene.onTextureRemovedObservable.notifyObservers(this);\r\n this._scene = null;\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.textures.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.textures.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n }\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n this.onDisposeObservable.clear();\r\n\r\n this.metadata = null;\r\n\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Serialize the texture into a JSON representation that can be parsed later on.\r\n * @returns the JSON representation of the texture\r\n */\r\n public serialize(): any {\r\n if (!this.name) {\r\n return null;\r\n }\r\n\r\n var serializationObject = SerializationHelper.Serialize(this);\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(this, serializationObject);\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Helper function to be called back once a list of texture contains only ready textures.\r\n * @param textures Define the list of textures to wait for\r\n * @param callback Define the callback triggered once the entire list will be ready\r\n */\r\n public static WhenAllReady(textures: BaseTexture[], callback: () => void): void {\r\n let numRemaining = textures.length;\r\n if (numRemaining === 0) {\r\n callback();\r\n return;\r\n }\r\n\r\n for (var i = 0; i < textures.length; i++) {\r\n var texture = textures[i];\r\n\r\n if (texture.isReady()) {\r\n if (--numRemaining === 0) {\r\n callback();\r\n }\r\n }\r\n else {\r\n var onLoadObservable = (texture as any).onLoadObservable as Observable<BaseTexture>;\r\n\r\n if (onLoadObservable) {\r\n onLoadObservable.addOnce(() => {\r\n if (--numRemaining === 0) {\r\n callback();\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n private static _isScene(sceneOrEngine: Scene | ThinEngine): sceneOrEngine is Scene {\r\n return sceneOrEngine.getClassName() === \"Scene\";\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"baseTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/Textures/baseTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize, SerializationHelper, serializeAsTexture } from \"../../Misc/decorators\";\r\nimport { Observer, Observable } from \"../../Misc/observable\";\r\nimport { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport { Matrix } from \"../../Maths/math.vector\";\r\nimport { EngineStore } from \"../../Engines/engineStore\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\n\r\nimport { IAnimatable } from '../../Animations/animatable.interface';\r\nimport { RandomGUID } from '../../Misc/guid';\r\n\r\nimport \"../../Misc/fileTools\";\r\nimport { ThinEngine } from '../../Engines/thinEngine';\r\nimport { ThinTexture } from './thinTexture';\r\nimport { AbstractScene } from \"../../abstractScene\";\r\n\r\ndeclare type Animation = import(\"../../Animations/animation\").Animation;\r\n\r\n/**\r\n * Base class of all the textures in babylon.\r\n * It groups all the common properties the materials, post process, lights... might need\r\n * in order to make a correct use of the texture.\r\n */\r\nexport class BaseTexture extends ThinTexture implements IAnimatable {\r\n /**\r\n * Default anisotropic filtering level for the application.\r\n * It is set to 4 as a good tradeoff between perf and quality.\r\n */\r\n public static DEFAULT_ANISOTROPIC_FILTERING_LEVEL = 4;\r\n\r\n /**\r\n * Gets or sets the unique id of the texture\r\n */\r\n @serialize()\r\n public uniqueId: number;\r\n\r\n /**\r\n * Define the name of the texture.\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * Gets or sets an object used to store user defined information.\r\n */\r\n @serialize()\r\n public metadata: any = null;\r\n\r\n /**\r\n * For internal use only. Please do not use.\r\n */\r\n public reservedDataStore: any = null;\r\n\r\n @serialize(\"hasAlpha\")\r\n private _hasAlpha = false;\r\n /**\r\n * Define if the texture is having a usable alpha value (can be use for transparency or glossiness for instance).\r\n */\r\n public set hasAlpha(value: boolean) {\r\n if (this._hasAlpha === value) {\r\n return;\r\n }\r\n this._hasAlpha = value;\r\n if (this._scene) {\r\n this._scene.markAllMaterialsAsDirty(1 | 16);\r\n }\r\n }\r\n public get hasAlpha(): boolean {\r\n return this._hasAlpha;\r\n }\r\n\r\n /**\r\n * Defines if the alpha value should be determined via the rgb values.\r\n * If true the luminance of the pixel might be used to find the corresponding alpha value.\r\n */\r\n @serialize()\r\n public getAlphaFromRGB = false;\r\n\r\n /**\r\n * Intensity or strength of the texture.\r\n * It is commonly used by materials to fine tune the intensity of the texture\r\n */\r\n @serialize()\r\n public level = 1;\r\n\r\n /**\r\n * Define the UV channel to use starting from 0 and defaulting to 0.\r\n * This is part of the texture as textures usually maps to one uv set.\r\n */\r\n @serialize()\r\n public coordinatesIndex = 0;\r\n\r\n @serialize(\"coordinatesMode\")\r\n protected _coordinatesMode = 0;\r\n\r\n /**\r\n * How a texture is mapped.\r\n *\r\n * | Value | Type | Description |\r\n * | ----- | ----------------------------------- | ----------- |\r\n * | 0 | EXPLICIT_MODE | |\r\n * | 1 | SPHERICAL_MODE | |\r\n * | 2 | PLANAR_MODE | |\r\n * | 3 | CUBIC_MODE | |\r\n * | 4 | PROJECTION_MODE | |\r\n * | 5 | SKYBOX_MODE | |\r\n * | 6 | INVCUBIC_MODE | |\r\n * | 7 | EQUIRECTANGULAR_MODE | |\r\n * | 8 | FIXED_EQUIRECTANGULAR_MODE | |\r\n * | 9 | FIXED_EQUIRECTANGULAR_MIRRORED_MODE | |\r\n */\r\n public set coordinatesMode(value: number) {\r\n if (this._coordinatesMode === value) {\r\n return;\r\n }\r\n this._coordinatesMode = value;\r\n if (this._scene) {\r\n this._scene.markAllMaterialsAsDirty(1);\r\n }\r\n }\r\n public get coordinatesMode(): number {\r\n return this._coordinatesMode;\r\n }\r\n\r\n /**\r\n * | Value | Type | Description |\r\n * | ----- | ------------------ | ----------- |\r\n * | 0 | CLAMP_ADDRESSMODE | |\r\n * | 1 | WRAP_ADDRESSMODE | |\r\n * | 2 | MIRROR_ADDRESSMODE | |\r\n */\r\n @serialize()\r\n public get wrapU() {\r\n return this._wrapU;\r\n }\r\n public set wrapU(value: number) {\r\n this._wrapU = value;\r\n }\r\n\r\n /**\r\n * | Value | Type | Description |\r\n * | ----- | ------------------ | ----------- |\r\n * | 0 | CLAMP_ADDRESSMODE | |\r\n * | 1 | WRAP_ADDRESSMODE | |\r\n * | 2 | MIRROR_ADDRESSMODE | |\r\n */\r\n @serialize()\r\n public get wrapV() {\r\n return this._wrapV;\r\n }\r\n public set wrapV(value: number) {\r\n this._wrapV = value;\r\n }\r\n\r\n /**\r\n * | Value | Type | Description |\r\n * | ----- | ------------------ | ----------- |\r\n * | 0 | CLAMP_ADDRESSMODE | |\r\n * | 1 | WRAP_ADDRESSMODE | |\r\n * | 2 | MIRROR_ADDRESSMODE | |\r\n */\r\n @serialize()\r\n public wrapR = 1;\r\n\r\n /**\r\n * With compliant hardware and browser (supporting anisotropic filtering)\r\n * this defines the level of anisotropic filtering in the texture.\r\n * The higher the better but the slower. This defaults to 4 as it seems to be the best tradeoff.\r\n */\r\n @serialize()\r\n public anisotropicFilteringLevel = BaseTexture.DEFAULT_ANISOTROPIC_FILTERING_LEVEL;\r\n\r\n private _isCube = false;\r\n /**\r\n * Define if the texture is a cube texture or if false a 2d texture.\r\n */\r\n @serialize()\r\n public get isCube(): boolean {\r\n if (!this._texture) {\r\n return this._isCube;\r\n }\r\n\r\n return this._texture.isCube;\r\n }\r\n\r\n public set isCube(value: boolean) {\r\n if (!this._texture) {\r\n this._isCube = value;\r\n } else {\r\n this._texture.isCube = value;\r\n }\r\n }\r\n\r\n /**\r\n * Define if the texture is a 3d texture (webgl 2) or if false a 2d texture.\r\n */\r\n @serialize()\r\n public get is3D(): boolean {\r\n if (!this._texture) {\r\n return false;\r\n }\r\n\r\n return this._texture.is3D;\r\n }\r\n\r\n public set is3D(value: boolean) {\r\n if (!this._texture) {\r\n return;\r\n }\r\n\r\n this._texture.is3D = value;\r\n }\r\n\r\n /**\r\n * Define if the texture is a 2d array texture (webgl 2) or if false a 2d texture.\r\n */\r\n @serialize()\r\n public get is2DArray(): boolean {\r\n if (!this._texture) {\r\n return false;\r\n }\r\n\r\n return this._texture.is2DArray;\r\n }\r\n\r\n public set is2DArray(value: boolean) {\r\n if (!this._texture) {\r\n return;\r\n }\r\n\r\n this._texture.is2DArray = value;\r\n }\r\n\r\n private _gammaSpace = true;\r\n /**\r\n * Define if the texture contains data in gamma space (most of the png/jpg aside bump).\r\n * HDR texture are usually stored in linear space.\r\n * This only impacts the PBR and Background materials\r\n */\r\n @serialize()\r\n public get gammaSpace(): boolean {\r\n if (!this._texture) {\r\n return this._gammaSpace;\r\n } else {\r\n if (this._texture._gammaSpace === null) {\r\n this._texture._gammaSpace = this._gammaSpace;\r\n }\r\n }\r\n\r\n return this._texture._gammaSpace && !this._texture._useSRGBBuffer;\r\n }\r\n\r\n public set gammaSpace(gamma: boolean) {\r\n if (!this._texture) {\r\n if (this._gammaSpace === gamma) {\r\n return;\r\n }\r\n\r\n this._gammaSpace = gamma;\r\n } else {\r\n if (this._texture._gammaSpace === gamma) {\r\n return;\r\n }\r\n this._texture._gammaSpace = gamma;\r\n }\r\n\r\n this._markAllSubMeshesAsTexturesDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets whether or not the texture contains RGBD data.\r\n */\r\n public get isRGBD(): boolean {\r\n return this._texture != null && this._texture._isRGBD;\r\n }\r\n public set isRGBD(value: boolean) {\r\n if (this._texture) { this._texture._isRGBD = value; }\r\n }\r\n\r\n /**\r\n * Is Z inverted in the texture (useful in a cube texture).\r\n */\r\n @serialize()\r\n public invertZ = false;\r\n\r\n /**\r\n * Are mip maps generated for this texture or not.\r\n */\r\n public get noMipmap(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * @hidden\r\n */\r\n @serialize()\r\n public lodLevelInAlpha = false;\r\n\r\n /**\r\n * With prefiltered texture, defined the offset used during the prefiltering steps.\r\n */\r\n @serialize()\r\n public get lodGenerationOffset(): number {\r\n if (this._texture) { return this._texture._lodGenerationOffset; }\r\n\r\n return 0.0;\r\n }\r\n public set lodGenerationOffset(value: number) {\r\n if (this._texture) { this._texture._lodGenerationOffset = value; }\r\n }\r\n\r\n /**\r\n * With prefiltered texture, defined the scale used during the prefiltering steps.\r\n */\r\n @serialize()\r\n public get lodGenerationScale(): number {\r\n if (this._texture) { return this._texture._lodGenerationScale; }\r\n\r\n return 0.0;\r\n }\r\n public set lodGenerationScale(value: number) {\r\n if (this._texture) { this._texture._lodGenerationScale = value; }\r\n }\r\n\r\n /**\r\n * With prefiltered texture, defined if the specular generation is based on a linear ramp.\r\n * By default we are using a log2 of the linear roughness helping to keep a better resolution for\r\n * average roughness values.\r\n */\r\n @serialize()\r\n public get linearSpecularLOD(): boolean {\r\n if (this._texture) { return this._texture._linearSpecularLOD; }\r\n\r\n return false;\r\n }\r\n public set linearSpecularLOD(value: boolean) {\r\n if (this._texture) { this._texture._linearSpecularLOD = value; }\r\n }\r\n\r\n /**\r\n * In case a better definition than spherical harmonics is required for the diffuse part of the environment.\r\n * You can set the irradiance texture to rely on a texture instead of the spherical approach.\r\n * This texture need to have the same characteristics than its parent (Cube vs 2d, coordinates mode, Gamma/Linear, RGBD).\r\n */\r\n @serializeAsTexture()\r\n public get irradianceTexture(): Nullable<BaseTexture> {\r\n if (this._texture) { return this._texture._irradianceTexture; }\r\n\r\n return null;\r\n }\r\n public set irradianceTexture(value: Nullable<BaseTexture>) {\r\n if (this._texture) { this._texture._irradianceTexture = value; }\r\n }\r\n\r\n /**\r\n * Define if the texture is a render target.\r\n */\r\n @serialize()\r\n public isRenderTarget = false;\r\n\r\n /**\r\n * Define the unique id of the texture in the scene.\r\n */\r\n public get uid(): string {\r\n if (!this._uid) {\r\n this._uid = RandomGUID();\r\n }\r\n return this._uid;\r\n }\r\n\r\n /** @hidden */\r\n public _prefiltered: boolean = false;\r\n /** @hidden */\r\n public _forceSerialize: boolean = false;\r\n\r\n /**\r\n * Return a string representation of the texture.\r\n * @returns the texture as a string\r\n */\r\n public toString(): string {\r\n return this.name;\r\n }\r\n\r\n /**\r\n * Get the class name of the texture.\r\n * @returns \"BaseTexture\"\r\n */\r\n public getClassName(): string {\r\n return \"BaseTexture\";\r\n }\r\n\r\n /**\r\n * Define the list of animation attached to the texture.\r\n */\r\n public animations = new Array<Animation>();\r\n\r\n /**\r\n * An event triggered when the texture is disposed.\r\n */\r\n public onDisposeObservable = new Observable<BaseTexture>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<BaseTexture>> = null;\r\n /**\r\n * Callback triggered when the texture has been disposed.\r\n * Kept for back compatibility, you can use the onDisposeObservable instead.\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n protected _scene: Nullable<Scene> = null;\r\n\r\n /** @hidden */\r\n private _uid: Nullable<string> = null;\r\n\r\n /**\r\n * Define if the texture is preventing a material to render or not.\r\n * If not and the texture is not ready, the engine will use a default black texture instead.\r\n */\r\n public get isBlocking(): boolean {\r\n return true;\r\n }\r\n\r\n /** @hidden */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n protected _loadingError: boolean = false;\r\n protected _errorObject?: {\r\n message?: string;\r\n exception?: any;\r\n };\r\n\r\n /**\r\n * Was there any loading error?\r\n */\r\n public get loadingError(): boolean {\r\n return this._loadingError;\r\n }\r\n\r\n /**\r\n * If a loading error occurred this object will be populated with information about the error.\r\n */\r\n public get errorObject(): {\r\n message?: string;\r\n exception?: any;\r\n } | undefined {\r\n return this._errorObject;\r\n }\r\n\r\n /**\r\n * Instantiates a new BaseTexture.\r\n * Base class of all the textures in babylon.\r\n * It groups all the common properties the materials, post process, lights... might need\r\n * in order to make a correct use of the texture.\r\n * @param sceneOrEngine Define the scene or engine the texture belongs to\r\n */\r\n constructor(sceneOrEngine: Nullable<Scene | ThinEngine>) {\r\n super(null);\r\n\r\n if (sceneOrEngine) {\r\n if (BaseTexture._isScene(sceneOrEngine)) {\r\n this._scene = sceneOrEngine;\r\n }\r\n else {\r\n this._engine = sceneOrEngine;\r\n }\r\n }\r\n else {\r\n this._scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n if (this._scene) {\r\n this.uniqueId = this._scene.getUniqueId();\r\n this._scene.addTexture(this);\r\n this._engine = this._scene.getEngine();\r\n }\r\n\r\n this._uid = null;\r\n }\r\n\r\n /**\r\n * Get the scene the texture belongs to.\r\n * @returns the scene or null if undefined\r\n */\r\n public getScene(): Nullable<Scene> {\r\n return this._scene;\r\n }\r\n\r\n /** @hidden */\r\n protected _getEngine(): Nullable<ThinEngine> {\r\n return this._engine;\r\n }\r\n\r\n /**\r\n * Checks if the texture has the same transform matrix than another texture\r\n * @param texture texture to check against\r\n * @returns true if the transforms are the same, else false\r\n */\r\n public checkTransformsAreIdentical(texture: Nullable<BaseTexture>): boolean {\r\n return texture !== null;\r\n }\r\n\r\n /**\r\n * Get the texture transform matrix used to offset tile the texture for instance.\r\n * @returns the transformation matrix\r\n */\r\n public getTextureMatrix(): Matrix {\r\n return <Matrix>Matrix.IdentityReadOnly;\r\n }\r\n\r\n /**\r\n * Get the texture reflection matrix used to rotate/transform the reflection.\r\n * @returns the reflection matrix\r\n */\r\n public getReflectionTextureMatrix(): Matrix {\r\n return <Matrix>Matrix.IdentityReadOnly;\r\n }\r\n\r\n /**\r\n * Get if the texture is ready to be consumed (either it is ready or it is not blocking)\r\n * @returns true if ready, not blocking or if there was an error loading the texture\r\n */\r\n public isReadyOrNotBlocking(): boolean {\r\n return !this.isBlocking || this.isReady() || this.loadingError;\r\n }\r\n\r\n /**\r\n * Scales the texture if is `canRescale()`\r\n * @param ratio the resize factor we want to use to rescale\r\n */\r\n public scale(ratio: number): void {\r\n }\r\n\r\n /**\r\n * Get if the texture can rescale.\r\n */\r\n public get canRescale(): boolean {\r\n return false;\r\n }\r\n\r\n /** @hidden */\r\n public _getFromCache(url: Nullable<string>, noMipmap: boolean, sampling?: number, invertY?: boolean, useSRGBBuffer?: boolean): Nullable<InternalTexture> {\r\n const engine = this._getEngine();\r\n if (!engine) {\r\n return null;\r\n }\r\n\r\n const correctedUseSRGBBuffer = engine._getUseSRGBBuffer(!!useSRGBBuffer, noMipmap);\r\n\r\n var texturesCache = engine.getLoadedTexturesCache();\r\n for (var index = 0; index < texturesCache.length; index++) {\r\n var texturesCacheEntry = texturesCache[index];\r\n\r\n if (useSRGBBuffer === undefined || correctedUseSRGBBuffer === texturesCacheEntry._useSRGBBuffer) {\r\n if (invertY === undefined || invertY === texturesCacheEntry.invertY) {\r\n if (texturesCacheEntry.url === url && texturesCacheEntry.generateMipMaps === !noMipmap) {\r\n if (!sampling || sampling === texturesCacheEntry.samplingMode) {\r\n texturesCacheEntry.incrementReferences();\r\n return texturesCacheEntry;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n\r\n }\r\n\r\n /**\r\n * Clones the texture.\r\n * @returns the cloned texture\r\n */\r\n public clone(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n /**\r\n * Get the texture underlying type (INT, FLOAT...)\r\n */\r\n public get textureType(): number {\r\n if (!this._texture) {\r\n return 0;\r\n }\r\n\r\n return (this._texture.type !== undefined) ? this._texture.type : 0;\r\n }\r\n\r\n /**\r\n * Get the texture underlying format (RGB, RGBA...)\r\n */\r\n public get textureFormat(): number {\r\n if (!this._texture) {\r\n return 5;\r\n }\r\n\r\n return (this._texture.format !== undefined) ? this._texture.format : 5;\r\n }\r\n\r\n /**\r\n * Indicates that textures need to be re-calculated for all materials\r\n */\r\n protected _markAllSubMeshesAsTexturesDirty() {\r\n let scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n scene.markAllMaterialsAsDirty(1);\r\n }\r\n\r\n /**\r\n * Reads the pixels stored in the webgl texture and returns them as an ArrayBuffer.\r\n * This will returns an RGBA array buffer containing either in values (0-255) or\r\n * float values (0-1) depending of the underlying buffer type.\r\n * @param faceIndex defines the face of the texture to read (in case of cube texture)\r\n * @param level defines the LOD level of the texture to read (in case of Mip Maps)\r\n * @param buffer defines a user defined buffer to fill with data (can be null)\r\n * @param flushRenderer true to flush the renderer from the pending commands before reading the pixels\r\n * @param noDataConversion false to convert the data to Uint8Array (if texture type is UNSIGNED_BYTE) or to Float32Array (if texture type is anything but UNSIGNED_BYTE). If true, the type of the generated buffer (if buffer==null) will depend on the type of the texture\r\n * @returns The Array buffer promise containing the pixels data.\r\n */\r\n public readPixels(faceIndex = 0, level = 0, buffer: Nullable<ArrayBufferView> = null, flushRenderer = true, noDataConversion = false): Nullable<Promise<ArrayBufferView>> {\r\n if (!this._texture) {\r\n return null;\r\n }\r\n\r\n var size = this.getSize();\r\n var width = size.width;\r\n var height = size.height;\r\n\r\n const engine = this._getEngine();\r\n if (!engine) {\r\n return null;\r\n }\r\n\r\n if (level != 0) {\r\n width = width / Math.pow(2, level);\r\n height = height / Math.pow(2, level);\r\n\r\n width = Math.round(width);\r\n height = Math.round(height);\r\n }\r\n\r\n try {\r\n if (this._texture.isCube) {\r\n return engine._readTexturePixels(this._texture, width, height, faceIndex, level, buffer, flushRenderer, noDataConversion);\r\n }\r\n\r\n return engine._readTexturePixels(this._texture, width, height, -1, level, buffer, flushRenderer, noDataConversion);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _readPixelsSync(faceIndex = 0, level = 0, buffer: Nullable<ArrayBufferView> = null, flushRenderer = true, noDataConversion = false): Nullable<ArrayBufferView> {\r\n if (!this._texture) {\r\n return null;\r\n }\r\n\r\n var size = this.getSize();\r\n var width = size.width;\r\n var height = size.height;\r\n\r\n const engine = this._getEngine();\r\n if (!engine) {\r\n return null;\r\n }\r\n\r\n if (level != 0) {\r\n width = width / Math.pow(2, level);\r\n height = height / Math.pow(2, level);\r\n\r\n width = Math.round(width);\r\n height = Math.round(height);\r\n }\r\n\r\n try {\r\n if (this._texture.isCube) {\r\n return engine._readTexturePixelsSync(this._texture, width, height, faceIndex, level, buffer, flushRenderer, noDataConversion);\r\n }\r\n\r\n return engine._readTexturePixelsSync(this._texture, width, height, -1, level, buffer, flushRenderer, noDataConversion);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public get _lodTextureHigh(): Nullable<BaseTexture> {\r\n if (this._texture) {\r\n return this._texture._lodTextureHigh;\r\n }\r\n return null;\r\n }\r\n\r\n /** @hidden */\r\n public get _lodTextureMid(): Nullable<BaseTexture> {\r\n if (this._texture) {\r\n return this._texture._lodTextureMid;\r\n }\r\n return null;\r\n }\r\n\r\n /** @hidden */\r\n public get _lodTextureLow(): Nullable<BaseTexture> {\r\n if (this._texture) {\r\n return this._texture._lodTextureLow;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Dispose the texture and release its associated resources.\r\n */\r\n public dispose(): void {\r\n if (this._scene) {\r\n // Animations\r\n if (this._scene.stopAnimation) {\r\n this._scene.stopAnimation(this);\r\n }\r\n\r\n // Remove from scene\r\n this._scene._removePendingData(this);\r\n var index = this._scene.textures.indexOf(this);\r\n\r\n if (index >= 0) {\r\n this._scene.textures.splice(index, 1);\r\n }\r\n this._scene.onTextureRemovedObservable.notifyObservers(this);\r\n this._scene = null;\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.textures.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.textures.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n }\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n this.onDisposeObservable.clear();\r\n\r\n this.metadata = null;\r\n\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Serialize the texture into a JSON representation that can be parsed later on.\r\n * @returns the JSON representation of the texture\r\n */\r\n public serialize(): any {\r\n if (!this.name) {\r\n return null;\r\n }\r\n\r\n var serializationObject = SerializationHelper.Serialize(this);\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(this, serializationObject);\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Helper function to be called back once a list of texture contains only ready textures.\r\n * @param textures Define the list of textures to wait for\r\n * @param callback Define the callback triggered once the entire list will be ready\r\n */\r\n public static WhenAllReady(textures: BaseTexture[], callback: () => void): void {\r\n let numRemaining = textures.length;\r\n if (numRemaining === 0) {\r\n callback();\r\n return;\r\n }\r\n\r\n for (var i = 0; i < textures.length; i++) {\r\n var texture = textures[i];\r\n\r\n if (texture.isReady()) {\r\n if (--numRemaining === 0) {\r\n callback();\r\n }\r\n }\r\n else {\r\n var onLoadObservable = (texture as any).onLoadObservable as Observable<BaseTexture>;\r\n\r\n if (onLoadObservable) {\r\n onLoadObservable.addOnce(() => {\r\n if (--numRemaining === 0) {\r\n callback();\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n private static _isScene(sceneOrEngine: Scene | ThinEngine): sceneOrEngine is Scene {\r\n return sceneOrEngine.getClassName() === \"Scene\";\r\n }\r\n}\r\n"]}
@@ -16,6 +16,7 @@ import { IRenderTargetTexture, RenderTargetWrapper } from "../../Engines/renderT
16
16
  import "../../Engines/Extensions/engine.renderTarget";
17
17
  import "../../Engines/Extensions/engine.renderTargetCube";
18
18
  import { Engine } from '../../Engines/engine';
19
+ declare type Material = import("../material").Material;
19
20
  /**
20
21
  * This Helps creating a texture that will be created from a camera in your scene.
21
22
  * It is basically a dynamic texture that could be used to create special effects for instance.
@@ -172,6 +173,23 @@ export declare class RenderTargetTexture extends Texture implements IRenderTarge
172
173
  protected _renderTargetOptions: RenderTargetCreationOptions;
173
174
  private _canRescale;
174
175
  protected _renderTarget: Nullable<RenderTargetWrapper>;
176
+ /**
177
+ * Current render pass id of the render target texture. Note it can change over the rendering as there's a separate id for each face of a cube / each layer of an array layer!
178
+ */
179
+ renderPassId: number;
180
+ private _renderPassIds;
181
+ /**
182
+ * Gets the render pass ids used by the render target texture. For a single render target the array length will be 1, for a cube texture it will be 6 and for
183
+ * a 2D texture array it will return an array of ids the size of the 2D texture array
184
+ */
185
+ get renderPassIds(): readonly number[];
186
+ /**
187
+ * Sets a specific material to be used to render a mesh/a list of meshes in this render target texture
188
+ * @param mesh mesh or array of meshes
189
+ * @param material material or array of materials to use for this render pass. If undefined is passed, no specific material will be used but the regular material instead (mesh.material). It's possible to provide an array of materials to use a different material for each rendering in the case of a cube texture (6 rendering) and a 2D texture array (as many rendering as the length of the array)
190
+ */
191
+ setMaterialForRendering(mesh: AbstractMesh | AbstractMesh[], material?: Material | Material[]): void;
192
+ private __isCube;
175
193
  /**
176
194
  * Gets render target creation options that were used.
177
195
  */
@@ -236,6 +254,8 @@ export declare class RenderTargetTexture extends Texture implements IRenderTarge
236
254
  * @param samples sample count of the depth/stencil texture
237
255
  */
238
256
  createDepthStencilTexture(comparisonFunction?: number, bilinearFiltering?: boolean, generateStencil?: boolean, samples?: number): void;
257
+ private _releaseRenderPassId;
258
+ private _createRenderPassId;
239
259
  private _processSizeParameter;
240
260
  /**
241
261
  * Define the number of samples to use in case of MSAA.
@@ -330,6 +350,12 @@ export declare class RenderTargetTexture extends Texture implements IRenderTarge
330
350
  * @param dumpForDebug Define if the rendering result should be dumped (copied) for debugging purpose
331
351
  */
332
352
  render(useCameraPostProcess?: boolean, dumpForDebug?: boolean): void;
353
+ /**
354
+ * This function will check if the render target texture can be rendered (textures are loaded, shaders are compiled)
355
+ * @return true if all required resources are ready
356
+ */
357
+ isReadyForRendering(): boolean;
358
+ private _render;
333
359
  private _bestReflectionRenderTargetDimension;
334
360
  private _prepareRenderingManager;
335
361
  /**
@@ -395,3 +421,4 @@ export declare class RenderTargetTexture extends Texture implements IRenderTarge
395
421
  */
396
422
  getViewCount(): number;
397
423
  }
424
+ export {};
@@ -108,7 +108,10 @@ var RenderTargetTexture = /** @class */ (function (_super) {
108
108
  _this.name = name;
109
109
  _this.isRenderTarget = true;
110
110
  _this._initialSizeParameter = size;
111
+ _this._renderPassIds = [];
112
+ _this.__isCube = isCube;
111
113
  _this._processSizeParameter(size);
114
+ _this.renderPassId = _this._renderPassIds[0];
112
115
  _this._resizeObserver = engine.onResizeObservable.add(function () {
113
116
  });
114
117
  _this._generateMipMaps = generateMipMaps ? true : false;
@@ -268,6 +271,36 @@ var RenderTargetTexture = /** @class */ (function (_super) {
268
271
  enumerable: false,
269
272
  configurable: true
270
273
  });
274
+ Object.defineProperty(RenderTargetTexture.prototype, "renderPassIds", {
275
+ /**
276
+ * Gets the render pass ids used by the render target texture. For a single render target the array length will be 1, for a cube texture it will be 6 and for
277
+ * a 2D texture array it will return an array of ids the size of the 2D texture array
278
+ */
279
+ get: function () {
280
+ return this._renderPassIds;
281
+ },
282
+ enumerable: false,
283
+ configurable: true
284
+ });
285
+ /**
286
+ * Sets a specific material to be used to render a mesh/a list of meshes in this render target texture
287
+ * @param mesh mesh or array of meshes
288
+ * @param material material or array of materials to use for this render pass. If undefined is passed, no specific material will be used but the regular material instead (mesh.material). It's possible to provide an array of materials to use a different material for each rendering in the case of a cube texture (6 rendering) and a 2D texture array (as many rendering as the length of the array)
289
+ */
290
+ RenderTargetTexture.prototype.setMaterialForRendering = function (mesh, material) {
291
+ var meshes;
292
+ if (!Array.isArray(mesh)) {
293
+ meshes = [mesh];
294
+ }
295
+ else {
296
+ meshes = mesh;
297
+ }
298
+ for (var j = 0; j < meshes.length; ++j) {
299
+ for (var i = 0; i < this._renderPassIds.length; ++i) {
300
+ meshes[j].setMaterialForRenderPass(this._renderPassIds[i], material !== undefined ? (Array.isArray(material) ? material[i] : material) : undefined);
301
+ }
302
+ }
303
+ };
271
304
  Object.defineProperty(RenderTargetTexture.prototype, "renderTargetOptions", {
272
305
  /**
273
306
  * Gets render target creation options that were used.
@@ -345,6 +378,23 @@ var RenderTargetTexture = /** @class */ (function (_super) {
345
378
  if (samples === void 0) { samples = 1; }
346
379
  (_a = this._renderTarget) === null || _a === void 0 ? void 0 : _a.createDepthStencilTexture(comparisonFunction, bilinearFiltering, generateStencil, samples);
347
380
  };
381
+ RenderTargetTexture.prototype._releaseRenderPassId = function () {
382
+ if (this._scene) {
383
+ var engine = this._scene.getEngine();
384
+ for (var i = 0; i < this._renderPassIds.length; ++i) {
385
+ engine.releaseRenderPassId(this._renderPassIds[i]);
386
+ }
387
+ }
388
+ this._renderPassIds = [];
389
+ };
390
+ RenderTargetTexture.prototype._createRenderPassId = function () {
391
+ this._releaseRenderPassId();
392
+ var engine = this._scene.getEngine(); // scene can't be null in a RenderTargetTexture, see constructor
393
+ var numPasses = this.__isCube ? 6 : this.getRenderLayers() || 1;
394
+ for (var i = 0; i < numPasses; ++i) {
395
+ this._renderPassIds[i] = engine.createRenderPassId("RenderTargetTexture - " + this.name + "#" + i);
396
+ }
397
+ };
348
398
  RenderTargetTexture.prototype._processSizeParameter = function (size) {
349
399
  if (size.ratio) {
350
400
  this._sizeRatio = size.ratio;
@@ -357,6 +407,7 @@ var RenderTargetTexture = /** @class */ (function (_super) {
357
407
  else {
358
408
  this._size = size;
359
409
  }
410
+ this._createRenderPassId();
360
411
  };
361
412
  Object.defineProperty(RenderTargetTexture.prototype, "samples", {
362
413
  /**
@@ -570,12 +621,25 @@ var RenderTargetTexture = /** @class */ (function (_super) {
570
621
  * @param dumpForDebug Define if the rendering result should be dumped (copied) for debugging purpose
571
622
  */
572
623
  RenderTargetTexture.prototype.render = function (useCameraPostProcess, dumpForDebug) {
624
+ if (useCameraPostProcess === void 0) { useCameraPostProcess = false; }
625
+ if (dumpForDebug === void 0) { dumpForDebug = false; }
626
+ this._render(useCameraPostProcess, dumpForDebug);
627
+ };
628
+ /**
629
+ * This function will check if the render target texture can be rendered (textures are loaded, shaders are compiled)
630
+ * @return true if all required resources are ready
631
+ */
632
+ RenderTargetTexture.prototype.isReadyForRendering = function () {
633
+ return this._render(false, false, true);
634
+ };
635
+ RenderTargetTexture.prototype._render = function (useCameraPostProcess, dumpForDebug, checkReadiness) {
573
636
  var _a;
574
637
  if (useCameraPostProcess === void 0) { useCameraPostProcess = false; }
575
638
  if (dumpForDebug === void 0) { dumpForDebug = false; }
639
+ if (checkReadiness === void 0) { checkReadiness = false; }
576
640
  var scene = this.getScene();
577
641
  if (!scene) {
578
- return;
642
+ return checkReadiness;
579
643
  }
580
644
  var engine = scene.getEngine();
581
645
  if (this.useCameraPostProcesses !== undefined) {
@@ -602,7 +666,7 @@ var RenderTargetTexture = /** @class */ (function (_super) {
602
666
  }
603
667
  var scene = this.getScene();
604
668
  if (!scene) {
605
- return;
669
+ return checkReadiness;
606
670
  }
607
671
  var sceneMeshes = scene.meshes;
608
672
  for (var index = 0; index < sceneMeshes.length; index++) {
@@ -612,6 +676,7 @@ var RenderTargetTexture = /** @class */ (function (_super) {
612
676
  }
613
677
  }
614
678
  }
679
+ var currentRenderPassId = engine.currentRenderPassId;
615
680
  this.onBeforeBindObservable.notifyObservers(this);
616
681
  // Set custom projection.
617
682
  // Needs to be before binding to prevent changing the aspect ratio.
@@ -623,24 +688,68 @@ var RenderTargetTexture = /** @class */ (function (_super) {
623
688
  engine.setViewport(camera.viewport, this.getRenderWidth(), this.getRenderHeight());
624
689
  }
625
690
  this._defaultRenderListPrepared = false;
626
- if (this.is2DArray) {
627
- for (var layer = 0; layer < this.getRenderLayers(); layer++) {
628
- this.renderToTarget(0, useCameraPostProcess, dumpForDebug, layer, camera);
629
- scene.incrementRenderId();
630
- scene.resetCachedMaterial();
691
+ var returnValue = checkReadiness;
692
+ if (!checkReadiness) {
693
+ if (this.is2DArray) {
694
+ for (var layer = 0; layer < this.getRenderLayers(); layer++) {
695
+ this.renderToTarget(0, useCameraPostProcess, dumpForDebug, layer, camera);
696
+ scene.incrementRenderId();
697
+ scene.resetCachedMaterial();
698
+ }
631
699
  }
632
- }
633
- else if (this.isCube) {
634
- for (var face = 0; face < 6; face++) {
635
- this.renderToTarget(face, useCameraPostProcess, dumpForDebug, undefined, camera);
636
- scene.incrementRenderId();
637
- scene.resetCachedMaterial();
700
+ else if (this.isCube) {
701
+ for (var face = 0; face < 6; face++) {
702
+ this.renderToTarget(face, useCameraPostProcess, dumpForDebug, undefined, camera);
703
+ scene.incrementRenderId();
704
+ scene.resetCachedMaterial();
705
+ }
706
+ }
707
+ else {
708
+ this.renderToTarget(0, useCameraPostProcess, dumpForDebug, undefined, camera);
638
709
  }
639
710
  }
640
711
  else {
641
- this.renderToTarget(0, useCameraPostProcess, dumpForDebug, undefined, camera);
712
+ if (!scene.getViewMatrix()) {
713
+ // We probably didn't execute scene.render() yet, so make sure we have a view/projection matrix setup for the scene
714
+ scene.updateTransformMatrix();
715
+ }
716
+ var numLayers = this.is2DArray ? this.getRenderLayers() : this.isCube ? 6 : 1;
717
+ for (var layer = 0; layer < numLayers && returnValue; layer++) {
718
+ var currentRenderList = null;
719
+ var defaultRenderList = this.renderList ? this.renderList : scene.getActiveMeshes().data;
720
+ var defaultRenderListLength = this.renderList ? this.renderList.length : scene.getActiveMeshes().length;
721
+ engine.currentRenderPassId = this._renderPassIds[layer];
722
+ this.onBeforeRenderObservable.notifyObservers(layer);
723
+ if (this.getCustomRenderList) {
724
+ currentRenderList = this.getCustomRenderList(layer, defaultRenderList, defaultRenderListLength);
725
+ }
726
+ if (!currentRenderList) {
727
+ currentRenderList = defaultRenderList;
728
+ }
729
+ if (!this._doNotChangeAspectRatio) {
730
+ scene.updateTransformMatrix(true);
731
+ }
732
+ for (var i = 0; i < currentRenderList.length && returnValue; ++i) {
733
+ var mesh_2 = currentRenderList[i];
734
+ if (!mesh_2.isEnabled() || mesh_2.isBlocked || !mesh_2.isVisible || !mesh_2.subMeshes) {
735
+ continue;
736
+ }
737
+ if (this.customIsReadyFunction) {
738
+ if (!this.customIsReadyFunction(mesh_2, this.refreshRate)) {
739
+ returnValue = false;
740
+ break;
741
+ }
742
+ }
743
+ else if (!mesh_2.isReady(true)) {
744
+ returnValue = false;
745
+ break;
746
+ }
747
+ }
748
+ this.onAfterRenderObservable.notifyObservers(layer);
749
+ }
642
750
  }
643
751
  this.onAfterUnbindObservable.notifyObservers(this);
752
+ engine.currentRenderPassId = currentRenderPassId;
644
753
  if (scene.activeCamera) {
645
754
  // Do not avoid setting uniforms when multiple scenes are active as another camera may have overwrite these
646
755
  if (scene.getEngine().scenes.length > 1 || (this.activeCamera && this.activeCamera !== scene.activeCamera)) {
@@ -649,6 +758,7 @@ var RenderTargetTexture = /** @class */ (function (_super) {
649
758
  engine.setViewport(scene.activeCamera.viewport);
650
759
  }
651
760
  scene.resetCachedMaterial();
761
+ return returnValue;
652
762
  };
653
763
  RenderTargetTexture.prototype._bestReflectionRenderTargetDimension = function (renderDimension, scale) {
654
764
  var minimum = 128;
@@ -781,9 +891,11 @@ var RenderTargetTexture = /** @class */ (function (_super) {
781
891
  // Bind
782
892
  this._prepareFrame(scene, faceIndex, layer, useCameraPostProcess);
783
893
  if (this.is2DArray) {
894
+ engine.currentRenderPassId = this._renderPassIds[layer];
784
895
  this.onBeforeRenderObservable.notifyObservers(layer);
785
896
  }
786
897
  else {
898
+ engine.currentRenderPassId = this._renderPassIds[faceIndex];
787
899
  this.onBeforeRenderObservable.notifyObservers(faceIndex);
788
900
  }
789
901
  var fastPath = engine.snapshotRendering && engine.snapshotRenderingMode === 1;
@@ -967,6 +1079,7 @@ var RenderTargetTexture = /** @class */ (function (_super) {
967
1079
  if (this._prePassRenderTarget) {
968
1080
  this._prePassRenderTarget.dispose();
969
1081
  }
1082
+ this._releaseRenderPassId();
970
1083
  this.clearPostProcesses(true);
971
1084
  if (this._resizeObserver) {
972
1085
  this.getScene().getEngine().onResizeObservable.remove(this._resizeObserver);