@babylonjs/core 7.25.2 → 7.26.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 (167) hide show
  1. package/Engines/Extensions/engine.prefilteredCubeTexture.d.ts +0 -1
  2. package/Engines/Extensions/engine.prefilteredCubeTexture.js +0 -1
  3. package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
  4. package/Engines/Extensions/engine.readTexture.d.ts +2 -9
  5. package/Engines/Extensions/engine.readTexture.js +3 -76
  6. package/Engines/Extensions/engine.readTexture.js.map +1 -1
  7. package/Engines/WebGPU/Extensions/engine.alpha.js +3 -3
  8. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  9. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +5 -5
  10. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  11. package/Engines/WebGPU/Extensions/engine.rawTexture.js +10 -10
  12. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  13. package/Engines/WebGPU/Extensions/engine.readTexture.js +3 -3
  14. package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
  15. package/Engines/WebGPU/Extensions/engine.renderTarget.js +6 -6
  16. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  17. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +2 -2
  18. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  19. package/Engines/WebGPU/Extensions/engine.renderTargetTexture.js +2 -2
  20. package/Engines/WebGPU/Extensions/engine.renderTargetTexture.js.map +1 -1
  21. package/Engines/WebGPU/webgpuBufferManager.js +1 -1
  22. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  23. package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +2 -2
  24. package/Engines/WebGPU/webgpuRenderTargetWrapper.js.map +1 -1
  25. package/Engines/abstractEngine.d.ts +2 -0
  26. package/Engines/abstractEngine.functions.d.ts +9 -0
  27. package/Engines/abstractEngine.functions.js +76 -0
  28. package/Engines/abstractEngine.functions.js.map +1 -1
  29. package/Engines/abstractEngine.js +2 -2
  30. package/Engines/abstractEngine.js.map +1 -1
  31. package/Engines/engine.d.ts +7 -5
  32. package/Engines/engine.js +7 -0
  33. package/Engines/engine.js.map +1 -1
  34. package/Engines/thinWebGPUEngine.d.ts +66 -0
  35. package/Engines/thinWebGPUEngine.js +120 -0
  36. package/Engines/thinWebGPUEngine.js.map +1 -0
  37. package/Engines/webgpuEngine.d.ts +9 -58
  38. package/Engines/webgpuEngine.js +9 -108
  39. package/Engines/webgpuEngine.js.map +1 -1
  40. package/Materials/Node/Blocks/Dual/imageSourceBlock.d.ts +4 -0
  41. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +17 -0
  42. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  43. package/Materials/Node/Blocks/Dual/textureBlock.d.ts +2 -0
  44. package/Materials/Node/Blocks/Dual/textureBlock.js +30 -23
  45. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  46. package/Materials/Node/Blocks/colorConverterBlock.d.ts +36 -0
  47. package/Materials/Node/Blocks/colorConverterBlock.js +192 -0
  48. package/Materials/Node/Blocks/colorConverterBlock.js.map +1 -0
  49. package/Materials/Node/Blocks/index.d.ts +4 -0
  50. package/Materials/Node/Blocks/index.js +4 -0
  51. package/Materials/Node/Blocks/index.js.map +1 -1
  52. package/Materials/Node/Blocks/loopBlock.d.ts +49 -0
  53. package/Materials/Node/Blocks/loopBlock.js +110 -0
  54. package/Materials/Node/Blocks/loopBlock.js.map +1 -0
  55. package/Materials/Node/Blocks/storageReadBlock.d.ts +27 -0
  56. package/Materials/Node/Blocks/storageReadBlock.js +52 -0
  57. package/Materials/Node/Blocks/storageReadBlock.js.map +1 -0
  58. package/Materials/Node/Blocks/storageWriteBlock.d.ts +31 -0
  59. package/Materials/Node/Blocks/storageWriteBlock.js +62 -0
  60. package/Materials/Node/Blocks/storageWriteBlock.js.map +1 -0
  61. package/Materials/Node/nodeMaterial.d.ts +1 -0
  62. package/Materials/Node/nodeMaterial.js +44 -12
  63. package/Materials/Node/nodeMaterial.js.map +1 -1
  64. package/Materials/Node/nodeMaterialBlock.d.ts +6 -0
  65. package/Materials/Node/nodeMaterialBlock.js +46 -3
  66. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  67. package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +6 -0
  68. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +9 -0
  69. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  70. package/Materials/Node/nodeMaterialBuildState.d.ts +4 -1
  71. package/Materials/Node/nodeMaterialBuildState.js +2 -0
  72. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  73. package/Materials/Textures/Filtering/hdrFiltering.d.ts +0 -1
  74. package/Materials/Textures/Filtering/hdrFiltering.js +0 -1
  75. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  76. package/Materials/Textures/Loaders/basisTextureLoader.d.ts +0 -1
  77. package/Materials/Textures/Loaders/basisTextureLoader.js +0 -1
  78. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  79. package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +0 -1
  80. package/Materials/Textures/Loaders/ddsTextureLoader.js +0 -1
  81. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  82. package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +0 -1
  83. package/Materials/Textures/Loaders/ktxTextureLoader.js +0 -1
  84. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  85. package/Materials/Textures/Procedurals/proceduralTexture.d.ts +0 -2
  86. package/Materials/Textures/Procedurals/proceduralTexture.js +0 -2
  87. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  88. package/Materials/Textures/baseTexture.d.ts +0 -1
  89. package/Materials/Textures/baseTexture.js +0 -1
  90. package/Materials/Textures/baseTexture.js.map +1 -1
  91. package/Materials/Textures/colorGradingTexture.d.ts +0 -1
  92. package/Materials/Textures/colorGradingTexture.js +0 -2
  93. package/Materials/Textures/colorGradingTexture.js.map +1 -1
  94. package/Materials/Textures/cubeTexture.d.ts +0 -2
  95. package/Materials/Textures/cubeTexture.js +0 -2
  96. package/Materials/Textures/cubeTexture.js.map +1 -1
  97. package/Materials/Textures/equiRectangularCubeTexture.d.ts +0 -1
  98. package/Materials/Textures/equiRectangularCubeTexture.js +0 -1
  99. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  100. package/Materials/Textures/hdrCubeTexture.d.ts +0 -1
  101. package/Materials/Textures/hdrCubeTexture.js +0 -1
  102. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  103. package/Materials/Textures/rawCubeTexture.d.ts +0 -1
  104. package/Materials/Textures/rawCubeTexture.js +0 -1
  105. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  106. package/Materials/Textures/rawTexture.d.ts +0 -1
  107. package/Materials/Textures/rawTexture.js +0 -1
  108. package/Materials/Textures/rawTexture.js.map +1 -1
  109. package/Materials/Textures/rawTexture2DArray.d.ts +0 -1
  110. package/Materials/Textures/rawTexture2DArray.js +0 -1
  111. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  112. package/Materials/Textures/rawTexture3D.d.ts +0 -1
  113. package/Materials/Textures/rawTexture3D.js +0 -1
  114. package/Materials/Textures/rawTexture3D.js.map +1 -1
  115. package/Materials/Textures/renderTargetTexture.d.ts +2 -3
  116. package/Materials/Textures/renderTargetTexture.js +13 -5
  117. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  118. package/Materials/effectRenderer.d.ts +0 -1
  119. package/Materials/effectRenderer.js +0 -2
  120. package/Materials/effectRenderer.js.map +1 -1
  121. package/Materials/material.detailMapConfiguration.d.ts +2 -2
  122. package/Materials/material.detailMapConfiguration.js.map +1 -1
  123. package/Materials/uniformBuffer.d.ts +0 -1
  124. package/Materials/uniformBuffer.js +0 -1
  125. package/Materials/uniformBuffer.js.map +1 -1
  126. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +3 -1
  127. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +19 -8
  128. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  129. package/Misc/basis.d.ts +3 -3
  130. package/Misc/basis.js.map +1 -1
  131. package/Misc/dds.d.ts +0 -1
  132. package/Misc/dds.js +0 -1
  133. package/Misc/dds.js.map +1 -1
  134. package/Misc/dumpTools.js +103 -82
  135. package/Misc/dumpTools.js.map +1 -1
  136. package/Misc/environmentTextureTools.d.ts +0 -2
  137. package/Misc/environmentTextureTools.js +0 -2
  138. package/Misc/environmentTextureTools.js.map +1 -1
  139. package/Misc/index.d.ts +2 -0
  140. package/Misc/index.js +3 -0
  141. package/Misc/index.js.map +1 -1
  142. package/Misc/minMaxReducer.d.ts +0 -1
  143. package/Misc/minMaxReducer.js +0 -1
  144. package/Misc/minMaxReducer.js.map +1 -1
  145. package/Misc/rgbdTextureTools.d.ts +0 -2
  146. package/Misc/rgbdTextureTools.js +5 -10
  147. package/Misc/rgbdTextureTools.js.map +1 -1
  148. package/Misc/screenshotTools.d.ts +0 -1
  149. package/Misc/screenshotTools.js +0 -1
  150. package/Misc/screenshotTools.js.map +1 -1
  151. package/Misc/textureTools.d.ts +0 -2
  152. package/Misc/textureTools.js +11 -2
  153. package/Misc/textureTools.js.map +1 -1
  154. package/Particles/particleSystem.js.map +1 -1
  155. package/Particles/thinParticleSystem.js.map +1 -1
  156. package/PostProcesses/anaglyphPostProcess.d.ts +2 -2
  157. package/PostProcesses/anaglyphPostProcess.js.map +1 -1
  158. package/PostProcesses/highlightsPostProcess.d.ts +2 -2
  159. package/PostProcesses/highlightsPostProcess.js.map +1 -1
  160. package/PostProcesses/postProcess.d.ts +0 -2
  161. package/PostProcesses/postProcess.js +0 -2
  162. package/PostProcesses/postProcess.js.map +1 -1
  163. package/PostProcesses/stereoscopicInterlacePostProcess.d.ts +3 -3
  164. package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
  165. package/PostProcesses/tonemapPostProcess.d.ts +2 -2
  166. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  167. package/package.json +1 -1
@@ -0,0 +1,192 @@
1
+ import { NodeMaterialBlock } from "../nodeMaterialBlock.js";
2
+ import { NodeMaterialBlockConnectionPointTypes } from "../Enums/nodeMaterialBlockConnectionPointTypes.js";
3
+ import { NodeMaterialBlockTargets } from "../Enums/nodeMaterialBlockTargets.js";
4
+ import { RegisterClass } from "../../../Misc/typeStore.js";
5
+ /**
6
+ * Block used to apply rgb/hsl convertions
7
+ */
8
+ export class ColorConverterBlock extends NodeMaterialBlock {
9
+ /**
10
+ * Create a new ColorConverterBlock
11
+ * @param name defines the block name
12
+ */
13
+ constructor(name) {
14
+ super(name, NodeMaterialBlockTargets.Neutral);
15
+ this.registerInput("rgb ", NodeMaterialBlockConnectionPointTypes.Color3, true);
16
+ this.registerInput("hsl ", NodeMaterialBlockConnectionPointTypes.Color3, true);
17
+ this.registerOutput("rgb", NodeMaterialBlockConnectionPointTypes.Color3);
18
+ this.registerOutput("hsl", NodeMaterialBlockConnectionPointTypes.Color3);
19
+ }
20
+ /**
21
+ * Gets the current class name
22
+ * @returns the class name
23
+ */
24
+ getClassName() {
25
+ return "ColorConverterBlock";
26
+ }
27
+ /**
28
+ * Gets the rgb value (input)
29
+ */
30
+ get rgbIn() {
31
+ return this._inputs[0];
32
+ }
33
+ /**
34
+ * Gets the hsl value (input)
35
+ */
36
+ get hslIn() {
37
+ return this._inputs[1];
38
+ }
39
+ /**
40
+ * Gets the rgb value (output)
41
+ */
42
+ get rgbOut() {
43
+ return this._outputs[0];
44
+ }
45
+ /**
46
+ * Gets the hsl value (output)
47
+ */
48
+ get hslOut() {
49
+ return this._outputs[1];
50
+ }
51
+ _inputRename(name) {
52
+ if (name === "rgb ") {
53
+ return "rgbIn";
54
+ }
55
+ if (name === "hsl ") {
56
+ return "hslIn";
57
+ }
58
+ return name;
59
+ }
60
+ _buildBlock(state) {
61
+ super._buildBlock(state);
62
+ const rgbInput = this.rgbIn;
63
+ const hslInput = this.hslIn;
64
+ const rbgOutput = this._outputs[0];
65
+ const hslOutput = this._outputs[1];
66
+ const vec3 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector3);
67
+ let rgb2hsl = `
68
+ vec3 rgb2hsl(vec3 color) {
69
+ float r = color.r;
70
+ float g = color.g;
71
+ float b = color.b;
72
+
73
+ float maxc = max(r, max(g, b));
74
+ float minc = min(r, min(g, b));
75
+ float h = 0.0;
76
+ float s = 0.0;
77
+ float l = (maxc + minc) / 2.0;
78
+
79
+ if (maxc != minc) {
80
+ float d = maxc - minc;
81
+ if (l > 0.5) {
82
+ s = d / (2.0 - maxc - minc);
83
+ } else {
84
+ s = d / (maxc + minc);
85
+ }
86
+
87
+ if (maxc == r) {
88
+ float add = 0.0;
89
+ if (g < b) {
90
+ add = 6.0;
91
+ }
92
+ h = (g - b) / d + add;
93
+ } else if (maxc == g) {
94
+ h = (b - r) / d + 2.0;
95
+ } else if (maxc == b) {
96
+ h = (r - g) / d + 4.0;
97
+ }
98
+ h /= 6.0;
99
+ }
100
+
101
+ return vec3(h, s, l);
102
+ }`;
103
+ let hue2rgb = `
104
+ float hue2rgb(float p, float q, float tt) {
105
+ float t = tt;
106
+ if (t < 0.0) {
107
+ t += 1.0;
108
+ }
109
+ if (t > 1.0) {
110
+ t -= 1.0;
111
+ }
112
+ if (t < 1.0/6.0) {
113
+ return p + (q - p) * 6.0 * t;
114
+ }
115
+ if (t < 1.0/2.0) {
116
+ return q;
117
+ }
118
+ if (t < 2.0/3.0) {
119
+ return p + (q - p) * (2.0/3.0 - t) * 6.0;
120
+ }
121
+ return p;
122
+ }`;
123
+ let hsl2rgb = `
124
+ vec3 hsl2rgb(vec3 hsl) {
125
+ float h = hsl.x;
126
+ float s = hsl.y;
127
+ float l = hsl.z;
128
+
129
+ float r;
130
+ float g;
131
+ float b;
132
+
133
+ if (s == 0.0) {
134
+ // Achromatic (grey)
135
+ r = l;
136
+ g = l;
137
+ b = l;
138
+ } else {
139
+ float q;
140
+
141
+ if (l < 0.5) {
142
+ q = l * (1.0 + s);
143
+ } else {
144
+ q = (l + s - l * s);
145
+ }
146
+
147
+ float p = 2.0 * l - q;
148
+
149
+ r = hue2rgb(p, q, h + 1.0/3.0);
150
+ g = hue2rgb(p, q, h);
151
+ b = hue2rgb(p, q, h - 1.0/3.0);
152
+ }
153
+
154
+ return vec3(r, g, b);
155
+ }`;
156
+ if (state.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
157
+ rgb2hsl = state._babylonSLtoWGSL(rgb2hsl);
158
+ hue2rgb = state._babylonSLtoWGSL(hue2rgb);
159
+ hsl2rgb = state._babylonSLtoWGSL(hsl2rgb);
160
+ }
161
+ state._emitFunction("rgb2hsl", rgb2hsl, "");
162
+ state._emitFunction("hue2rgb", hue2rgb, "");
163
+ state._emitFunction("hsl2rgb", hsl2rgb, "");
164
+ if (rgbInput.isConnected) {
165
+ if (rbgOutput.hasEndpoints) {
166
+ state.compilationString += state._declareOutput(rbgOutput) + ` = ${rgbInput.associatedVariableName};\n`;
167
+ }
168
+ if (hslOutput.hasEndpoints) {
169
+ state.compilationString += state._declareOutput(hslOutput) + ` = rgb2hsl(${rgbInput.associatedVariableName});\n`;
170
+ }
171
+ }
172
+ else if (hslInput.isConnected) {
173
+ if (rbgOutput.hasEndpoints) {
174
+ state.compilationString += state._declareOutput(rbgOutput) + ` = hsl2rgb(${hslInput.associatedVariableName});\n`;
175
+ }
176
+ if (hslOutput.hasEndpoints) {
177
+ state.compilationString += state._declareOutput(hslOutput) + ` = ${hslInput.associatedVariableName};\n`;
178
+ }
179
+ }
180
+ else {
181
+ if (rbgOutput.hasEndpoints) {
182
+ state.compilationString += state._declareOutput(rbgOutput) + ` = ${vec3}(0.);\n`;
183
+ }
184
+ if (hslOutput.hasEndpoints) {
185
+ state.compilationString += state._declareOutput(hslOutput) + ` = ${vec3}(0.);\n`;
186
+ }
187
+ }
188
+ return this;
189
+ }
190
+ }
191
+ RegisterClass("BABYLON.ColorConverterBlock", ColorConverterBlock);
192
+ //# sourceMappingURL=colorConverterBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorConverterBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/colorConverterBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to apply rgb/hsl convertions\r\n */\r\nexport class ColorConverterBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new ColorConverterBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"rgb \", NodeMaterialBlockConnectionPointTypes.Color3, true);\r\n this.registerInput(\"hsl \", NodeMaterialBlockConnectionPointTypes.Color3, true);\r\n\r\n this.registerOutput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3);\r\n this.registerOutput(\"hsl\", NodeMaterialBlockConnectionPointTypes.Color3);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ColorConverterBlock\";\r\n }\r\n\r\n /**\r\n * Gets the rgb value (input)\r\n */\r\n public get rgbIn(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the hsl value (input)\r\n */\r\n public get hslIn(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the rgb value (output)\r\n */\r\n public get rgbOut(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the hsl value (output)\r\n */\r\n public get hslOut(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n protected override _inputRename(name: string) {\r\n if (name === \"rgb \") {\r\n return \"rgbIn\";\r\n }\r\n if (name === \"hsl \") {\r\n return \"hslIn\";\r\n }\r\n return name;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const rgbInput = this.rgbIn;\r\n const hslInput = this.hslIn;\r\n\r\n const rbgOutput = this._outputs[0];\r\n const hslOutput = this._outputs[1];\r\n\r\n const vec3 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n let rgb2hsl = `\r\n vec3 rgb2hsl(vec3 color) {\r\n float r = color.r;\r\n float g = color.g;\r\n float b = color.b;\r\n\r\n float maxc = max(r, max(g, b));\r\n float minc = min(r, min(g, b));\r\n float h = 0.0;\r\n float s = 0.0;\r\n float l = (maxc + minc) / 2.0;\r\n\r\n if (maxc != minc) {\r\n float d = maxc - minc;\r\n if (l > 0.5) {\r\n s = d / (2.0 - maxc - minc);\r\n } else {\r\n s = d / (maxc + minc);\r\n }\r\n\r\n if (maxc == r) {\r\n float add = 0.0;\r\n if (g < b) {\r\n add = 6.0;\r\n }\r\n h = (g - b) / d + add;\r\n } else if (maxc == g) {\r\n h = (b - r) / d + 2.0;\r\n } else if (maxc == b) {\r\n h = (r - g) / d + 4.0;\r\n }\r\n h /= 6.0;\r\n }\r\n\r\n return vec3(h, s, l);\r\n }`;\r\n\r\n let hue2rgb = `\r\n float hue2rgb(float p, float q, float tt) {\r\n float t = tt;\r\n if (t < 0.0) {\r\n t += 1.0;\r\n }\r\n if (t > 1.0) {\r\n t -= 1.0;\r\n }\r\n if (t < 1.0/6.0) {\r\n return p + (q - p) * 6.0 * t;\r\n }\r\n if (t < 1.0/2.0) {\r\n return q;\r\n }\r\n if (t < 2.0/3.0) {\r\n return p + (q - p) * (2.0/3.0 - t) * 6.0;\r\n }\r\n return p;\r\n }`;\r\n\r\n let hsl2rgb = `\r\n vec3 hsl2rgb(vec3 hsl) {\r\n float h = hsl.x;\r\n float s = hsl.y;\r\n float l = hsl.z;\r\n\r\n float r;\r\n float g;\r\n float b;\r\n\r\n if (s == 0.0) {\r\n // Achromatic (grey)\r\n r = l;\r\n g = l;\r\n b = l; \r\n } else {\r\n float q;\r\n \r\n if (l < 0.5) {\r\n q = l * (1.0 + s);\r\n } else {\r\n q = (l + s - l * s);\r\n }\r\n\r\n float p = 2.0 * l - q;\r\n\r\n r = hue2rgb(p, q, h + 1.0/3.0);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1.0/3.0);\r\n }\r\n\r\n return vec3(r, g, b);\r\n }`;\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n rgb2hsl = state._babylonSLtoWGSL(rgb2hsl);\r\n hue2rgb = state._babylonSLtoWGSL(hue2rgb);\r\n hsl2rgb = state._babylonSLtoWGSL(hsl2rgb);\r\n }\r\n\r\n state._emitFunction(\"rgb2hsl\", rgb2hsl, \"\");\r\n state._emitFunction(\"hue2rgb\", hue2rgb, \"\");\r\n state._emitFunction(\"hsl2rgb\", hsl2rgb, \"\");\r\n\r\n if (rgbInput.isConnected) {\r\n if (rbgOutput.hasEndpoints) {\r\n state.compilationString += state._declareOutput(rbgOutput) + ` = ${rgbInput.associatedVariableName};\\n`;\r\n }\r\n\r\n if (hslOutput.hasEndpoints) {\r\n state.compilationString += state._declareOutput(hslOutput) + ` = rgb2hsl(${rgbInput.associatedVariableName});\\n`;\r\n }\r\n } else if (hslInput.isConnected) {\r\n if (rbgOutput.hasEndpoints) {\r\n state.compilationString += state._declareOutput(rbgOutput) + ` = hsl2rgb(${hslInput.associatedVariableName});\\n`;\r\n }\r\n if (hslOutput.hasEndpoints) {\r\n state.compilationString += state._declareOutput(hslOutput) + ` = ${hslInput.associatedVariableName};\\n`;\r\n }\r\n } else {\r\n if (rbgOutput.hasEndpoints) {\r\n state.compilationString += state._declareOutput(rbgOutput) + ` = ${vec3}(0.);\\n`;\r\n }\r\n\r\n if (hslOutput.hasEndpoints) {\r\n state.compilationString += state._declareOutput(hslOutput) + ` = ${vec3}(0.);\\n`;\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ColorConverterBlock\", ColorConverterBlock);\r\n"]}
@@ -61,3 +61,7 @@ export * from "./matrixDeterminantBlock";
61
61
  export * from "./matrixTransposeBlock";
62
62
  export * from "./meshAttributeExistsBlock";
63
63
  export * from "./curveBlock";
64
+ export * from "./colorConverterBlock";
65
+ export * from "./loopBlock";
66
+ export * from "./storageReadBlock";
67
+ export * from "./storageWriteBlock";
@@ -62,4 +62,8 @@ export * from "./matrixDeterminantBlock.js";
62
62
  export * from "./matrixTransposeBlock.js";
63
63
  export * from "./meshAttributeExistsBlock.js";
64
64
  export * from "./curveBlock.js";
65
+ export * from "./colorConverterBlock.js";
66
+ export * from "./loopBlock.js";
67
+ export * from "./storageReadBlock.js";
68
+ export * from "./storageWriteBlock.js";
65
69
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nexport * from \"./Vertex/index\";\r\nexport * from \"./Fragment/index\";\r\nexport * from \"./Dual/index\";\r\nexport * from \"./Input/index\";\r\nexport * from \"./Teleport/index\";\r\nexport * from \"./multiplyBlock\";\r\nexport * from \"./addBlock\";\r\nexport * from \"./scaleBlock\";\r\nexport * from \"./clampBlock\";\r\nexport * from \"./crossBlock\";\r\nexport * from \"./customBlock\";\r\nexport * from \"./dotBlock\";\r\nexport * from \"./transformBlock\";\r\nexport * from \"./remapBlock\";\r\nexport * from \"./normalizeBlock\";\r\nexport * from \"./trigonometryBlock\";\r\nexport * from \"./colorMergerBlock\";\r\nexport * from \"./vectorMergerBlock\";\r\nexport * from \"./colorSplitterBlock\";\r\nexport * from \"./vectorSplitterBlock\";\r\nexport * from \"./lerpBlock\";\r\nexport * from \"./divideBlock\";\r\nexport * from \"./subtractBlock\";\r\nexport * from \"./stepBlock\";\r\nexport * from \"./oneMinusBlock\";\r\nexport * from \"./viewDirectionBlock\";\r\nexport * from \"./fresnelBlock\";\r\nexport * from \"./maxBlock\";\r\nexport * from \"./minBlock\";\r\nexport * from \"./distanceBlock\";\r\nexport * from \"./lengthBlock\";\r\nexport * from \"./negateBlock\";\r\nexport * from \"./powBlock\";\r\nexport * from \"./randomNumberBlock\";\r\nexport * from \"./arcTan2Block\";\r\nexport * from \"./smoothStepBlock\";\r\nexport * from \"./reciprocalBlock\";\r\nexport * from \"./replaceColorBlock\";\r\nexport * from \"./posterizeBlock\";\r\nexport * from \"./waveBlock\";\r\nexport * from \"./gradientBlock\";\r\nexport * from \"./nLerpBlock\";\r\nexport * from \"./worleyNoise3DBlock\";\r\nexport * from \"./simplexPerlin3DBlock\";\r\nexport * from \"./normalBlendBlock\";\r\nexport * from \"./rotate2dBlock\";\r\nexport * from \"./reflectBlock\";\r\nexport * from \"./refractBlock\";\r\nexport * from \"./desaturateBlock\";\r\nexport * from \"./PBR/index\";\r\nexport * from \"./Particle/index\";\r\nexport * from \"./modBlock\";\r\nexport * from \"./matrixBuilderBlock\";\r\nexport * from \"./conditionalBlock\";\r\nexport * from \"./cloudBlock\";\r\nexport * from \"./voronoiNoiseBlock\";\r\nexport * from \"./elbowBlock\";\r\nexport * from \"./triPlanarBlock\";\r\nexport * from \"./biPlanarBlock\";\r\nexport * from \"./matrixDeterminantBlock\";\r\nexport * from \"./matrixTransposeBlock\";\r\nexport * from \"./meshAttributeExistsBlock\";\r\nexport * from \"./curveBlock\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nexport * from \"./Vertex/index\";\r\nexport * from \"./Fragment/index\";\r\nexport * from \"./Dual/index\";\r\nexport * from \"./Input/index\";\r\nexport * from \"./Teleport/index\";\r\nexport * from \"./multiplyBlock\";\r\nexport * from \"./addBlock\";\r\nexport * from \"./scaleBlock\";\r\nexport * from \"./clampBlock\";\r\nexport * from \"./crossBlock\";\r\nexport * from \"./customBlock\";\r\nexport * from \"./dotBlock\";\r\nexport * from \"./transformBlock\";\r\nexport * from \"./remapBlock\";\r\nexport * from \"./normalizeBlock\";\r\nexport * from \"./trigonometryBlock\";\r\nexport * from \"./colorMergerBlock\";\r\nexport * from \"./vectorMergerBlock\";\r\nexport * from \"./colorSplitterBlock\";\r\nexport * from \"./vectorSplitterBlock\";\r\nexport * from \"./lerpBlock\";\r\nexport * from \"./divideBlock\";\r\nexport * from \"./subtractBlock\";\r\nexport * from \"./stepBlock\";\r\nexport * from \"./oneMinusBlock\";\r\nexport * from \"./viewDirectionBlock\";\r\nexport * from \"./fresnelBlock\";\r\nexport * from \"./maxBlock\";\r\nexport * from \"./minBlock\";\r\nexport * from \"./distanceBlock\";\r\nexport * from \"./lengthBlock\";\r\nexport * from \"./negateBlock\";\r\nexport * from \"./powBlock\";\r\nexport * from \"./randomNumberBlock\";\r\nexport * from \"./arcTan2Block\";\r\nexport * from \"./smoothStepBlock\";\r\nexport * from \"./reciprocalBlock\";\r\nexport * from \"./replaceColorBlock\";\r\nexport * from \"./posterizeBlock\";\r\nexport * from \"./waveBlock\";\r\nexport * from \"./gradientBlock\";\r\nexport * from \"./nLerpBlock\";\r\nexport * from \"./worleyNoise3DBlock\";\r\nexport * from \"./simplexPerlin3DBlock\";\r\nexport * from \"./normalBlendBlock\";\r\nexport * from \"./rotate2dBlock\";\r\nexport * from \"./reflectBlock\";\r\nexport * from \"./refractBlock\";\r\nexport * from \"./desaturateBlock\";\r\nexport * from \"./PBR/index\";\r\nexport * from \"./Particle/index\";\r\nexport * from \"./modBlock\";\r\nexport * from \"./matrixBuilderBlock\";\r\nexport * from \"./conditionalBlock\";\r\nexport * from \"./cloudBlock\";\r\nexport * from \"./voronoiNoiseBlock\";\r\nexport * from \"./elbowBlock\";\r\nexport * from \"./triPlanarBlock\";\r\nexport * from \"./biPlanarBlock\";\r\nexport * from \"./matrixDeterminantBlock\";\r\nexport * from \"./matrixTransposeBlock\";\r\nexport * from \"./meshAttributeExistsBlock\";\r\nexport * from \"./curveBlock\";\r\nexport * from \"./colorConverterBlock\";\r\nexport * from \"./loopBlock\";\r\nexport * from \"./storageReadBlock\";\r\nexport * from \"./storageWriteBlock\";\r\n"]}
@@ -0,0 +1,49 @@
1
+ import { NodeMaterialBlock } from "../nodeMaterialBlock";
2
+ import type { NodeMaterialBuildState } from "../nodeMaterialBuildState";
3
+ import type { NodeMaterialConnectionPoint } from "../nodeMaterialBlockConnectionPoint";
4
+ import type { Scene } from "../../../scene.js";
5
+ /**
6
+ * Block used to repeat code
7
+ */
8
+ export declare class LoopBlock extends NodeMaterialBlock {
9
+ /**
10
+ * Gets or sets number of iterations
11
+ * Will be ignored if the iterations input is connected
12
+ */
13
+ iterations: number;
14
+ /**
15
+ * Creates a new LoopBlock
16
+ * @param name defines the block name
17
+ */
18
+ constructor(name: string);
19
+ /**
20
+ * Gets the current class name
21
+ * @returns the class name
22
+ */
23
+ getClassName(): string;
24
+ /**
25
+ * Gets the main input component
26
+ */
27
+ get input(): NodeMaterialConnectionPoint;
28
+ /**
29
+ * Gets the iterations input component
30
+ */
31
+ get iterationsInput(): NodeMaterialConnectionPoint;
32
+ /**
33
+ * Gets the output component
34
+ */
35
+ get output(): NodeMaterialConnectionPoint;
36
+ /**
37
+ * Gets the index component which will be incremented at each iteration
38
+ */
39
+ get index(): NodeMaterialConnectionPoint;
40
+ /**
41
+ * Gets the loop ID component
42
+ */
43
+ get loopID(): NodeMaterialConnectionPoint;
44
+ protected _buildBlock(state: NodeMaterialBuildState): this;
45
+ protected _postBuildBlock(state: NodeMaterialBuildState): this;
46
+ protected _dumpPropertiesCode(): string;
47
+ serialize(): any;
48
+ _deserialize(serializationObject: any, scene: Scene, rootUrl: string): void;
49
+ }
@@ -0,0 +1,110 @@
1
+ import { __decorate } from "../../../tslib.es6.js";
2
+ import { NodeMaterialBlock } from "../nodeMaterialBlock.js";
3
+ import { NodeMaterialBlockConnectionPointTypes } from "../Enums/nodeMaterialBlockConnectionPointTypes.js";
4
+ import { NodeMaterialBlockTargets } from "../Enums/nodeMaterialBlockTargets.js";
5
+ import { RegisterClass } from "../../../Misc/typeStore.js";
6
+ import { editableInPropertyPage } from "../../../Decorators/nodeDecorator.js";
7
+ import { NodeMaterialConnectionPointCustomObject } from "../nodeMaterialConnectionPointCustomObject.js";
8
+ /**
9
+ * Block used to repeat code
10
+ */
11
+ export class LoopBlock extends NodeMaterialBlock {
12
+ /**
13
+ * Creates a new LoopBlock
14
+ * @param name defines the block name
15
+ */
16
+ constructor(name) {
17
+ super(name, NodeMaterialBlockTargets.Neutral);
18
+ /**
19
+ * Gets or sets number of iterations
20
+ * Will be ignored if the iterations input is connected
21
+ */
22
+ this.iterations = 4;
23
+ this.registerInput("input", NodeMaterialBlockConnectionPointTypes.AutoDetect);
24
+ this.registerInput("iterations", NodeMaterialBlockConnectionPointTypes.Float, true);
25
+ this.registerOutput("output", NodeMaterialBlockConnectionPointTypes.BasedOnInput);
26
+ this.registerOutput("index", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);
27
+ this.registerOutput("loopID", NodeMaterialBlockConnectionPointTypes.Object, undefined, new NodeMaterialConnectionPointCustomObject("loopID", this, 1 /* NodeMaterialConnectionPointDirection.Output */, LoopBlock, "LoopBlock"));
28
+ this._outputs[0]._typeConnectionSource = this._inputs[0];
29
+ this._outputs[0]._forPostBuild = true;
30
+ this._outputs[2]._redirectedSource = this._inputs[0];
31
+ this._outputs[1]._preventBubbleUp = true;
32
+ this._outputs[2]._preventBubbleUp = true;
33
+ }
34
+ /**
35
+ * Gets the current class name
36
+ * @returns the class name
37
+ */
38
+ getClassName() {
39
+ return "LoopBlock";
40
+ }
41
+ /**
42
+ * Gets the main input component
43
+ */
44
+ get input() {
45
+ return this._inputs[0];
46
+ }
47
+ /**
48
+ * Gets the iterations input component
49
+ */
50
+ get iterationsInput() {
51
+ return this._inputs[1];
52
+ }
53
+ /**
54
+ * Gets the output component
55
+ */
56
+ get output() {
57
+ return this._outputs[0];
58
+ }
59
+ /**
60
+ * Gets the index component which will be incremented at each iteration
61
+ */
62
+ get index() {
63
+ return this._outputs[1];
64
+ }
65
+ /**
66
+ * Gets the loop ID component
67
+ */
68
+ get loopID() {
69
+ return this._outputs[2];
70
+ }
71
+ _buildBlock(state) {
72
+ super._buildBlock(state);
73
+ const output = this._outputs[0];
74
+ const index = this._outputs[1];
75
+ const indexName = state._getFreeVariableName("index");
76
+ const decl = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */ ? "var" : "int";
77
+ const castFloat = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */ ? "f32" : "float";
78
+ const castInt = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */ ? "i32" : "int";
79
+ // Declare storage variable and store initial value
80
+ state.compilationString += state._declareOutput(output) + ` = ${this.input.associatedVariableName};\n`;
81
+ // Iterations
82
+ const iterations = this.iterationsInput.isConnected ? `${castInt}(${this.iterationsInput.associatedVariableName})` : this.iterations;
83
+ // Loop
84
+ state.compilationString += `for (${decl} ${indexName} = 0; ${indexName} < ${iterations}; ${indexName}++){\n`;
85
+ state.compilationString += `${state._declareOutput(index)} = ${castFloat}(${indexName});\n`;
86
+ return this;
87
+ }
88
+ _postBuildBlock(state) {
89
+ super._postBuildBlock(state);
90
+ state.compilationString += `}\n`;
91
+ return this;
92
+ }
93
+ _dumpPropertiesCode() {
94
+ return super._dumpPropertiesCode() + `${this._codeVariableName}.iterations = ${this.iterations};\n`;
95
+ }
96
+ serialize() {
97
+ const serializationObject = super.serialize();
98
+ serializationObject.iterations = this.iterations;
99
+ return serializationObject;
100
+ }
101
+ _deserialize(serializationObject, scene, rootUrl) {
102
+ super._deserialize(serializationObject, scene, rootUrl);
103
+ this.iterations = serializationObject.iterations;
104
+ }
105
+ }
106
+ __decorate([
107
+ editableInPropertyPage("Iterations", 2 /* PropertyTypeForEdition.Int */)
108
+ ], LoopBlock.prototype, "iterations", void 0);
109
+ RegisterClass("BABYLON.LoopBlock", LoopBlock);
110
+ //# sourceMappingURL=loopBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loopBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/loopBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../nodeMaterialConnectionPointCustomObject\";\r\n/**\r\n * Block used to repeat code\r\n */\r\nexport class LoopBlock extends NodeMaterialBlock {\r\n /**\r\n * Gets or sets number of iterations\r\n * Will be ignored if the iterations input is connected\r\n */\r\n @editableInPropertyPage(\"Iterations\", PropertyTypeForEdition.Int)\r\n public iterations = 4;\r\n\r\n /**\r\n * Creates a new LoopBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"iterations\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.BasedOnInput);\r\n this.registerOutput(\"index\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\r\n \"loopID\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n undefined,\r\n new NodeMaterialConnectionPointCustomObject(\"loopID\", this, NodeMaterialConnectionPointDirection.Output, LoopBlock, \"LoopBlock\")\r\n );\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[0];\r\n this._outputs[0]._forPostBuild = true;\r\n\r\n this._outputs[2]._redirectedSource = this._inputs[0];\r\n\r\n this._outputs[1]._preventBubbleUp = true;\r\n this._outputs[2]._preventBubbleUp = true;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"LoopBlock\";\r\n }\r\n\r\n /**\r\n * Gets the main input component\r\n */\r\n public get input(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the iterations input component\r\n */\r\n public get iterationsInput(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the index component which will be incremented at each iteration\r\n */\r\n public get index(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the loop ID component\r\n */\r\n public get loopID(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n const index = this._outputs[1];\r\n\r\n const indexName = state._getFreeVariableName(\"index\");\r\n\r\n const decl = state.shaderLanguage === ShaderLanguage.WGSL ? \"var\" : \"int\";\r\n const castFloat = state.shaderLanguage === ShaderLanguage.WGSL ? \"f32\" : \"float\";\r\n const castInt = state.shaderLanguage === ShaderLanguage.WGSL ? \"i32\" : \"int\";\r\n\r\n // Declare storage variable and store initial value\r\n state.compilationString += state._declareOutput(output) + ` = ${this.input.associatedVariableName};\\n`;\r\n\r\n // Iterations\r\n const iterations = this.iterationsInput.isConnected ? `${castInt}(${this.iterationsInput.associatedVariableName})` : this.iterations;\r\n\r\n // Loop\r\n state.compilationString += `for (${decl} ${indexName} = 0; ${indexName} < ${iterations}; ${indexName}++){\\n`;\r\n state.compilationString += `${state._declareOutput(index)} = ${castFloat}(${indexName});\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _postBuildBlock(state: NodeMaterialBuildState) {\r\n super._postBuildBlock(state);\r\n\r\n state.compilationString += `}\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n return super._dumpPropertiesCode() + `${this._codeVariableName}.iterations = ${this.iterations};\\n`;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.iterations = this.iterations;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.iterations = serializationObject.iterations;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.LoopBlock\", LoopBlock);\r\n"]}
@@ -0,0 +1,27 @@
1
+ import { NodeMaterialBlock } from "../nodeMaterialBlock";
2
+ import type { NodeMaterialBuildState } from "../nodeMaterialBuildState";
3
+ import { type NodeMaterialConnectionPoint } from "../nodeMaterialBlockConnectionPoint";
4
+ /**
5
+ * Block used to read from a variable within a loop
6
+ */
7
+ export declare class StorageReadBlock extends NodeMaterialBlock {
8
+ /**
9
+ * Creates a new StorageReadBlock
10
+ * @param name defines the block name
11
+ */
12
+ constructor(name: string);
13
+ /**
14
+ * Gets the current class name
15
+ * @returns the class name
16
+ */
17
+ getClassName(): string;
18
+ /**
19
+ * Gets the loop link component
20
+ */
21
+ get loopID(): NodeMaterialConnectionPoint;
22
+ /**
23
+ * Gets the value component
24
+ */
25
+ get value(): NodeMaterialConnectionPoint;
26
+ protected _buildBlock(state: NodeMaterialBuildState): this;
27
+ }
@@ -0,0 +1,52 @@
1
+ import { NodeMaterialBlock } from "../nodeMaterialBlock.js";
2
+ import { NodeMaterialBlockConnectionPointTypes } from "../Enums/nodeMaterialBlockConnectionPointTypes.js";
3
+ import { NodeMaterialBlockTargets } from "../Enums/nodeMaterialBlockTargets.js";
4
+ import { RegisterClass } from "../../../Misc/typeStore.js";
5
+ import { LoopBlock } from "./loopBlock.js";
6
+ import { NodeMaterialConnectionPointCustomObject } from "../nodeMaterialConnectionPointCustomObject.js";
7
+ /**
8
+ * Block used to read from a variable within a loop
9
+ */
10
+ export class StorageReadBlock extends NodeMaterialBlock {
11
+ /**
12
+ * Creates a new StorageReadBlock
13
+ * @param name defines the block name
14
+ */
15
+ constructor(name) {
16
+ super(name, NodeMaterialBlockTargets.Neutral);
17
+ this.registerInput("loopID", NodeMaterialBlockConnectionPointTypes.Object, false, undefined, new NodeMaterialConnectionPointCustomObject("loopID", this, 0 /* NodeMaterialConnectionPointDirection.Input */, LoopBlock, "LoopBlock"));
18
+ this.registerOutput("value", NodeMaterialBlockConnectionPointTypes.AutoDetect);
19
+ this._outputs[0]._linkedConnectionSource = this._inputs[0];
20
+ }
21
+ /**
22
+ * Gets the current class name
23
+ * @returns the class name
24
+ */
25
+ getClassName() {
26
+ return "StorageReadBlock";
27
+ }
28
+ /**
29
+ * Gets the loop link component
30
+ */
31
+ get loopID() {
32
+ return this._inputs[0];
33
+ }
34
+ /**
35
+ * Gets the value component
36
+ */
37
+ get value() {
38
+ return this._outputs[0];
39
+ }
40
+ _buildBlock(state) {
41
+ super._buildBlock(state);
42
+ const value = this.value;
43
+ if (!this.loopID.isConnected) {
44
+ return this;
45
+ }
46
+ const loopBlock = this.loopID.connectedPoint.ownerBlock;
47
+ state.compilationString += state._declareOutput(value) + ` = ${loopBlock.output.associatedVariableName};\n`;
48
+ return this;
49
+ }
50
+ }
51
+ RegisterClass("BABYLON.StorageReadBlock", StorageReadBlock);
52
+ //# sourceMappingURL=storageReadBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storageReadBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/storageReadBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAGvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,uCAAuC,EAAE,MAAM,4CAA4C,CAAC;AACrG;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,iBAAiB;IACnD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,CACd,QAAQ,EACR,qCAAqC,CAAC,MAAM,EAC5C,KAAK,EACL,SAAS,EACT,IAAI,uCAAuC,CAAC,QAAQ,EAAE,IAAI,sDAA8C,SAAS,EAAE,WAAW,CAAC,CAClI,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,qCAAqC,CAAC,UAAU,CAAC,CAAC;QAE/E,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,uBAAuB,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC1B,OAAO,IAAI,CAAC;SACf;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,cAAe,CAAC,UAAuB,CAAC;QAEtE,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,sBAAsB,KAAK,CAAC;QAE5G,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,0BAA0B,EAAE,gBAAgB,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialConnectionPointDirection, type NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { LoopBlock } from \"./loopBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../nodeMaterialConnectionPointCustomObject\";\r\n/**\r\n * Block used to read from a variable within a loop\r\n */\r\nexport class StorageReadBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new StorageReadBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\r\n \"loopID\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n false,\r\n undefined,\r\n new NodeMaterialConnectionPointCustomObject(\"loopID\", this, NodeMaterialConnectionPointDirection.Input, LoopBlock, \"LoopBlock\")\r\n );\r\n this.registerOutput(\"value\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n\r\n this._outputs[0]._linkedConnectionSource = this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"StorageReadBlock\";\r\n }\r\n\r\n /**\r\n * Gets the loop link component\r\n */\r\n public get loopID(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the value component\r\n */\r\n public get value(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const value = this.value;\r\n\r\n if (!this.loopID.isConnected) {\r\n return this;\r\n }\r\n\r\n const loopBlock = this.loopID.connectedPoint!.ownerBlock as LoopBlock;\r\n\r\n state.compilationString += state._declareOutput(value) + ` = ${loopBlock.output.associatedVariableName};\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.StorageReadBlock\", StorageReadBlock);\r\n"]}
@@ -0,0 +1,31 @@
1
+ import { NodeMaterialBlock } from "../nodeMaterialBlock";
2
+ import type { NodeMaterialBuildState } from "../nodeMaterialBuildState";
3
+ import { type NodeMaterialConnectionPoint } from "../nodeMaterialBlockConnectionPoint";
4
+ /**
5
+ * Block used to write to a variable within a loop
6
+ */
7
+ export declare class StorageWriteBlock extends NodeMaterialBlock {
8
+ /**
9
+ * Creates a new StorageWriteBlock
10
+ * @param name defines the block name
11
+ */
12
+ constructor(name: string);
13
+ /**
14
+ * Gets the current class name
15
+ * @returns the class name
16
+ */
17
+ getClassName(): string;
18
+ /**
19
+ * Gets the loop link component
20
+ */
21
+ get loopID(): NodeMaterialConnectionPoint;
22
+ /**
23
+ * Gets the value component
24
+ */
25
+ get value(): NodeMaterialConnectionPoint;
26
+ /** Gets a boolean indicating that this connection will be used in the fragment shader
27
+ * @returns true if connected in fragment shader
28
+ */
29
+ isConnectedInFragmentShader(): boolean;
30
+ protected _buildBlock(state: NodeMaterialBuildState): this;
31
+ }
@@ -0,0 +1,62 @@
1
+ import { NodeMaterialBlock } from "../nodeMaterialBlock.js";
2
+ import { NodeMaterialBlockConnectionPointTypes } from "../Enums/nodeMaterialBlockConnectionPointTypes.js";
3
+ import { NodeMaterialBlockTargets } from "../Enums/nodeMaterialBlockTargets.js";
4
+ import { RegisterClass } from "../../../Misc/typeStore.js";
5
+ import { LoopBlock } from "./loopBlock.js";
6
+ import { NodeMaterialConnectionPointCustomObject } from "../nodeMaterialConnectionPointCustomObject.js";
7
+ /**
8
+ * Block used to write to a variable within a loop
9
+ */
10
+ export class StorageWriteBlock extends NodeMaterialBlock {
11
+ /**
12
+ * Creates a new StorageWriteBlock
13
+ * @param name defines the block name
14
+ */
15
+ constructor(name) {
16
+ super(name, NodeMaterialBlockTargets.Neutral);
17
+ this.registerInput("loopID", NodeMaterialBlockConnectionPointTypes.Object, false, undefined, new NodeMaterialConnectionPointCustomObject("loopID", this, 0 /* NodeMaterialConnectionPointDirection.Input */, LoopBlock, "LoopBlock"));
18
+ this.registerInput("value", NodeMaterialBlockConnectionPointTypes.AutoDetect);
19
+ this._linkConnectionTypes(0, 1);
20
+ }
21
+ /**
22
+ * Gets the current class name
23
+ * @returns the class name
24
+ */
25
+ getClassName() {
26
+ return "StorageWriteBlock";
27
+ }
28
+ /**
29
+ * Gets the loop link component
30
+ */
31
+ get loopID() {
32
+ return this._inputs[0];
33
+ }
34
+ /**
35
+ * Gets the value component
36
+ */
37
+ get value() {
38
+ return this._inputs[1];
39
+ }
40
+ /** Gets a boolean indicating that this connection will be used in the fragment shader
41
+ * @returns true if connected in fragment shader
42
+ */
43
+ isConnectedInFragmentShader() {
44
+ if (!this.loopID.isConnected) {
45
+ return false;
46
+ }
47
+ const loopBlock = this.loopID.connectedPoint.ownerBlock;
48
+ return loopBlock.output.isConnectedInFragmentShader;
49
+ }
50
+ _buildBlock(state) {
51
+ super._buildBlock(state);
52
+ const value = this.value;
53
+ if (!this.loopID.isConnected) {
54
+ return this;
55
+ }
56
+ const loopBlock = this.loopID.connectedPoint.ownerBlock;
57
+ state.compilationString += `${loopBlock.output.associatedVariableName} = ${value.associatedVariableName};\n`;
58
+ return this;
59
+ }
60
+ }
61
+ RegisterClass("BABYLON.StorageWriteBlock", StorageWriteBlock);
62
+ //# sourceMappingURL=storageWriteBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storageWriteBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/storageWriteBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAGvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,uCAAuC,EAAE,MAAM,4CAA4C,CAAC;AACrG;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,iBAAiB;IACpD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,CACd,QAAQ,EACR,qCAAqC,CAAC,MAAM,EAC5C,KAAK,EACL,SAAS,EACT,IAAI,uCAAuC,CAAC,QAAQ,EAAE,IAAI,sDAA8C,SAAS,EAAE,WAAW,CAAC,CAClI,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,UAAU,CAAC,CAAC;QAE9E,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACa,2BAA2B;QACvC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC1B,OAAO,KAAK,CAAC;SAChB;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,cAAe,CAAC,UAAuB,CAAC;QAEtE,OAAO,SAAS,CAAC,MAAM,CAAC,2BAA2B,CAAC;IACxD,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC1B,OAAO,IAAI,CAAC;SACf;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,cAAe,CAAC,UAAuB,CAAC;QAEtE,KAAK,CAAC,iBAAiB,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,sBAAsB,MAAM,KAAK,CAAC,sBAAsB,KAAK,CAAC;QAE7G,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,2BAA2B,EAAE,iBAAiB,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialConnectionPointDirection, type NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { LoopBlock } from \"./loopBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../nodeMaterialConnectionPointCustomObject\";\r\n/**\r\n * Block used to write to a variable within a loop\r\n */\r\nexport class StorageWriteBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new StorageWriteBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\r\n \"loopID\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n false,\r\n undefined,\r\n new NodeMaterialConnectionPointCustomObject(\"loopID\", this, NodeMaterialConnectionPointDirection.Input, LoopBlock, \"LoopBlock\")\r\n );\r\n this.registerInput(\"value\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n\r\n this._linkConnectionTypes(0, 1);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"StorageWriteBlock\";\r\n }\r\n\r\n /**\r\n * Gets the loop link component\r\n */\r\n public get loopID(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the value component\r\n */\r\n public get value(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /** Gets a boolean indicating that this connection will be used in the fragment shader\r\n * @returns true if connected in fragment shader\r\n */\r\n public override isConnectedInFragmentShader() {\r\n if (!this.loopID.isConnected) {\r\n return false;\r\n }\r\n const loopBlock = this.loopID.connectedPoint!.ownerBlock as LoopBlock;\r\n\r\n return loopBlock.output.isConnectedInFragmentShader;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const value = this.value;\r\n\r\n if (!this.loopID.isConnected) {\r\n return this;\r\n }\r\n\r\n const loopBlock = this.loopID.connectedPoint!.ownerBlock as LoopBlock;\r\n\r\n state.compilationString += `${loopBlock.output.associatedVariableName} = ${value.associatedVariableName};\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.StorageWriteBlock\", StorageWriteBlock);\r\n"]}
@@ -370,6 +370,7 @@ export declare class NodeMaterial extends PushMaterial {
370
370
  */
371
371
  needAlphaTesting(): boolean;
372
372
  private _processInitializeOnLink;
373
+ private _attachBlock;
373
374
  private _initializeBlock;
374
375
  private _resetDualBlocks;
375
376
  /**