@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.
- package/Engines/Extensions/engine.prefilteredCubeTexture.d.ts +0 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.js +0 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.readTexture.d.ts +2 -9
- package/Engines/Extensions/engine.readTexture.js +3 -76
- package/Engines/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.alpha.js +3 -3
- package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js +5 -5
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +10 -10
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.readTexture.js +3 -3
- package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +6 -6
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +2 -2
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetTexture.js +2 -2
- package/Engines/WebGPU/Extensions/engine.renderTargetTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +2 -2
- package/Engines/WebGPU/webgpuRenderTargetWrapper.js.map +1 -1
- package/Engines/abstractEngine.d.ts +2 -0
- package/Engines/abstractEngine.functions.d.ts +9 -0
- package/Engines/abstractEngine.functions.js +76 -0
- package/Engines/abstractEngine.functions.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.d.ts +7 -5
- package/Engines/engine.js +7 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +66 -0
- package/Engines/thinWebGPUEngine.js +120 -0
- package/Engines/thinWebGPUEngine.js.map +1 -0
- package/Engines/webgpuEngine.d.ts +9 -58
- package/Engines/webgpuEngine.js +9 -108
- package/Engines/webgpuEngine.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.d.ts +4 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +17 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.d.ts +2 -0
- package/Materials/Node/Blocks/Dual/textureBlock.js +30 -23
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorConverterBlock.d.ts +36 -0
- package/Materials/Node/Blocks/colorConverterBlock.js +192 -0
- package/Materials/Node/Blocks/colorConverterBlock.js.map +1 -0
- package/Materials/Node/Blocks/index.d.ts +4 -0
- package/Materials/Node/Blocks/index.js +4 -0
- package/Materials/Node/Blocks/index.js.map +1 -1
- package/Materials/Node/Blocks/loopBlock.d.ts +49 -0
- package/Materials/Node/Blocks/loopBlock.js +110 -0
- package/Materials/Node/Blocks/loopBlock.js.map +1 -0
- package/Materials/Node/Blocks/storageReadBlock.d.ts +27 -0
- package/Materials/Node/Blocks/storageReadBlock.js +52 -0
- package/Materials/Node/Blocks/storageReadBlock.js.map +1 -0
- package/Materials/Node/Blocks/storageWriteBlock.d.ts +31 -0
- package/Materials/Node/Blocks/storageWriteBlock.js +62 -0
- package/Materials/Node/Blocks/storageWriteBlock.js.map +1 -0
- package/Materials/Node/nodeMaterial.d.ts +1 -0
- package/Materials/Node/nodeMaterial.js +44 -12
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.d.ts +6 -0
- package/Materials/Node/nodeMaterialBlock.js +46 -3
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +6 -0
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +9 -0
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +4 -1
- package/Materials/Node/nodeMaterialBuildState.js +2 -0
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.d.ts +0 -1
- package/Materials/Textures/Filtering/hdrFiltering.js +0 -1
- package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
- package/Materials/Textures/Loaders/basisTextureLoader.d.ts +0 -1
- package/Materials/Textures/Loaders/basisTextureLoader.js +0 -1
- package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +0 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js +0 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +0 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +0 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.d.ts +0 -2
- package/Materials/Textures/Procedurals/proceduralTexture.js +0 -2
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +0 -1
- package/Materials/Textures/baseTexture.js +0 -1
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/colorGradingTexture.d.ts +0 -1
- package/Materials/Textures/colorGradingTexture.js +0 -2
- package/Materials/Textures/colorGradingTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.d.ts +0 -2
- package/Materials/Textures/cubeTexture.js +0 -2
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/equiRectangularCubeTexture.d.ts +0 -1
- package/Materials/Textures/equiRectangularCubeTexture.js +0 -1
- package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.d.ts +0 -1
- package/Materials/Textures/hdrCubeTexture.js +0 -1
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/rawCubeTexture.d.ts +0 -1
- package/Materials/Textures/rawCubeTexture.js +0 -1
- package/Materials/Textures/rawCubeTexture.js.map +1 -1
- package/Materials/Textures/rawTexture.d.ts +0 -1
- package/Materials/Textures/rawTexture.js +0 -1
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.d.ts +0 -1
- package/Materials/Textures/rawTexture2DArray.js +0 -1
- package/Materials/Textures/rawTexture2DArray.js.map +1 -1
- package/Materials/Textures/rawTexture3D.d.ts +0 -1
- package/Materials/Textures/rawTexture3D.js +0 -1
- package/Materials/Textures/rawTexture3D.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +2 -3
- package/Materials/Textures/renderTargetTexture.js +13 -5
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/effectRenderer.d.ts +0 -1
- package/Materials/effectRenderer.js +0 -2
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/material.detailMapConfiguration.d.ts +2 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +0 -1
- package/Materials/uniformBuffer.js +0 -1
- package/Materials/uniformBuffer.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +3 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +19 -8
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Misc/basis.d.ts +3 -3
- package/Misc/basis.js.map +1 -1
- package/Misc/dds.d.ts +0 -1
- package/Misc/dds.js +0 -1
- package/Misc/dds.js.map +1 -1
- package/Misc/dumpTools.js +103 -82
- package/Misc/dumpTools.js.map +1 -1
- package/Misc/environmentTextureTools.d.ts +0 -2
- package/Misc/environmentTextureTools.js +0 -2
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/index.d.ts +2 -0
- package/Misc/index.js +3 -0
- package/Misc/index.js.map +1 -1
- package/Misc/minMaxReducer.d.ts +0 -1
- package/Misc/minMaxReducer.js +0 -1
- package/Misc/minMaxReducer.js.map +1 -1
- package/Misc/rgbdTextureTools.d.ts +0 -2
- package/Misc/rgbdTextureTools.js +5 -10
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/screenshotTools.d.ts +0 -1
- package/Misc/screenshotTools.js +0 -1
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/textureTools.d.ts +0 -2
- package/Misc/textureTools.js +11 -2
- package/Misc/textureTools.js.map +1 -1
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.js.map +1 -1
- package/PostProcesses/anaglyphPostProcess.d.ts +2 -2
- package/PostProcesses/anaglyphPostProcess.js.map +1 -1
- package/PostProcesses/highlightsPostProcess.d.ts +2 -2
- package/PostProcesses/highlightsPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +0 -2
- package/PostProcesses/postProcess.js +0 -2
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/stereoscopicInterlacePostProcess.d.ts +3 -3
- package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +2 -2
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- 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":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAEvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;IACtD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,qCAAqC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,qCAAqC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE/E,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,qCAAqC,CAAC,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,qCAAqC,CAAC,MAAM,CAAC,CAAC;IAC7E,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,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;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEkB,YAAY,CAAC,IAAY;QACxC,IAAI,IAAI,KAAK,MAAM,EAAE;YACjB,OAAO,OAAO,CAAC;SAClB;QACD,IAAI,IAAI,KAAK,MAAM,EAAE;YACjB,OAAO,OAAO,CAAC;SAClB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEnC,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAC;QAEjF,IAAI,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmCR,CAAC;QAEP,IAAI,OAAO,GAAG;;;;;;;;;;;;;;;;;;;cAmBR,CAAC;QAEP,IAAI,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgCR,CAAC;QAEP,IAAI,KAAK,CAAC,cAAc,gCAAwB,EAAE;YAC9C,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;SAC7C;QAED,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5C,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5C,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,WAAW,EAAE;YACtB,IAAI,SAAS,CAAC,YAAY,EAAE;gBACxB,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,MAAM,QAAQ,CAAC,sBAAsB,KAAK,CAAC;aAC3G;YAED,IAAI,SAAS,CAAC,YAAY,EAAE;gBACxB,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,cAAc,QAAQ,CAAC,sBAAsB,MAAM,CAAC;aACpH;SACJ;aAAM,IAAI,QAAQ,CAAC,WAAW,EAAE;YAC7B,IAAI,SAAS,CAAC,YAAY,EAAE;gBACxB,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,cAAc,QAAQ,CAAC,sBAAsB,MAAM,CAAC;aACpH;YACD,IAAI,SAAS,CAAC,YAAY,EAAE;gBACxB,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,MAAM,QAAQ,CAAC,sBAAsB,KAAK,CAAC;aAC3G;SACJ;aAAM;YACH,IAAI,SAAS,CAAC,YAAY,EAAE;gBACxB,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,IAAI,SAAS,CAAC;aACrF;YAED,IAAI,SAAS,CAAC,YAAY,EAAE;gBACxB,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,IAAI,SAAS,CAAC;aACrF;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,6BAA6B,EAAE,mBAAmB,CAAC,CAAC","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":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAIvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAA0B,6CAAsC;AAG/F,OAAO,EAAE,uCAAuC,EAAE,MAAM,4CAA4C,CAAC;AACrG;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,iBAAiB;IAQ5C;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAZlD;;;WAGG;QAEI,eAAU,GAAG,CAAC,CAAC;QASlB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,UAAU,CAAC,CAAC;QAC9E,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,qCAAqC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,YAAY,CAAC,CAAC;QAClF,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,qCAAqC,CAAC,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAC7G,IAAI,CAAC,cAAc,CACf,QAAQ,EACR,qCAAqC,CAAC,MAAM,EAC5C,SAAS,EACT,IAAI,uCAAuC,CAAC,QAAQ,EAAE,IAAI,uDAA+C,SAAS,EAAE,WAAW,CAAC,CACnI,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC;QAEtC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAErD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE/B,MAAM,SAAS,GAAG,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEtD,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,gCAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1E,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,gCAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QACjF,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,gCAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAE7E,mDAAmD;QACnD,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC;QAEvG,aAAa;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAErI,OAAO;QACP,KAAK,CAAC,iBAAiB,IAAI,QAAQ,IAAI,IAAI,SAAS,SAAS,SAAS,MAAM,UAAU,KAAK,SAAS,QAAQ,CAAC;QAC7G,KAAK,CAAC,iBAAiB,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,SAAS,IAAI,SAAS,MAAM,CAAC;QAE5F,OAAO,IAAI,CAAC;IAChB,CAAC;IAEkB,eAAe,CAAC,KAA6B;QAC5D,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE7B,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC;QAEjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEkB,mBAAmB;QAClC,OAAO,KAAK,CAAC,mBAAmB,EAAE,GAAG,GAAG,IAAI,CAAC,iBAAiB,iBAAiB,IAAI,CAAC,UAAU,KAAK,CAAC;IACxG,CAAC;IAEe,SAAS;QACrB,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAE9C,mBAAmB,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAEjD,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAEe,YAAY,CAAC,mBAAwB,EAAE,KAAY,EAAE,OAAe;QAChF,KAAK,CAAC,YAAY,CAAC,mBAAmB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAExD,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC;IACrD,CAAC;CACJ;AA1HU;IADN,sBAAsB,CAAC,YAAY,qCAA6B;6CAC3C;AA4H1B,aAAa,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC","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"]}
|