@babylonjs/core 6.4.1 → 6.5.1

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 (103) hide show
  1. package/Animations/animation.d.ts +4 -0
  2. package/Animations/animation.js +13 -1
  3. package/Animations/animation.js.map +1 -1
  4. package/Animations/runtimeAnimation.js +9 -1
  5. package/Animations/runtimeAnimation.js.map +1 -1
  6. package/Audio/sound.js +3 -1
  7. package/Audio/sound.js.map +1 -1
  8. package/Bones/boneLookController.d.ts +5 -0
  9. package/Bones/boneLookController.js +17 -3
  10. package/Bones/boneLookController.js.map +1 -1
  11. package/Engines/Processors/iShaderProcessor.d.ts +1 -0
  12. package/Engines/Processors/iShaderProcessor.js.map +1 -1
  13. package/Engines/Processors/shaderCodeNode.js +3 -2
  14. package/Engines/Processors/shaderCodeNode.js.map +1 -1
  15. package/Engines/Processors/shaderProcessor.d.ts +1 -0
  16. package/Engines/Processors/shaderProcessor.js +45 -44
  17. package/Engines/Processors/shaderProcessor.js.map +1 -1
  18. package/Engines/WebGL/webGL2ShaderProcessors.d.ts +1 -0
  19. package/Engines/WebGL/webGL2ShaderProcessors.js +4 -0
  20. package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
  21. package/Engines/WebGPU/webgpuDrawContext.js +1 -1
  22. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  23. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +1 -0
  24. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +16 -7
  25. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  26. package/Engines/engine.js +4 -4
  27. package/Engines/engine.js.map +1 -1
  28. package/Engines/thinEngine.js +2 -2
  29. package/Engines/thinEngine.js.map +1 -1
  30. package/Layers/layer.d.ts +5 -0
  31. package/Layers/layer.js +16 -6
  32. package/Layers/layer.js.map +1 -1
  33. package/Lights/Shadows/cascadedShadowGenerator.js +14 -2
  34. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  35. package/Lights/Shadows/shadowGenerator.js +1 -0
  36. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  37. package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +4 -0
  38. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +10 -0
  39. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  40. package/Materials/Node/Blocks/curveBlock.d.ts +97 -0
  41. package/Materials/Node/Blocks/curveBlock.js +287 -0
  42. package/Materials/Node/Blocks/curveBlock.js.map +1 -0
  43. package/Materials/Node/Blocks/index.d.ts +1 -0
  44. package/Materials/Node/Blocks/index.js +1 -0
  45. package/Materials/Node/Blocks/index.js.map +1 -1
  46. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +26 -0
  47. package/Materials/PBR/pbrAnisotropicConfiguration.js +47 -0
  48. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  49. package/Materials/Textures/multiRenderTarget.js +1 -2
  50. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  51. package/Materials/Textures/renderTargetTexture.d.ts +6 -1
  52. package/Materials/Textures/renderTargetTexture.js +5 -3
  53. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  54. package/Materials/materialDefines.js +1 -0
  55. package/Materials/materialDefines.js.map +1 -1
  56. package/Meshes/Builders/textBuilder.d.ts +2 -1
  57. package/Meshes/Builders/textBuilder.js +14 -2
  58. package/Meshes/Builders/textBuilder.js.map +1 -1
  59. package/Meshes/WebGPU/webgpuDataBuffer.d.ts +1 -1
  60. package/Meshes/WebGPU/webgpuDataBuffer.js +2 -1
  61. package/Meshes/WebGPU/webgpuDataBuffer.js.map +1 -1
  62. package/Meshes/mesh.js +10 -8
  63. package/Meshes/mesh.js.map +1 -1
  64. package/Meshes/transformNode.js +4 -0
  65. package/Meshes/transformNode.js.map +1 -1
  66. package/Misc/assetsManager.d.ts +78 -0
  67. package/Misc/assetsManager.js +60 -1
  68. package/Misc/assetsManager.js.map +1 -1
  69. package/Misc/filesInput.d.ts +1 -1
  70. package/Misc/filesInput.js +5 -5
  71. package/Misc/filesInput.js.map +1 -1
  72. package/Physics/v2/Plugins/havokPlugin.js +2 -2
  73. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  74. package/Physics/v2/physicsAggregate.d.ts +1 -0
  75. package/Physics/v2/physicsAggregate.js +6 -5
  76. package/Physics/v2/physicsAggregate.js.map +1 -1
  77. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +10 -1
  78. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +77 -10
  79. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  80. package/Rendering/depthRenderer.js +1 -0
  81. package/Rendering/depthRenderer.js.map +1 -1
  82. package/Rendering/prePassRenderer.d.ts +4 -0
  83. package/Rendering/prePassRenderer.js +14 -1
  84. package/Rendering/prePassRenderer.js.map +1 -1
  85. package/Shaders/ShadersInclude/pbrBlockAnisotropic.js +6 -3
  86. package/Shaders/ShadersInclude/pbrBlockAnisotropic.js.map +1 -1
  87. package/Shaders/ShadersInclude/pbrHelperFunctions.js +4 -1
  88. package/Shaders/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  89. package/Shaders/ShadersInclude/screenSpaceRayTrace.js +4 -1
  90. package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  91. package/Shaders/glowMapGeneration.fragment.js +1 -1
  92. package/Shaders/glowMapGeneration.fragment.js.map +1 -1
  93. package/Shaders/pbr.fragment.js +1 -1
  94. package/Shaders/pbr.fragment.js.map +1 -1
  95. package/Shaders/screenSpaceReflection2.fragment.d.ts +1 -0
  96. package/Shaders/screenSpaceReflection2.fragment.js +16 -10
  97. package/Shaders/screenSpaceReflection2.fragment.js.map +1 -1
  98. package/Shaders/screenSpaceReflection2BlurCombiner.fragment.d.ts +2 -0
  99. package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js +13 -2
  100. package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js.map +1 -1
  101. package/package.json +1 -1
  102. package/scene.js +24 -13
  103. package/scene.js.map +1 -1
@@ -16,6 +16,7 @@ export declare class MaterialAnisotropicDefines extends MaterialDefines {
16
16
  ANISOTROPIC: boolean;
17
17
  ANISOTROPIC_TEXTURE: boolean;
18
18
  ANISOTROPIC_TEXTUREDIRECTUV: number;
19
+ ANISOTROPIC_LEGACY: boolean;
19
20
  MAINUV1: boolean;
20
21
  }
21
22
  /**
@@ -36,6 +37,15 @@ export declare class PBRAnisotropicConfiguration extends MaterialPluginBase {
36
37
  * By default, the effect is "stretching" the highlights along the tangents.
37
38
  */
38
39
  direction: Vector2;
40
+ /**
41
+ * Sets the anisotropy direction as an angle.
42
+ */
43
+ set angle(value: number);
44
+ /**
45
+ * Gets the anisotropy angle value in radians.
46
+ * @returns the anisotropy angle value in radians.
47
+ */
48
+ get angle(): number;
39
49
  private _texture;
40
50
  /**
41
51
  * Stores the anisotropy values in a texture.
@@ -43,10 +53,19 @@ export declare class PBRAnisotropicConfiguration extends MaterialPluginBase {
43
53
  * b is a intensity
44
54
  */
45
55
  texture: Nullable<BaseTexture>;
56
+ private _legacy;
57
+ /**
58
+ * Defines if the anisotropy is in legacy mode for backwards compatibility before 6.4.0.
59
+ */
60
+ legacy: boolean;
46
61
  /** @internal */
47
62
  private _internalMarkAllSubMeshesAsTexturesDirty;
48
63
  /** @internal */
49
64
  _markAllSubMeshesAsTexturesDirty(): void;
65
+ /** @internal */
66
+ private _internalMarkAllSubMeshesAsMiscDirty;
67
+ /** @internal */
68
+ _markAllSubMeshesAsMiscDirty(): void;
50
69
  constructor(material: PBRBaseMaterial, addToPluginList?: boolean);
51
70
  isReadyForSubMesh(defines: MaterialAnisotropicDefines, scene: Scene): boolean;
52
71
  prepareDefinesBeforeAttributes(defines: MaterialAnisotropicDefines, scene: Scene, mesh: AbstractMesh): void;
@@ -67,5 +86,12 @@ export declare class PBRAnisotropicConfiguration extends MaterialPluginBase {
67
86
  vertex?: string;
68
87
  fragment?: string;
69
88
  };
89
+ /**
90
+ * Parses a anisotropy Configuration from a serialized object.
91
+ * @param source - Serialized object.
92
+ * @param scene Defines the scene we are parsing for
93
+ * @param rootUrl Defines the rootUrl to load from
94
+ */
95
+ parse(source: any, scene: Scene, rootUrl: string): void;
70
96
  }
71
97
  export {};
@@ -17,6 +17,7 @@ export class MaterialAnisotropicDefines extends MaterialDefines {
17
17
  this.ANISOTROPIC = false;
18
18
  this.ANISOTROPIC_TEXTURE = false;
19
19
  this.ANISOTROPIC_TEXTUREDIRECTUV = 0;
20
+ this.ANISOTROPIC_LEGACY = false;
20
21
  this.MAINUV1 = false;
21
22
  }
22
23
  }
@@ -24,11 +25,30 @@ export class MaterialAnisotropicDefines extends MaterialDefines {
24
25
  * Plugin that implements the anisotropic component of the PBR material
25
26
  */
26
27
  export class PBRAnisotropicConfiguration extends MaterialPluginBase {
28
+ /**
29
+ * Sets the anisotropy direction as an angle.
30
+ */
31
+ set angle(value) {
32
+ this.direction.x = Math.cos(value);
33
+ this.direction.y = Math.sin(value);
34
+ }
35
+ /**
36
+ * Gets the anisotropy angle value in radians.
37
+ * @returns the anisotropy angle value in radians.
38
+ */
39
+ get angle() {
40
+ return Math.atan2(this.direction.y, this.direction.x);
41
+ }
27
42
  /** @internal */
28
43
  _markAllSubMeshesAsTexturesDirty() {
29
44
  this._enable(this._isEnabled);
30
45
  this._internalMarkAllSubMeshesAsTexturesDirty();
31
46
  }
47
+ /** @internal */
48
+ _markAllSubMeshesAsMiscDirty() {
49
+ this._enable(this._isEnabled);
50
+ this._internalMarkAllSubMeshesAsMiscDirty();
51
+ }
32
52
  constructor(material, addToPluginList = true) {
33
53
  super(material, "PBRAnisotropic", 110, new MaterialAnisotropicDefines(), addToPluginList);
34
54
  this._isEnabled = false;
@@ -52,7 +72,13 @@ export class PBRAnisotropicConfiguration extends MaterialPluginBase {
52
72
  * b is a intensity
53
73
  */
54
74
  this.texture = null;
75
+ this._legacy = false;
76
+ /**
77
+ * Defines if the anisotropy is in legacy mode for backwards compatibility before 6.4.0.
78
+ */
79
+ this.legacy = false;
55
80
  this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[1];
81
+ this._internalMarkAllSubMeshesAsMiscDirty = material._dirtyCallbacks[16];
56
82
  }
57
83
  isReadyForSubMesh(defines, scene) {
58
84
  if (!this._isEnabled) {
@@ -86,11 +112,15 @@ export class PBRAnisotropicConfiguration extends MaterialPluginBase {
86
112
  }
87
113
  }
88
114
  }
115
+ if (defines._areMiscDirty) {
116
+ defines.ANISOTROPIC_LEGACY = this._legacy;
117
+ }
89
118
  }
90
119
  else {
91
120
  defines.ANISOTROPIC = false;
92
121
  defines.ANISOTROPIC_TEXTURE = false;
93
122
  defines.ANISOTROPIC_TEXTUREDIRECTUV = 0;
123
+ defines.ANISOTROPIC_LEGACY = false;
94
124
  }
95
125
  }
96
126
  bindForSubMesh(uniformBuffer, scene) {
@@ -157,6 +187,19 @@ export class PBRAnisotropicConfiguration extends MaterialPluginBase {
157
187
  ],
158
188
  };
159
189
  }
190
+ /**
191
+ * Parses a anisotropy Configuration from a serialized object.
192
+ * @param source - Serialized object.
193
+ * @param scene Defines the scene we are parsing for
194
+ * @param rootUrl Defines the rootUrl to load from
195
+ */
196
+ parse(source, scene, rootUrl) {
197
+ super.parse(source, scene, rootUrl);
198
+ // Backward compatibility
199
+ if (source.legacy === undefined) {
200
+ this.legacy = true;
201
+ }
202
+ }
160
203
  }
161
204
  __decorate([
162
205
  serialize(),
@@ -172,4 +215,8 @@ __decorate([
172
215
  serializeAsTexture(),
173
216
  expandToProperty("_markAllSubMeshesAsTexturesDirty")
174
217
  ], PBRAnisotropicConfiguration.prototype, "texture", void 0);
218
+ __decorate([
219
+ serialize(),
220
+ expandToProperty("_markAllSubMeshesAsMiscDirty")
221
+ ], PBRAnisotropicConfiguration.prototype, "legacy", void 0);
175
222
  //# sourceMappingURL=pbrAnisotropicConfiguration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pbrAnisotropicConfiguration.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Materials/PBR/pbrAnisotropicConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serialize, expandToProperty, serializeAsVector2, serializeAsTexture } from \"../../Misc/decorators\";\r\nimport type { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { Vector2 } from \"../../Maths/math.vector\";\r\nimport { MaterialFlags } from \"../../Materials/materialFlags\";\r\nimport { MaterialHelper } from \"../../Materials/materialHelper\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { IAnimatable } from \"../../Animations/animatable.interface\";\r\nimport type { EffectFallbacks } from \"../effectFallbacks\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { MaterialDefines } from \"../materialDefines\";\r\n\r\ndeclare type Scene = import(\"../../scene\").Scene;\r\ndeclare type AbstractMesh = import(\"../../Meshes/abstractMesh\").AbstractMesh;\r\ndeclare type PBRBaseMaterial = import(\"./pbrBaseMaterial\").PBRBaseMaterial;\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class MaterialAnisotropicDefines extends MaterialDefines {\r\n public ANISOTROPIC = false;\r\n public ANISOTROPIC_TEXTURE = false;\r\n public ANISOTROPIC_TEXTUREDIRECTUV = 0;\r\n public MAINUV1 = false;\r\n}\r\n\r\n/**\r\n * Plugin that implements the anisotropic component of the PBR material\r\n */\r\nexport class PBRAnisotropicConfiguration extends MaterialPluginBase {\r\n private _isEnabled = false;\r\n /**\r\n * Defines if the anisotropy is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isEnabled = false;\r\n\r\n /**\r\n * Defines the anisotropy strength (between 0 and 1) it defaults to 1.\r\n */\r\n @serialize()\r\n public intensity: number = 1;\r\n\r\n /**\r\n * Defines if the effect is along the tangents, bitangents or in between.\r\n * By default, the effect is \"stretching\" the highlights along the tangents.\r\n */\r\n @serializeAsVector2()\r\n public direction = new Vector2(1, 0);\r\n\r\n private _texture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the anisotropy values in a texture.\r\n * rg is direction (like normal from -1 to 1)\r\n * b is a intensity\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public texture: Nullable<BaseTexture> = null;\r\n\r\n /** @internal */\r\n private _internalMarkAllSubMeshesAsTexturesDirty: () => void;\r\n\r\n /** @internal */\r\n public _markAllSubMeshesAsTexturesDirty(): void {\r\n this._enable(this._isEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n }\r\n\r\n constructor(material: PBRBaseMaterial, addToPluginList = true) {\r\n super(material, \"PBRAnisotropic\", 110, new MaterialAnisotropicDefines(), addToPluginList);\r\n\r\n this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag];\r\n }\r\n\r\n public isReadyForSubMesh(defines: MaterialAnisotropicDefines, scene: Scene): boolean {\r\n if (!this._isEnabled) {\r\n return true;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._texture && MaterialFlags.AnisotropicTextureEnabled) {\r\n if (!this._texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public prepareDefinesBeforeAttributes(defines: MaterialAnisotropicDefines, scene: Scene, mesh: AbstractMesh): void {\r\n if (this._isEnabled) {\r\n defines.ANISOTROPIC = this._isEnabled;\r\n if (this._isEnabled && !mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n defines._needUVs = true;\r\n defines.MAINUV1 = true;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._texture && MaterialFlags.AnisotropicTextureEnabled) {\r\n MaterialHelper.PrepareDefinesForMergedUV(this._texture, defines, \"ANISOTROPIC_TEXTURE\");\r\n } else {\r\n defines.ANISOTROPIC_TEXTURE = false;\r\n }\r\n }\r\n }\r\n } else {\r\n defines.ANISOTROPIC = false;\r\n defines.ANISOTROPIC_TEXTURE = false;\r\n defines.ANISOTROPIC_TEXTUREDIRECTUV = 0;\r\n }\r\n }\r\n\r\n public bindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n\r\n const isFrozen = this._material.isFrozen;\r\n\r\n if (!uniformBuffer.useUbo || !isFrozen || !uniformBuffer.isSync) {\r\n if (this._texture && MaterialFlags.AnisotropicTextureEnabled) {\r\n uniformBuffer.updateFloat2(\"vAnisotropyInfos\", this._texture.coordinatesIndex, this._texture.level);\r\n MaterialHelper.BindTextureMatrix(this._texture, uniformBuffer, \"anisotropy\");\r\n }\r\n\r\n // Anisotropy\r\n uniformBuffer.updateFloat3(\"vAnisotropy\", this.direction.x, this.direction.y, this.intensity);\r\n }\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n if (this._texture && MaterialFlags.AnisotropicTextureEnabled) {\r\n uniformBuffer.setTexture(\"anisotropySampler\", this._texture);\r\n }\r\n }\r\n }\r\n\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (this._texture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public getActiveTextures(activeTextures: BaseTexture[]): void {\r\n if (this._texture) {\r\n activeTextures.push(this._texture);\r\n }\r\n }\r\n\r\n public getAnimatables(animatables: IAnimatable[]): void {\r\n if (this._texture && this._texture.animations && this._texture.animations.length > 0) {\r\n animatables.push(this._texture);\r\n }\r\n }\r\n\r\n public dispose(forceDisposeTextures?: boolean): void {\r\n if (forceDisposeTextures) {\r\n if (this._texture) {\r\n this._texture.dispose();\r\n }\r\n }\r\n }\r\n\r\n public getClassName(): string {\r\n return \"PBRAnisotropicConfiguration\";\r\n }\r\n\r\n public addFallbacks(defines: MaterialAnisotropicDefines, fallbacks: EffectFallbacks, currentRank: number): number {\r\n if (defines.ANISOTROPIC) {\r\n fallbacks.addFallback(currentRank++, \"ANISOTROPIC\");\r\n }\r\n return currentRank;\r\n }\r\n\r\n public getSamplers(samplers: string[]): void {\r\n samplers.push(\"anisotropySampler\");\r\n }\r\n\r\n public getUniforms(): { ubo?: Array<{ name: string; size: number; type: string }>; vertex?: string; fragment?: string } {\r\n return {\r\n ubo: [\r\n { name: \"vAnisotropy\", size: 3, type: \"vec3\" },\r\n { name: \"vAnisotropyInfos\", size: 2, type: \"vec2\" },\r\n { name: \"anisotropyMatrix\", size: 16, type: \"mat4\" },\r\n ],\r\n };\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"pbrAnisotropicConfiguration.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Materials/PBR/pbrAnisotropicConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serialize, expandToProperty, serializeAsVector2, serializeAsTexture } from \"../../Misc/decorators\";\r\nimport type { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { Vector2 } from \"../../Maths/math.vector\";\r\nimport { MaterialFlags } from \"../../Materials/materialFlags\";\r\nimport { MaterialHelper } from \"../../Materials/materialHelper\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { IAnimatable } from \"../../Animations/animatable.interface\";\r\nimport type { EffectFallbacks } from \"../effectFallbacks\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { MaterialDefines } from \"../materialDefines\";\r\n\r\ndeclare type Scene = import(\"../../scene\").Scene;\r\ndeclare type AbstractMesh = import(\"../../Meshes/abstractMesh\").AbstractMesh;\r\ndeclare type PBRBaseMaterial = import(\"./pbrBaseMaterial\").PBRBaseMaterial;\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class MaterialAnisotropicDefines extends MaterialDefines {\r\n public ANISOTROPIC = false;\r\n public ANISOTROPIC_TEXTURE = false;\r\n public ANISOTROPIC_TEXTUREDIRECTUV = 0;\r\n public ANISOTROPIC_LEGACY = false;\r\n public MAINUV1 = false;\r\n}\r\n\r\n/**\r\n * Plugin that implements the anisotropic component of the PBR material\r\n */\r\nexport class PBRAnisotropicConfiguration extends MaterialPluginBase {\r\n private _isEnabled = false;\r\n /**\r\n * Defines if the anisotropy is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isEnabled = false;\r\n\r\n /**\r\n * Defines the anisotropy strength (between 0 and 1) it defaults to 1.\r\n */\r\n @serialize()\r\n public intensity: number = 1;\r\n\r\n /**\r\n * Defines if the effect is along the tangents, bitangents or in between.\r\n * By default, the effect is \"stretching\" the highlights along the tangents.\r\n */\r\n @serializeAsVector2()\r\n public direction = new Vector2(1, 0);\r\n\r\n /**\r\n * Sets the anisotropy direction as an angle.\r\n */\r\n public set angle(value: number) {\r\n this.direction.x = Math.cos(value);\r\n this.direction.y = Math.sin(value);\r\n }\r\n\r\n /**\r\n * Gets the anisotropy angle value in radians.\r\n * @returns the anisotropy angle value in radians.\r\n */\r\n public get angle(): number {\r\n return Math.atan2(this.direction.y, this.direction.x);\r\n }\r\n\r\n private _texture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the anisotropy values in a texture.\r\n * rg is direction (like normal from -1 to 1)\r\n * b is a intensity\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public texture: Nullable<BaseTexture> = null;\r\n\r\n private _legacy = false;\r\n /**\r\n * Defines if the anisotropy is in legacy mode for backwards compatibility before 6.4.0.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public legacy: boolean = false;\r\n\r\n /** @internal */\r\n private _internalMarkAllSubMeshesAsTexturesDirty: () => void;\r\n\r\n /** @internal */\r\n public _markAllSubMeshesAsTexturesDirty(): void {\r\n this._enable(this._isEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n }\r\n\r\n /** @internal */\r\n private _internalMarkAllSubMeshesAsMiscDirty: () => void;\r\n\r\n /** @internal */\r\n public _markAllSubMeshesAsMiscDirty(): void {\r\n this._enable(this._isEnabled);\r\n this._internalMarkAllSubMeshesAsMiscDirty();\r\n }\r\n\r\n constructor(material: PBRBaseMaterial, addToPluginList = true) {\r\n super(material, \"PBRAnisotropic\", 110, new MaterialAnisotropicDefines(), addToPluginList);\r\n\r\n this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag];\r\n this._internalMarkAllSubMeshesAsMiscDirty = material._dirtyCallbacks[Constants.MATERIAL_MiscDirtyFlag];\r\n }\r\n\r\n public isReadyForSubMesh(defines: MaterialAnisotropicDefines, scene: Scene): boolean {\r\n if (!this._isEnabled) {\r\n return true;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._texture && MaterialFlags.AnisotropicTextureEnabled) {\r\n if (!this._texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public prepareDefinesBeforeAttributes(defines: MaterialAnisotropicDefines, scene: Scene, mesh: AbstractMesh): void {\r\n if (this._isEnabled) {\r\n defines.ANISOTROPIC = this._isEnabled;\r\n if (this._isEnabled && !mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n defines._needUVs = true;\r\n defines.MAINUV1 = true;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._texture && MaterialFlags.AnisotropicTextureEnabled) {\r\n MaterialHelper.PrepareDefinesForMergedUV(this._texture, defines, \"ANISOTROPIC_TEXTURE\");\r\n } else {\r\n defines.ANISOTROPIC_TEXTURE = false;\r\n }\r\n }\r\n }\r\n\r\n if (defines._areMiscDirty) {\r\n defines.ANISOTROPIC_LEGACY = this._legacy;\r\n }\r\n } else {\r\n defines.ANISOTROPIC = false;\r\n defines.ANISOTROPIC_TEXTURE = false;\r\n defines.ANISOTROPIC_TEXTUREDIRECTUV = 0;\r\n defines.ANISOTROPIC_LEGACY = false;\r\n }\r\n }\r\n\r\n public bindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n\r\n const isFrozen = this._material.isFrozen;\r\n\r\n if (!uniformBuffer.useUbo || !isFrozen || !uniformBuffer.isSync) {\r\n if (this._texture && MaterialFlags.AnisotropicTextureEnabled) {\r\n uniformBuffer.updateFloat2(\"vAnisotropyInfos\", this._texture.coordinatesIndex, this._texture.level);\r\n MaterialHelper.BindTextureMatrix(this._texture, uniformBuffer, \"anisotropy\");\r\n }\r\n\r\n // Anisotropy\r\n uniformBuffer.updateFloat3(\"vAnisotropy\", this.direction.x, this.direction.y, this.intensity);\r\n }\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n if (this._texture && MaterialFlags.AnisotropicTextureEnabled) {\r\n uniformBuffer.setTexture(\"anisotropySampler\", this._texture);\r\n }\r\n }\r\n }\r\n\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (this._texture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public getActiveTextures(activeTextures: BaseTexture[]): void {\r\n if (this._texture) {\r\n activeTextures.push(this._texture);\r\n }\r\n }\r\n\r\n public getAnimatables(animatables: IAnimatable[]): void {\r\n if (this._texture && this._texture.animations && this._texture.animations.length > 0) {\r\n animatables.push(this._texture);\r\n }\r\n }\r\n\r\n public dispose(forceDisposeTextures?: boolean): void {\r\n if (forceDisposeTextures) {\r\n if (this._texture) {\r\n this._texture.dispose();\r\n }\r\n }\r\n }\r\n\r\n public getClassName(): string {\r\n return \"PBRAnisotropicConfiguration\";\r\n }\r\n\r\n public addFallbacks(defines: MaterialAnisotropicDefines, fallbacks: EffectFallbacks, currentRank: number): number {\r\n if (defines.ANISOTROPIC) {\r\n fallbacks.addFallback(currentRank++, \"ANISOTROPIC\");\r\n }\r\n return currentRank;\r\n }\r\n\r\n public getSamplers(samplers: string[]): void {\r\n samplers.push(\"anisotropySampler\");\r\n }\r\n\r\n public getUniforms(): { ubo?: Array<{ name: string; size: number; type: string }>; vertex?: string; fragment?: string } {\r\n return {\r\n ubo: [\r\n { name: \"vAnisotropy\", size: 3, type: \"vec3\" },\r\n { name: \"vAnisotropyInfos\", size: 2, type: \"vec2\" },\r\n { name: \"anisotropyMatrix\", size: 16, type: \"mat4\" },\r\n ],\r\n };\r\n }\r\n\r\n /**\r\n * Parses a anisotropy Configuration from a serialized object.\r\n * @param source - Serialized object.\r\n * @param scene Defines the scene we are parsing for\r\n * @param rootUrl Defines the rootUrl to load from\r\n */\r\n public parse(source: any, scene: Scene, rootUrl: string): void {\r\n super.parse(source, scene, rootUrl);\r\n\r\n // Backward compatibility\r\n if (source.legacy === undefined) {\r\n this.legacy = true;\r\n }\r\n }\r\n}\r\n"]}
@@ -92,7 +92,6 @@ export class MultiRenderTarget extends RenderTargetTexture {
92
92
  this._initTypes(count, types, samplingModes, useSRGBBuffers, formats, targetTypes, faceIndex, layerIndex, layerCounts, options);
93
93
  const generateDepthBuffer = !options || options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;
94
94
  const generateStencilBuffer = !options || options.generateStencilBuffer === undefined ? false : options.generateStencilBuffer;
95
- this._size = size;
96
95
  this._multiRenderTargetOptions = {
97
96
  samplingModes: samplingModes,
98
97
  generateMipMaps: generateMipMaps,
@@ -351,7 +350,7 @@ export class MultiRenderTarget extends RenderTargetTexture {
351
350
  * @param size Define the new size
352
351
  */
353
352
  resize(size) {
354
- this._size = size;
353
+ this._processSizeParameter(size, false);
355
354
  this._rebuild(undefined, this._textureNames);
356
355
  }
357
356
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"multiRenderTarget.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Materials/Textures/multiRenderTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../../scene\";\r\nimport type { Engine } from \"../../Engines/engine\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\n\r\nimport \"../../Engines/Extensions/engine.multiRender\";\r\nimport type { InternalTexture } from \"./internalTexture\";\r\n\r\n/**\r\n * Creation options of the multi render target texture.\r\n */\r\nexport interface IMultiRenderTargetOptions {\r\n /**\r\n * Define if the texture needs to create mip maps after render.\r\n */\r\n generateMipMaps?: boolean;\r\n /**\r\n * Define the types of all the draw buffers we want to create\r\n */\r\n types?: number[];\r\n /**\r\n * Define the sampling modes of all the draw buffers we want to create\r\n */\r\n samplingModes?: number[];\r\n /**\r\n * Define if sRGB format should be used for each of the draw buffers we want to create\r\n */\r\n useSRGBBuffers?: boolean[];\r\n /**\r\n * Define if a depth buffer is required\r\n */\r\n generateDepthBuffer?: boolean;\r\n /**\r\n * Define if a stencil buffer is required\r\n */\r\n generateStencilBuffer?: boolean;\r\n /**\r\n * Define if a depth texture is required instead of a depth buffer\r\n */\r\n generateDepthTexture?: boolean;\r\n /**\r\n * Define the internal format of the buffer in the RTT (RED, RG, RGB, RGBA (default), ALPHA...) of all the draw buffers we want to create\r\n */\r\n formats?: number[];\r\n /**\r\n * Define depth texture format to use\r\n */\r\n depthTextureFormat?: number;\r\n /**\r\n * Define the number of desired draw buffers\r\n */\r\n textureCount?: number;\r\n /**\r\n * Define if aspect ratio should be adapted to the texture or stay the scene one\r\n */\r\n doNotChangeAspectRatio?: boolean;\r\n /**\r\n * Define the default type of the buffers we are creating\r\n */\r\n defaultType?: number;\r\n /**\r\n * Define the default type of the buffers we are creating\r\n */\r\n drawOnlyOnFirstAttachmentByDefault?: boolean;\r\n /**\r\n * Define the type of texture at each attahment index (of Constants.TEXTURE_2D, .TEXTURE_2D_ARRAY, .TEXTURE_CUBE_MAP, .TEXTURE_CUBE_MAP_ARRAY, .TEXTURE_3D).\r\n * You can also use the -1 value to indicate that no texture should be created but that you will assign a texture to that attachment index later.\r\n * Can be useful when you want to attach several layers of the same 2DArrayTexture / 3DTexture or several faces of the same CubeMapTexture: Use the setInternalTexture\r\n * method for that purpose, after the MultiRenderTarget has been created.\r\n */\r\n targetTypes?: number[];\r\n /**\r\n * Define the face index of each texture in the textures array (if applicable, given the corresponding targetType) at creation time (for Constants.TEXTURE_CUBE_MAP and .TEXTURE_CUBE_MAP_ARRAY).\r\n * Can be changed at any time by calling setLayerAndFaceIndices or setLayerAndFaceIndex\r\n */\r\n faceIndex?: number[];\r\n /**\r\n * Define the layer index of each texture in the textures array (if applicable, given the corresponding targetType) at creation time (for Constants.TEXTURE_3D, .TEXTURE_2D_ARRAY, and .TEXTURE_CUBE_MAP_ARRAY).\r\n * Can be changed at any time by calling setLayerAndFaceIndices or setLayerAndFaceIndex\r\n */\r\n layerIndex?: number[];\r\n /**\r\n * Define the number of layer of each texture in the textures array (if applicable, given the corresponding targetType) (for Constants.TEXTURE_3D, .TEXTURE_2D_ARRAY, and .TEXTURE_CUBE_MAP_ARRAY)\r\n */\r\n layerCounts?: number[];\r\n}\r\n\r\n/**\r\n * A multi render target, like a render target provides the ability to render to a texture.\r\n * Unlike the render target, it can render to several draw buffers in one draw.\r\n * This is specially interesting in deferred rendering or for any effects requiring more than\r\n * just one color from a single pass.\r\n */\r\nexport class MultiRenderTarget extends RenderTargetTexture {\r\n private _textures: Texture[];\r\n private _multiRenderTargetOptions: IMultiRenderTargetOptions;\r\n private _count: number;\r\n private _drawOnlyOnFirstAttachmentByDefault: boolean;\r\n private _textureNames?: string[];\r\n\r\n /**\r\n * Get if draw buffers are currently supported by the used hardware and browser.\r\n */\r\n public get isSupported(): boolean {\r\n return this._engine?.getCaps().drawBuffersExtension ?? false;\r\n }\r\n\r\n /**\r\n * Get the list of textures generated by the multi render target.\r\n */\r\n public get textures(): Texture[] {\r\n return this._textures;\r\n }\r\n\r\n /**\r\n * Gets the number of textures in this MRT. This number can be different from `_textures.length` in case a depth texture is generated.\r\n */\r\n public get count(): number {\r\n return this._count;\r\n }\r\n\r\n /**\r\n * Get the depth texture generated by the multi render target if options.generateDepthTexture has been set\r\n */\r\n public get depthTexture(): Texture {\r\n return this._textures[this._textures.length - 1];\r\n }\r\n\r\n /**\r\n * Set the wrapping mode on U of all the textures we are rendering to.\r\n * Can be any of the Texture. (CLAMP_ADDRESSMODE, MIRROR_ADDRESSMODE or WRAP_ADDRESSMODE)\r\n */\r\n public set wrapU(wrap: number) {\r\n if (this._textures) {\r\n for (let i = 0; i < this._textures.length; i++) {\r\n this._textures[i].wrapU = wrap;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set the wrapping mode on V of all the textures we are rendering to.\r\n * Can be any of the Texture. (CLAMP_ADDRESSMODE, MIRROR_ADDRESSMODE or WRAP_ADDRESSMODE)\r\n */\r\n public set wrapV(wrap: number) {\r\n if (this._textures) {\r\n for (let i = 0; i < this._textures.length; i++) {\r\n this._textures[i].wrapV = wrap;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Instantiate a new multi render target texture.\r\n * A multi render target, like a render target provides the ability to render to a texture.\r\n * Unlike the render target, it can render to several draw buffers in one draw.\r\n * This is specially interesting in deferred rendering or for any effects requiring more than\r\n * just one color from a single pass.\r\n * @param name Define the name of the texture\r\n * @param size Define the size of the buffers to render to\r\n * @param count Define the number of target we are rendering into\r\n * @param scene Define the scene the texture belongs to\r\n * @param options Define the options used to create the multi render target\r\n * @param textureNames Define the names to set to the textures (if count > 0 - optional)\r\n */\r\n constructor(name: string, size: any, count: number, scene?: Scene, options?: IMultiRenderTargetOptions, textureNames?: string[]) {\r\n const generateMipMaps = options && options.generateMipMaps ? options.generateMipMaps : false;\r\n const generateDepthTexture = options && options.generateDepthTexture ? options.generateDepthTexture : false;\r\n const depthTextureFormat = options && options.depthTextureFormat ? options.depthTextureFormat : Constants.TEXTUREFORMAT_DEPTH16;\r\n const doNotChangeAspectRatio = !options || options.doNotChangeAspectRatio === undefined ? true : options.doNotChangeAspectRatio;\r\n const drawOnlyOnFirstAttachmentByDefault = options && options.drawOnlyOnFirstAttachmentByDefault ? options.drawOnlyOnFirstAttachmentByDefault : false;\r\n super(name, size, scene, generateMipMaps, doNotChangeAspectRatio, undefined, undefined, undefined, undefined, undefined, undefined, undefined, true);\r\n\r\n if (!this.isSupported) {\r\n this.dispose();\r\n return;\r\n }\r\n\r\n this._textureNames = textureNames;\r\n\r\n const types: number[] = [];\r\n const samplingModes: number[] = [];\r\n const useSRGBBuffers: boolean[] = [];\r\n const formats: number[] = [];\r\n const targetTypes: number[] = [];\r\n const faceIndex: number[] = [];\r\n const layerIndex: number[] = [];\r\n const layerCounts: number[] = [];\r\n this._initTypes(count, types, samplingModes, useSRGBBuffers, formats, targetTypes, faceIndex, layerIndex, layerCounts, options);\r\n\r\n const generateDepthBuffer = !options || options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\r\n const generateStencilBuffer = !options || options.generateStencilBuffer === undefined ? false : options.generateStencilBuffer;\r\n\r\n this._size = size;\r\n this._multiRenderTargetOptions = {\r\n samplingModes: samplingModes,\r\n generateMipMaps: generateMipMaps,\r\n generateDepthBuffer: generateDepthBuffer,\r\n generateStencilBuffer: generateStencilBuffer,\r\n generateDepthTexture: generateDepthTexture,\r\n depthTextureFormat: depthTextureFormat,\r\n types: types,\r\n textureCount: count,\r\n useSRGBBuffers: useSRGBBuffers,\r\n formats: formats,\r\n targetTypes: targetTypes,\r\n faceIndex: faceIndex,\r\n layerIndex: layerIndex,\r\n layerCounts: layerCounts,\r\n };\r\n\r\n this._count = count;\r\n this._drawOnlyOnFirstAttachmentByDefault = drawOnlyOnFirstAttachmentByDefault;\r\n\r\n if (count > 0) {\r\n this._createInternalTextures();\r\n this._createTextures(textureNames);\r\n }\r\n }\r\n\r\n private _initTypes(\r\n count: number,\r\n types: number[],\r\n samplingModes: number[],\r\n useSRGBBuffers: boolean[],\r\n formats: number[],\r\n targets: number[],\r\n faceIndex: number[],\r\n layerIndex: number[],\r\n layerCounts: number[],\r\n options?: IMultiRenderTargetOptions\r\n ) {\r\n for (let i = 0; i < count; i++) {\r\n if (options && options.types && options.types[i] !== undefined) {\r\n types.push(options.types[i]);\r\n } else {\r\n types.push(options && options.defaultType ? options.defaultType : Constants.TEXTURETYPE_UNSIGNED_INT);\r\n }\r\n\r\n if (options && options.samplingModes && options.samplingModes[i] !== undefined) {\r\n samplingModes.push(options.samplingModes[i]);\r\n } else {\r\n samplingModes.push(Texture.BILINEAR_SAMPLINGMODE);\r\n }\r\n\r\n if (options && options.useSRGBBuffers && options.useSRGBBuffers[i] !== undefined) {\r\n useSRGBBuffers.push(options.useSRGBBuffers[i]);\r\n } else {\r\n useSRGBBuffers.push(false);\r\n }\r\n\r\n if (options && options.formats && options.formats[i] !== undefined) {\r\n formats.push(options.formats[i]);\r\n } else {\r\n formats.push(Constants.TEXTUREFORMAT_RGBA);\r\n }\r\n\r\n if (options && options.targetTypes && options.targetTypes[i] !== undefined) {\r\n targets.push(options.targetTypes[i]);\r\n } else {\r\n targets.push(Constants.TEXTURE_2D);\r\n }\r\n\r\n if (options && options.faceIndex && options.faceIndex[i] !== undefined) {\r\n faceIndex.push(options.faceIndex[i]);\r\n } else {\r\n faceIndex.push(0);\r\n }\r\n\r\n if (options && options.layerIndex && options.layerIndex[i] !== undefined) {\r\n layerIndex.push(options.layerIndex[i]);\r\n } else {\r\n layerIndex.push(0);\r\n }\r\n\r\n if (options && options.layerCounts && options.layerCounts[i] !== undefined) {\r\n layerCounts.push(options.layerCounts[i]);\r\n } else {\r\n layerCounts.push(1);\r\n }\r\n }\r\n }\r\n\r\n private _createInternaTextureIndexMapping() {\r\n const mapMainInternalTexture2Index: { [key: number]: number } = {};\r\n const mapInternalTexture2MainIndex: number[] = [];\r\n\r\n if (!this._renderTarget) {\r\n return mapInternalTexture2MainIndex;\r\n }\r\n\r\n const internalTextures = this._renderTarget!.textures!;\r\n for (let i = 0; i < internalTextures.length; i++) {\r\n const texture = internalTextures[i];\r\n if (!texture) {\r\n continue;\r\n }\r\n const mainIndex = mapMainInternalTexture2Index[texture.uniqueId];\r\n if (mainIndex !== undefined) {\r\n mapInternalTexture2MainIndex[i] = mainIndex;\r\n } else {\r\n mapMainInternalTexture2Index[texture.uniqueId] = i;\r\n }\r\n }\r\n\r\n return mapInternalTexture2MainIndex;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _rebuild(forceFullRebuild: boolean = false, textureNames?: string[]): void {\r\n if (this._count < 1) {\r\n return;\r\n }\r\n\r\n const mapInternalTexture2MainIndex = this._createInternaTextureIndexMapping();\r\n\r\n this.releaseInternalTextures();\r\n this._createInternalTextures();\r\n\r\n if (forceFullRebuild) {\r\n this._releaseTextures();\r\n this._createTextures(textureNames);\r\n }\r\n\r\n const internalTextures = this._renderTarget!.textures!;\r\n for (let i = 0; i < internalTextures.length; i++) {\r\n const texture = this._textures[i];\r\n if (mapInternalTexture2MainIndex[i] !== undefined) {\r\n this._renderTarget!.setTexture(internalTextures[mapInternalTexture2MainIndex[i]], i);\r\n }\r\n texture._texture = internalTextures[i];\r\n if (texture._texture) {\r\n texture._noMipmap = !texture._texture.useMipMaps;\r\n texture._useSRGBBuffer = texture._texture._useSRGBBuffer;\r\n }\r\n }\r\n\r\n if (this.samples !== 1) {\r\n this._renderTarget!.setSamples(this.samples, !this._drawOnlyOnFirstAttachmentByDefault, true);\r\n }\r\n }\r\n\r\n private _createInternalTextures(): void {\r\n this._renderTarget = this._getEngine()!.createMultipleRenderTarget(this._size, this._multiRenderTargetOptions, !this._drawOnlyOnFirstAttachmentByDefault);\r\n this._texture = this._renderTarget.texture;\r\n }\r\n\r\n private _releaseTextures(): void {\r\n if (this._textures) {\r\n for (let i = 0; i < this._textures.length; i++) {\r\n this._textures[i]._texture = null; // internal textures are released by a call to releaseInternalTextures()\r\n this._textures[i].dispose();\r\n }\r\n }\r\n }\r\n\r\n private _createTextures(textureNames?: string[]): void {\r\n const internalTextures = this._renderTarget!.textures!;\r\n this._textures = [];\r\n for (let i = 0; i < internalTextures.length; i++) {\r\n const texture = new Texture(null, this.getScene());\r\n if (textureNames?.[i]) {\r\n texture.name = textureNames[i];\r\n }\r\n texture._texture = internalTextures[i];\r\n if (texture._texture) {\r\n texture._noMipmap = !texture._texture.useMipMaps;\r\n texture._useSRGBBuffer = texture._texture._useSRGBBuffer;\r\n }\r\n this._textures.push(texture);\r\n }\r\n }\r\n\r\n /**\r\n * Replaces an internal texture within the MRT. Useful to share textures between MultiRenderTarget.\r\n * @param texture The new texture to set in the MRT\r\n * @param index The index of the texture to replace\r\n * @param disposePrevious Set to true if the previous internal texture should be disposed\r\n */\r\n public setInternalTexture(texture: InternalTexture, index: number, disposePrevious: boolean = true) {\r\n if (!this.renderTarget) {\r\n return;\r\n }\r\n\r\n if (index === 0) {\r\n this._texture = texture;\r\n }\r\n\r\n this.renderTarget.setTexture(texture, index, disposePrevious);\r\n\r\n if (!this.textures[index]) {\r\n this.textures[index] = new Texture(null, this.getScene());\r\n this.textures[index].name = this._textureNames?.[index] ?? this.textures[index].name;\r\n }\r\n this.textures[index]._texture = texture;\r\n this.textures[index]._noMipmap = !texture.useMipMaps;\r\n this.textures[index]._useSRGBBuffer = texture._useSRGBBuffer;\r\n\r\n this._count = this.renderTarget.textures ? this.renderTarget.textures.length : 0;\r\n\r\n if (this._multiRenderTargetOptions.types) {\r\n this._multiRenderTargetOptions.types[index] = texture.type;\r\n }\r\n if (this._multiRenderTargetOptions.samplingModes) {\r\n this._multiRenderTargetOptions.samplingModes[index] = texture.samplingMode;\r\n }\r\n if (this._multiRenderTargetOptions.useSRGBBuffers) {\r\n this._multiRenderTargetOptions.useSRGBBuffers[index] = texture._useSRGBBuffer;\r\n }\r\n if (this._multiRenderTargetOptions.targetTypes && this._multiRenderTargetOptions.targetTypes[index] !== -1) {\r\n let target: number = 0;\r\n if (texture.is2DArray) {\r\n target = Constants.TEXTURE_2D_ARRAY;\r\n } else if (texture.isCube) {\r\n target = Constants.TEXTURE_CUBE_MAP;\r\n } /*else if (texture.isCubeArray) {\r\n target = Constants.TEXTURE_CUBE_MAP_ARRAY;\r\n }*/ else if (texture.is3D) {\r\n target = Constants.TEXTURE_3D;\r\n } else {\r\n target = Constants.TEXTURE_2D;\r\n }\r\n this._multiRenderTargetOptions.targetTypes[index] = target;\r\n }\r\n }\r\n\r\n /**\r\n * Changes an attached texture's face index or layer.\r\n * @param index The index of the texture to modify the attachment of\r\n * @param layerIndex The layer index of the texture to be attached to the framebuffer\r\n * @param faceIndex The face index of the texture to be attached to the framebuffer\r\n */\r\n public setLayerAndFaceIndex(index: number, layerIndex: number = -1, faceIndex: number = -1) {\r\n if (!this.textures[index] || !this.renderTarget) {\r\n return;\r\n }\r\n\r\n if (this._multiRenderTargetOptions.layerIndex) {\r\n this._multiRenderTargetOptions.layerIndex[index] = layerIndex;\r\n }\r\n if (this._multiRenderTargetOptions.faceIndex) {\r\n this._multiRenderTargetOptions.faceIndex[index] = faceIndex;\r\n }\r\n\r\n this.renderTarget.setLayerAndFaceIndex(index, layerIndex, faceIndex);\r\n }\r\n\r\n /**\r\n * Changes every attached texture's face index or layer.\r\n * @param layerIndices The layer indices of the texture to be attached to the framebuffer\r\n * @param faceIndices The face indices of the texture to be attached to the framebuffer\r\n */\r\n public setLayerAndFaceIndices(layerIndices: number[], faceIndices: number[]) {\r\n if (!this.renderTarget) {\r\n return;\r\n }\r\n\r\n this._multiRenderTargetOptions.layerIndex = layerIndices;\r\n this._multiRenderTargetOptions.faceIndex = faceIndices;\r\n\r\n this.renderTarget.setLayerAndFaceIndices(layerIndices, faceIndices);\r\n }\r\n\r\n /**\r\n * Define the number of samples used if MSAA is enabled.\r\n */\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n public set samples(value: number) {\r\n if (this._renderTarget) {\r\n this._samples = this._renderTarget.setSamples(value);\r\n } else {\r\n // In case samples are set with 0 textures created, we must save the desired samples value\r\n this._samples = value;\r\n }\r\n }\r\n\r\n /**\r\n * Resize all the textures in the multi render target.\r\n * Be careful as it will recreate all the data in the new texture.\r\n * @param size Define the new size\r\n */\r\n public resize(size: any) {\r\n this._size = size;\r\n this._rebuild(undefined, this._textureNames);\r\n }\r\n\r\n /**\r\n * Changes the number of render targets in this MRT\r\n * Be careful as it will recreate all the data in the new texture.\r\n * @param count new texture count\r\n * @param options Specifies texture types and sampling modes for new textures\r\n * @param textureNames Specifies the names of the textures (optional)\r\n */\r\n public updateCount(count: number, options?: IMultiRenderTargetOptions, textureNames?: string[]) {\r\n this._multiRenderTargetOptions.textureCount = count;\r\n this._count = count;\r\n\r\n const types: number[] = [];\r\n const samplingModes: number[] = [];\r\n const useSRGBBuffers: boolean[] = [];\r\n const formats: number[] = [];\r\n const targetTypes: number[] = [];\r\n const faceIndex: number[] = [];\r\n const layerIndex: number[] = [];\r\n const layerCounts: number[] = [];\r\n\r\n this._textureNames = textureNames;\r\n\r\n this._initTypes(count, types, samplingModes, useSRGBBuffers, formats, targetTypes, faceIndex, layerIndex, layerCounts, options);\r\n this._multiRenderTargetOptions.types = types;\r\n this._multiRenderTargetOptions.samplingModes = samplingModes;\r\n this._multiRenderTargetOptions.useSRGBBuffers = useSRGBBuffers;\r\n this._multiRenderTargetOptions.formats = formats;\r\n this._multiRenderTargetOptions.targetTypes = targetTypes;\r\n this._multiRenderTargetOptions.faceIndex = faceIndex;\r\n this._multiRenderTargetOptions.layerIndex = layerIndex;\r\n this._multiRenderTargetOptions.layerCounts = layerCounts;\r\n\r\n this._rebuild(true, textureNames);\r\n }\r\n\r\n protected _unbindFrameBuffer(engine: Engine, faceIndex: number): void {\r\n if (this._renderTarget) {\r\n engine.unBindMultiColorAttachmentFramebuffer(this._renderTarget, this.isCube, () => {\r\n this.onAfterRenderObservable.notifyObservers(faceIndex);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the render targets and their associated resources\r\n * @param doNotDisposeInternalTextures\r\n */\r\n public dispose(doNotDisposeInternalTextures = false): void {\r\n this._releaseTextures();\r\n if (!doNotDisposeInternalTextures) {\r\n this.releaseInternalTextures();\r\n } else {\r\n // Prevent internal texture dispose in super.dispose\r\n this._texture = null;\r\n }\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Release all the underlying texture used as draw buffers.\r\n */\r\n public releaseInternalTextures(): void {\r\n const internalTextures = this._renderTarget?.textures;\r\n\r\n if (!internalTextures) {\r\n return;\r\n }\r\n\r\n for (let i = internalTextures.length - 1; i >= 0; i--) {\r\n this._textures[i]._texture = null;\r\n }\r\n\r\n this._renderTarget?.dispose();\r\n this._renderTarget = null;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"multiRenderTarget.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Materials/Textures/multiRenderTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../../scene\";\r\nimport type { Engine } from \"../../Engines/engine\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\n\r\nimport \"../../Engines/Extensions/engine.multiRender\";\r\nimport type { InternalTexture } from \"./internalTexture\";\r\n\r\n/**\r\n * Creation options of the multi render target texture.\r\n */\r\nexport interface IMultiRenderTargetOptions {\r\n /**\r\n * Define if the texture needs to create mip maps after render.\r\n */\r\n generateMipMaps?: boolean;\r\n /**\r\n * Define the types of all the draw buffers we want to create\r\n */\r\n types?: number[];\r\n /**\r\n * Define the sampling modes of all the draw buffers we want to create\r\n */\r\n samplingModes?: number[];\r\n /**\r\n * Define if sRGB format should be used for each of the draw buffers we want to create\r\n */\r\n useSRGBBuffers?: boolean[];\r\n /**\r\n * Define if a depth buffer is required\r\n */\r\n generateDepthBuffer?: boolean;\r\n /**\r\n * Define if a stencil buffer is required\r\n */\r\n generateStencilBuffer?: boolean;\r\n /**\r\n * Define if a depth texture is required instead of a depth buffer\r\n */\r\n generateDepthTexture?: boolean;\r\n /**\r\n * Define the internal format of the buffer in the RTT (RED, RG, RGB, RGBA (default), ALPHA...) of all the draw buffers we want to create\r\n */\r\n formats?: number[];\r\n /**\r\n * Define depth texture format to use\r\n */\r\n depthTextureFormat?: number;\r\n /**\r\n * Define the number of desired draw buffers\r\n */\r\n textureCount?: number;\r\n /**\r\n * Define if aspect ratio should be adapted to the texture or stay the scene one\r\n */\r\n doNotChangeAspectRatio?: boolean;\r\n /**\r\n * Define the default type of the buffers we are creating\r\n */\r\n defaultType?: number;\r\n /**\r\n * Define the default type of the buffers we are creating\r\n */\r\n drawOnlyOnFirstAttachmentByDefault?: boolean;\r\n /**\r\n * Define the type of texture at each attahment index (of Constants.TEXTURE_2D, .TEXTURE_2D_ARRAY, .TEXTURE_CUBE_MAP, .TEXTURE_CUBE_MAP_ARRAY, .TEXTURE_3D).\r\n * You can also use the -1 value to indicate that no texture should be created but that you will assign a texture to that attachment index later.\r\n * Can be useful when you want to attach several layers of the same 2DArrayTexture / 3DTexture or several faces of the same CubeMapTexture: Use the setInternalTexture\r\n * method for that purpose, after the MultiRenderTarget has been created.\r\n */\r\n targetTypes?: number[];\r\n /**\r\n * Define the face index of each texture in the textures array (if applicable, given the corresponding targetType) at creation time (for Constants.TEXTURE_CUBE_MAP and .TEXTURE_CUBE_MAP_ARRAY).\r\n * Can be changed at any time by calling setLayerAndFaceIndices or setLayerAndFaceIndex\r\n */\r\n faceIndex?: number[];\r\n /**\r\n * Define the layer index of each texture in the textures array (if applicable, given the corresponding targetType) at creation time (for Constants.TEXTURE_3D, .TEXTURE_2D_ARRAY, and .TEXTURE_CUBE_MAP_ARRAY).\r\n * Can be changed at any time by calling setLayerAndFaceIndices or setLayerAndFaceIndex\r\n */\r\n layerIndex?: number[];\r\n /**\r\n * Define the number of layer of each texture in the textures array (if applicable, given the corresponding targetType) (for Constants.TEXTURE_3D, .TEXTURE_2D_ARRAY, and .TEXTURE_CUBE_MAP_ARRAY)\r\n */\r\n layerCounts?: number[];\r\n}\r\n\r\n/**\r\n * A multi render target, like a render target provides the ability to render to a texture.\r\n * Unlike the render target, it can render to several draw buffers in one draw.\r\n * This is specially interesting in deferred rendering or for any effects requiring more than\r\n * just one color from a single pass.\r\n */\r\nexport class MultiRenderTarget extends RenderTargetTexture {\r\n private _textures: Texture[];\r\n private _multiRenderTargetOptions: IMultiRenderTargetOptions;\r\n private _count: number;\r\n private _drawOnlyOnFirstAttachmentByDefault: boolean;\r\n private _textureNames?: string[];\r\n\r\n /**\r\n * Get if draw buffers are currently supported by the used hardware and browser.\r\n */\r\n public get isSupported(): boolean {\r\n return this._engine?.getCaps().drawBuffersExtension ?? false;\r\n }\r\n\r\n /**\r\n * Get the list of textures generated by the multi render target.\r\n */\r\n public get textures(): Texture[] {\r\n return this._textures;\r\n }\r\n\r\n /**\r\n * Gets the number of textures in this MRT. This number can be different from `_textures.length` in case a depth texture is generated.\r\n */\r\n public get count(): number {\r\n return this._count;\r\n }\r\n\r\n /**\r\n * Get the depth texture generated by the multi render target if options.generateDepthTexture has been set\r\n */\r\n public get depthTexture(): Texture {\r\n return this._textures[this._textures.length - 1];\r\n }\r\n\r\n /**\r\n * Set the wrapping mode on U of all the textures we are rendering to.\r\n * Can be any of the Texture. (CLAMP_ADDRESSMODE, MIRROR_ADDRESSMODE or WRAP_ADDRESSMODE)\r\n */\r\n public set wrapU(wrap: number) {\r\n if (this._textures) {\r\n for (let i = 0; i < this._textures.length; i++) {\r\n this._textures[i].wrapU = wrap;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set the wrapping mode on V of all the textures we are rendering to.\r\n * Can be any of the Texture. (CLAMP_ADDRESSMODE, MIRROR_ADDRESSMODE or WRAP_ADDRESSMODE)\r\n */\r\n public set wrapV(wrap: number) {\r\n if (this._textures) {\r\n for (let i = 0; i < this._textures.length; i++) {\r\n this._textures[i].wrapV = wrap;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Instantiate a new multi render target texture.\r\n * A multi render target, like a render target provides the ability to render to a texture.\r\n * Unlike the render target, it can render to several draw buffers in one draw.\r\n * This is specially interesting in deferred rendering or for any effects requiring more than\r\n * just one color from a single pass.\r\n * @param name Define the name of the texture\r\n * @param size Define the size of the buffers to render to\r\n * @param count Define the number of target we are rendering into\r\n * @param scene Define the scene the texture belongs to\r\n * @param options Define the options used to create the multi render target\r\n * @param textureNames Define the names to set to the textures (if count > 0 - optional)\r\n */\r\n constructor(name: string, size: any, count: number, scene?: Scene, options?: IMultiRenderTargetOptions, textureNames?: string[]) {\r\n const generateMipMaps = options && options.generateMipMaps ? options.generateMipMaps : false;\r\n const generateDepthTexture = options && options.generateDepthTexture ? options.generateDepthTexture : false;\r\n const depthTextureFormat = options && options.depthTextureFormat ? options.depthTextureFormat : Constants.TEXTUREFORMAT_DEPTH16;\r\n const doNotChangeAspectRatio = !options || options.doNotChangeAspectRatio === undefined ? true : options.doNotChangeAspectRatio;\r\n const drawOnlyOnFirstAttachmentByDefault = options && options.drawOnlyOnFirstAttachmentByDefault ? options.drawOnlyOnFirstAttachmentByDefault : false;\r\n super(name, size, scene, generateMipMaps, doNotChangeAspectRatio, undefined, undefined, undefined, undefined, undefined, undefined, undefined, true);\r\n\r\n if (!this.isSupported) {\r\n this.dispose();\r\n return;\r\n }\r\n\r\n this._textureNames = textureNames;\r\n\r\n const types: number[] = [];\r\n const samplingModes: number[] = [];\r\n const useSRGBBuffers: boolean[] = [];\r\n const formats: number[] = [];\r\n const targetTypes: number[] = [];\r\n const faceIndex: number[] = [];\r\n const layerIndex: number[] = [];\r\n const layerCounts: number[] = [];\r\n this._initTypes(count, types, samplingModes, useSRGBBuffers, formats, targetTypes, faceIndex, layerIndex, layerCounts, options);\r\n\r\n const generateDepthBuffer = !options || options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\r\n const generateStencilBuffer = !options || options.generateStencilBuffer === undefined ? false : options.generateStencilBuffer;\r\n\r\n this._multiRenderTargetOptions = {\r\n samplingModes: samplingModes,\r\n generateMipMaps: generateMipMaps,\r\n generateDepthBuffer: generateDepthBuffer,\r\n generateStencilBuffer: generateStencilBuffer,\r\n generateDepthTexture: generateDepthTexture,\r\n depthTextureFormat: depthTextureFormat,\r\n types: types,\r\n textureCount: count,\r\n useSRGBBuffers: useSRGBBuffers,\r\n formats: formats,\r\n targetTypes: targetTypes,\r\n faceIndex: faceIndex,\r\n layerIndex: layerIndex,\r\n layerCounts: layerCounts,\r\n };\r\n\r\n this._count = count;\r\n this._drawOnlyOnFirstAttachmentByDefault = drawOnlyOnFirstAttachmentByDefault;\r\n\r\n if (count > 0) {\r\n this._createInternalTextures();\r\n this._createTextures(textureNames);\r\n }\r\n }\r\n\r\n private _initTypes(\r\n count: number,\r\n types: number[],\r\n samplingModes: number[],\r\n useSRGBBuffers: boolean[],\r\n formats: number[],\r\n targets: number[],\r\n faceIndex: number[],\r\n layerIndex: number[],\r\n layerCounts: number[],\r\n options?: IMultiRenderTargetOptions\r\n ) {\r\n for (let i = 0; i < count; i++) {\r\n if (options && options.types && options.types[i] !== undefined) {\r\n types.push(options.types[i]);\r\n } else {\r\n types.push(options && options.defaultType ? options.defaultType : Constants.TEXTURETYPE_UNSIGNED_INT);\r\n }\r\n\r\n if (options && options.samplingModes && options.samplingModes[i] !== undefined) {\r\n samplingModes.push(options.samplingModes[i]);\r\n } else {\r\n samplingModes.push(Texture.BILINEAR_SAMPLINGMODE);\r\n }\r\n\r\n if (options && options.useSRGBBuffers && options.useSRGBBuffers[i] !== undefined) {\r\n useSRGBBuffers.push(options.useSRGBBuffers[i]);\r\n } else {\r\n useSRGBBuffers.push(false);\r\n }\r\n\r\n if (options && options.formats && options.formats[i] !== undefined) {\r\n formats.push(options.formats[i]);\r\n } else {\r\n formats.push(Constants.TEXTUREFORMAT_RGBA);\r\n }\r\n\r\n if (options && options.targetTypes && options.targetTypes[i] !== undefined) {\r\n targets.push(options.targetTypes[i]);\r\n } else {\r\n targets.push(Constants.TEXTURE_2D);\r\n }\r\n\r\n if (options && options.faceIndex && options.faceIndex[i] !== undefined) {\r\n faceIndex.push(options.faceIndex[i]);\r\n } else {\r\n faceIndex.push(0);\r\n }\r\n\r\n if (options && options.layerIndex && options.layerIndex[i] !== undefined) {\r\n layerIndex.push(options.layerIndex[i]);\r\n } else {\r\n layerIndex.push(0);\r\n }\r\n\r\n if (options && options.layerCounts && options.layerCounts[i] !== undefined) {\r\n layerCounts.push(options.layerCounts[i]);\r\n } else {\r\n layerCounts.push(1);\r\n }\r\n }\r\n }\r\n\r\n private _createInternaTextureIndexMapping() {\r\n const mapMainInternalTexture2Index: { [key: number]: number } = {};\r\n const mapInternalTexture2MainIndex: number[] = [];\r\n\r\n if (!this._renderTarget) {\r\n return mapInternalTexture2MainIndex;\r\n }\r\n\r\n const internalTextures = this._renderTarget!.textures!;\r\n for (let i = 0; i < internalTextures.length; i++) {\r\n const texture = internalTextures[i];\r\n if (!texture) {\r\n continue;\r\n }\r\n const mainIndex = mapMainInternalTexture2Index[texture.uniqueId];\r\n if (mainIndex !== undefined) {\r\n mapInternalTexture2MainIndex[i] = mainIndex;\r\n } else {\r\n mapMainInternalTexture2Index[texture.uniqueId] = i;\r\n }\r\n }\r\n\r\n return mapInternalTexture2MainIndex;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _rebuild(forceFullRebuild: boolean = false, textureNames?: string[]): void {\r\n if (this._count < 1) {\r\n return;\r\n }\r\n\r\n const mapInternalTexture2MainIndex = this._createInternaTextureIndexMapping();\r\n\r\n this.releaseInternalTextures();\r\n this._createInternalTextures();\r\n\r\n if (forceFullRebuild) {\r\n this._releaseTextures();\r\n this._createTextures(textureNames);\r\n }\r\n\r\n const internalTextures = this._renderTarget!.textures!;\r\n for (let i = 0; i < internalTextures.length; i++) {\r\n const texture = this._textures[i];\r\n if (mapInternalTexture2MainIndex[i] !== undefined) {\r\n this._renderTarget!.setTexture(internalTextures[mapInternalTexture2MainIndex[i]], i);\r\n }\r\n texture._texture = internalTextures[i];\r\n if (texture._texture) {\r\n texture._noMipmap = !texture._texture.useMipMaps;\r\n texture._useSRGBBuffer = texture._texture._useSRGBBuffer;\r\n }\r\n }\r\n\r\n if (this.samples !== 1) {\r\n this._renderTarget!.setSamples(this.samples, !this._drawOnlyOnFirstAttachmentByDefault, true);\r\n }\r\n }\r\n\r\n private _createInternalTextures(): void {\r\n this._renderTarget = this._getEngine()!.createMultipleRenderTarget(this._size, this._multiRenderTargetOptions, !this._drawOnlyOnFirstAttachmentByDefault);\r\n this._texture = this._renderTarget.texture;\r\n }\r\n\r\n private _releaseTextures(): void {\r\n if (this._textures) {\r\n for (let i = 0; i < this._textures.length; i++) {\r\n this._textures[i]._texture = null; // internal textures are released by a call to releaseInternalTextures()\r\n this._textures[i].dispose();\r\n }\r\n }\r\n }\r\n\r\n private _createTextures(textureNames?: string[]): void {\r\n const internalTextures = this._renderTarget!.textures!;\r\n this._textures = [];\r\n for (let i = 0; i < internalTextures.length; i++) {\r\n const texture = new Texture(null, this.getScene());\r\n if (textureNames?.[i]) {\r\n texture.name = textureNames[i];\r\n }\r\n texture._texture = internalTextures[i];\r\n if (texture._texture) {\r\n texture._noMipmap = !texture._texture.useMipMaps;\r\n texture._useSRGBBuffer = texture._texture._useSRGBBuffer;\r\n }\r\n this._textures.push(texture);\r\n }\r\n }\r\n\r\n /**\r\n * Replaces an internal texture within the MRT. Useful to share textures between MultiRenderTarget.\r\n * @param texture The new texture to set in the MRT\r\n * @param index The index of the texture to replace\r\n * @param disposePrevious Set to true if the previous internal texture should be disposed\r\n */\r\n public setInternalTexture(texture: InternalTexture, index: number, disposePrevious: boolean = true) {\r\n if (!this.renderTarget) {\r\n return;\r\n }\r\n\r\n if (index === 0) {\r\n this._texture = texture;\r\n }\r\n\r\n this.renderTarget.setTexture(texture, index, disposePrevious);\r\n\r\n if (!this.textures[index]) {\r\n this.textures[index] = new Texture(null, this.getScene());\r\n this.textures[index].name = this._textureNames?.[index] ?? this.textures[index].name;\r\n }\r\n this.textures[index]._texture = texture;\r\n this.textures[index]._noMipmap = !texture.useMipMaps;\r\n this.textures[index]._useSRGBBuffer = texture._useSRGBBuffer;\r\n\r\n this._count = this.renderTarget.textures ? this.renderTarget.textures.length : 0;\r\n\r\n if (this._multiRenderTargetOptions.types) {\r\n this._multiRenderTargetOptions.types[index] = texture.type;\r\n }\r\n if (this._multiRenderTargetOptions.samplingModes) {\r\n this._multiRenderTargetOptions.samplingModes[index] = texture.samplingMode;\r\n }\r\n if (this._multiRenderTargetOptions.useSRGBBuffers) {\r\n this._multiRenderTargetOptions.useSRGBBuffers[index] = texture._useSRGBBuffer;\r\n }\r\n if (this._multiRenderTargetOptions.targetTypes && this._multiRenderTargetOptions.targetTypes[index] !== -1) {\r\n let target: number = 0;\r\n if (texture.is2DArray) {\r\n target = Constants.TEXTURE_2D_ARRAY;\r\n } else if (texture.isCube) {\r\n target = Constants.TEXTURE_CUBE_MAP;\r\n } /*else if (texture.isCubeArray) {\r\n target = Constants.TEXTURE_CUBE_MAP_ARRAY;\r\n }*/ else if (texture.is3D) {\r\n target = Constants.TEXTURE_3D;\r\n } else {\r\n target = Constants.TEXTURE_2D;\r\n }\r\n this._multiRenderTargetOptions.targetTypes[index] = target;\r\n }\r\n }\r\n\r\n /**\r\n * Changes an attached texture's face index or layer.\r\n * @param index The index of the texture to modify the attachment of\r\n * @param layerIndex The layer index of the texture to be attached to the framebuffer\r\n * @param faceIndex The face index of the texture to be attached to the framebuffer\r\n */\r\n public setLayerAndFaceIndex(index: number, layerIndex: number = -1, faceIndex: number = -1) {\r\n if (!this.textures[index] || !this.renderTarget) {\r\n return;\r\n }\r\n\r\n if (this._multiRenderTargetOptions.layerIndex) {\r\n this._multiRenderTargetOptions.layerIndex[index] = layerIndex;\r\n }\r\n if (this._multiRenderTargetOptions.faceIndex) {\r\n this._multiRenderTargetOptions.faceIndex[index] = faceIndex;\r\n }\r\n\r\n this.renderTarget.setLayerAndFaceIndex(index, layerIndex, faceIndex);\r\n }\r\n\r\n /**\r\n * Changes every attached texture's face index or layer.\r\n * @param layerIndices The layer indices of the texture to be attached to the framebuffer\r\n * @param faceIndices The face indices of the texture to be attached to the framebuffer\r\n */\r\n public setLayerAndFaceIndices(layerIndices: number[], faceIndices: number[]) {\r\n if (!this.renderTarget) {\r\n return;\r\n }\r\n\r\n this._multiRenderTargetOptions.layerIndex = layerIndices;\r\n this._multiRenderTargetOptions.faceIndex = faceIndices;\r\n\r\n this.renderTarget.setLayerAndFaceIndices(layerIndices, faceIndices);\r\n }\r\n\r\n /**\r\n * Define the number of samples used if MSAA is enabled.\r\n */\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n public set samples(value: number) {\r\n if (this._renderTarget) {\r\n this._samples = this._renderTarget.setSamples(value);\r\n } else {\r\n // In case samples are set with 0 textures created, we must save the desired samples value\r\n this._samples = value;\r\n }\r\n }\r\n\r\n /**\r\n * Resize all the textures in the multi render target.\r\n * Be careful as it will recreate all the data in the new texture.\r\n * @param size Define the new size\r\n */\r\n public resize(size: any) {\r\n this._processSizeParameter(size, false);\r\n this._rebuild(undefined, this._textureNames);\r\n }\r\n\r\n /**\r\n * Changes the number of render targets in this MRT\r\n * Be careful as it will recreate all the data in the new texture.\r\n * @param count new texture count\r\n * @param options Specifies texture types and sampling modes for new textures\r\n * @param textureNames Specifies the names of the textures (optional)\r\n */\r\n public updateCount(count: number, options?: IMultiRenderTargetOptions, textureNames?: string[]) {\r\n this._multiRenderTargetOptions.textureCount = count;\r\n this._count = count;\r\n\r\n const types: number[] = [];\r\n const samplingModes: number[] = [];\r\n const useSRGBBuffers: boolean[] = [];\r\n const formats: number[] = [];\r\n const targetTypes: number[] = [];\r\n const faceIndex: number[] = [];\r\n const layerIndex: number[] = [];\r\n const layerCounts: number[] = [];\r\n\r\n this._textureNames = textureNames;\r\n\r\n this._initTypes(count, types, samplingModes, useSRGBBuffers, formats, targetTypes, faceIndex, layerIndex, layerCounts, options);\r\n this._multiRenderTargetOptions.types = types;\r\n this._multiRenderTargetOptions.samplingModes = samplingModes;\r\n this._multiRenderTargetOptions.useSRGBBuffers = useSRGBBuffers;\r\n this._multiRenderTargetOptions.formats = formats;\r\n this._multiRenderTargetOptions.targetTypes = targetTypes;\r\n this._multiRenderTargetOptions.faceIndex = faceIndex;\r\n this._multiRenderTargetOptions.layerIndex = layerIndex;\r\n this._multiRenderTargetOptions.layerCounts = layerCounts;\r\n\r\n this._rebuild(true, textureNames);\r\n }\r\n\r\n protected _unbindFrameBuffer(engine: Engine, faceIndex: number): void {\r\n if (this._renderTarget) {\r\n engine.unBindMultiColorAttachmentFramebuffer(this._renderTarget, this.isCube, () => {\r\n this.onAfterRenderObservable.notifyObservers(faceIndex);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the render targets and their associated resources\r\n * @param doNotDisposeInternalTextures\r\n */\r\n public dispose(doNotDisposeInternalTextures = false): void {\r\n this._releaseTextures();\r\n if (!doNotDisposeInternalTextures) {\r\n this.releaseInternalTextures();\r\n } else {\r\n // Prevent internal texture dispose in super.dispose\r\n this._texture = null;\r\n }\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Release all the underlying texture used as draw buffers.\r\n */\r\n public releaseInternalTextures(): void {\r\n const internalTextures = this._renderTarget?.textures;\r\n\r\n if (!internalTextures) {\r\n return;\r\n }\r\n\r\n for (let i = internalTextures.length - 1; i >= 0; i--) {\r\n this._textures[i]._texture = null;\r\n }\r\n\r\n this._renderTarget?.dispose();\r\n this._renderTarget = null;\r\n }\r\n}\r\n"]}
@@ -322,7 +322,12 @@ export declare class RenderTargetTexture extends Texture implements IRenderTarge
322
322
  createDepthStencilTexture(comparisonFunction?: number, bilinearFiltering?: boolean, generateStencil?: boolean, samples?: number, format?: number): void;
323
323
  private _releaseRenderPassId;
324
324
  private _createRenderPassId;
325
- private _processSizeParameter;
325
+ protected _processSizeParameter(size: number | {
326
+ width: number;
327
+ height: number;
328
+ } | {
329
+ ratio: number;
330
+ }, createRenderPassIds?: boolean): void;
326
331
  /**
327
332
  * Define the number of samples to use in case of MSAA.
328
333
  * It defaults to one meaning no MSAA has been enabled.
@@ -339,7 +339,7 @@ export class RenderTargetTexture extends Texture {
339
339
  this._renderPassIds[i] = engine.createRenderPassId(`RenderTargetTexture - ${this.name}#${i}`);
340
340
  }
341
341
  }
342
- _processSizeParameter(size) {
342
+ _processSizeParameter(size, createRenderPassIds = true) {
343
343
  if (size.ratio) {
344
344
  this._sizeRatio = size.ratio;
345
345
  const engine = this._getEngine();
@@ -351,7 +351,9 @@ export class RenderTargetTexture extends Texture {
351
351
  else {
352
352
  this._size = size;
353
353
  }
354
- this._createRenderPassId();
354
+ if (createRenderPassIds) {
355
+ this._createRenderPassId();
356
+ }
355
357
  }
356
358
  /**
357
359
  * Define the number of samples to use in case of MSAA.
@@ -531,7 +533,7 @@ export class RenderTargetTexture extends Texture {
531
533
  if (!scene) {
532
534
  return;
533
535
  }
534
- this._processSizeParameter(size);
536
+ this._processSizeParameter(size, false);
535
537
  if (wasCube) {
536
538
  this._renderTarget = scene.getEngine().createRenderTargetCubeTexture(this.getRenderSize(), this._renderTargetOptions);
537
539
  }