@aura3d/engine 4.0.4 → 4.0.5

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 (48) hide show
  1. package/README.md +2 -2
  2. package/dist/aura3d-cli/migrate-three/CompatibilityWarnings.js +1 -1
  3. package/dist/aura3d-cli/migrate-three/CompatibilityWarnings.js.map +1 -1
  4. package/dist/aura3d-cli/migrate-three/emit.js +3 -3
  5. package/dist/aura3d-cli/migrate-three/emit.js.map +1 -1
  6. package/dist/aura3d-cli/migrate-three/mappings.d.ts.map +1 -1
  7. package/dist/aura3d-cli/migrate-three/mappings.js +3 -1
  8. package/dist/aura3d-cli/migrate-three/mappings.js.map +1 -1
  9. package/dist/create-aura3d/index.js +1 -1
  10. package/dist/engine/agent-api/compiler/errors.d.ts +1 -1
  11. package/dist/engine/agent-api/compiler/errors.d.ts.map +1 -1
  12. package/dist/engine/agent-api/compiler/errors.js.map +1 -1
  13. package/dist/engine/agent-api/index.d.ts +2 -0
  14. package/dist/engine/agent-api/index.d.ts.map +1 -1
  15. package/dist/engine/agent-api/index.js +2 -0
  16. package/dist/engine/agent-api/index.js.map +1 -1
  17. package/dist/engine/agent-api/nodes/material.d.ts +6 -0
  18. package/dist/engine/agent-api/nodes/material.d.ts.map +1 -1
  19. package/dist/engine/agent-api/nodes/material.js +6 -0
  20. package/dist/engine/agent-api/nodes/material.js.map +1 -1
  21. package/dist/engine/agent-api/nodes/tsl/emit.d.ts +48 -0
  22. package/dist/engine/agent-api/nodes/tsl/emit.d.ts.map +1 -0
  23. package/dist/engine/agent-api/nodes/tsl/emit.js +361 -0
  24. package/dist/engine/agent-api/nodes/tsl/emit.js.map +1 -0
  25. package/dist/engine/agent-api/nodes/tsl/index.d.ts +115 -0
  26. package/dist/engine/agent-api/nodes/tsl/index.d.ts.map +1 -0
  27. package/dist/engine/agent-api/nodes/tsl/index.js +175 -0
  28. package/dist/engine/agent-api/nodes/tsl/index.js.map +1 -0
  29. package/dist/engine/agent-api/nodes/tsl/interpret.d.ts +21 -0
  30. package/dist/engine/agent-api/nodes/tsl/interpret.d.ts.map +1 -0
  31. package/dist/engine/agent-api/nodes/tsl/interpret.js +113 -0
  32. package/dist/engine/agent-api/nodes/tsl/interpret.js.map +1 -0
  33. package/dist/engine/agent-api/nodes/tsl/ir.d.ts +204 -0
  34. package/dist/engine/agent-api/nodes/tsl/ir.d.ts.map +1 -0
  35. package/dist/engine/agent-api/nodes/tsl/ir.js +501 -0
  36. package/dist/engine/agent-api/nodes/tsl/ir.js.map +1 -0
  37. package/dist/engine/public/index.d.ts +2 -2
  38. package/dist/engine/public/index.d.ts.map +1 -1
  39. package/dist/engine/public/index.js +1 -1
  40. package/dist/engine/public/index.js.map +1 -1
  41. package/package.json +26 -26
  42. package/templates/cinematic-scene/package.json +2 -2
  43. package/templates/mini-game/package.json +2 -2
  44. package/templates/product-viewer/package.json +2 -2
  45. package/templates/production-asset-inspector/package.json +1 -1
  46. package/templates/production-material-studio/package.json +1 -1
  47. package/templates/production-product-configurator/package.json +1 -1
  48. package/templates/production-product-viewer/package.json +1 -1
@@ -0,0 +1,175 @@
1
+ /**
2
+ * SH-01 / L1-11 — public TSL-subset surface: `tsl.*` node factories and
3
+ * `material.node(...)` (see `emit.ts`). GLSL only; three.js TSL names outside
4
+ * the subset throw `tsl-unsupported-node` instead of resolving to `undefined`.
5
+ */
6
+ import { assertAuraCustomMaterialSpec } from "../../compiler/customMaterial.js";
7
+ import { Fn, If, Loop, TSL_BUILTIN_TYPES, TslNode, TslUniformArray, constNode, construct, op, parseHexColor, swizzle, tslError, toNode } from "./ir.js";
8
+ import { compileTslMaterial } from "./emit.js";
9
+ export { Fn, If, Loop, TslNode, compileTslMaterial };
10
+ import { evaluateTsl } from "./interpret.js";
11
+ export { evaluateTsl };
12
+ const builtin = (name) => new TslNode(TSL_BUILTIN_TYPES[name], { k: "builtin", name });
13
+ const IDENT = /^[A-Za-z_]\w*$/;
14
+ const KIND = {
15
+ float: { type: "float", spec: "f32" },
16
+ int: { type: "int", spec: "i32" },
17
+ bool: { type: "bool", spec: "bool" },
18
+ vec2: { type: "vec2", spec: "vec2" },
19
+ vec3: { type: "vec3", spec: "vec3" },
20
+ vec4: { type: "vec4", spec: "vec4" },
21
+ color: { type: "vec3", spec: "color3" }
22
+ };
23
+ function inferKind(value) {
24
+ if (typeof value === "number")
25
+ return "float";
26
+ if (typeof value === "boolean")
27
+ return "bool";
28
+ if (typeof value === "string")
29
+ return "color";
30
+ if ((Array.isArray(value) || ArrayBuffer.isView(value)) && value.length >= 2 && value.length <= 4) {
31
+ return ["vec2", "vec3", "vec4"][value.length - 2];
32
+ }
33
+ return tslError("invalid-tsl-graph", `cannot infer a uniform type from ${String(value)}; pass { type } explicitly`);
34
+ }
35
+ /** `uniform(value, { name?, type? })` — name it to update it later with `handle.setUniform(name, value)`. */
36
+ function uniform(value, options = {}) {
37
+ const kind = options.type ?? inferKind(value);
38
+ const mapped = KIND[kind];
39
+ if (options.name !== undefined && !IDENT.test(options.name))
40
+ tslError("invalid-tsl-graph", `uniform name "${options.name}" is not a valid identifier`);
41
+ if (kind === "color" && typeof value === "string")
42
+ parseHexColor(value);
43
+ return new TslNode(mapped.type, { k: "uniform", ...(options.name !== undefined ? { name: options.name } : {}), value, specType: mapped.spec });
44
+ }
45
+ /** `uniformArray(values, type, { name? })`: N uniforms named `<name>_0 … <name>_{N-1}`; `.element(i)` selects one. */
46
+ function uniformArray(values, type = "float", options = {}) {
47
+ if (values.length < 1 || values.length > 64)
48
+ tslError("invalid-tsl-graph", "uniformArray needs 1..64 elements");
49
+ if (options.name !== undefined && !IDENT.test(options.name))
50
+ tslError("invalid-tsl-graph", `uniformArray name "${options.name}" is not a valid identifier`);
51
+ const elements = values.map((value, index) => uniform(value, { type, ...(options.name ? { name: `${options.name}_${index}` } : {}) }));
52
+ return new TslUniformArray(options.name, KIND[type].type, values, elements);
53
+ }
54
+ /** `texture(handle, uvNode?, { name? })` → vec4. `handle` is whatever `material.custom` accepts for a texture2d uniform. */
55
+ function texture(handle, uvNode, options = {}) {
56
+ if (options.name !== undefined && !IDENT.test(options.name))
57
+ tslError("invalid-tsl-graph", `texture name "${options.name}" is not a valid identifier`);
58
+ const sampler = new TslNode("sampler2D", { k: "uniform", ...(options.name !== undefined ? { name: options.name } : {}), value: handle, specType: "texture2d" });
59
+ const uv = uvNode === undefined ? builtin("uv") : toNode(uvNode);
60
+ if (uv.type !== "vec2")
61
+ tslError("tsl-type-mismatch", `texture() uv must be a vec2 (got ${uv.type})`);
62
+ return new TslNode("vec4", { k: "texture", sampler, uv });
63
+ }
64
+ function uvNode(index = 0) {
65
+ if (index !== 0)
66
+ tslError("tsl-unsupported-node", `tsl.uv(${index}): only the first UV set is supported`);
67
+ return builtin("uv");
68
+ }
69
+ function float(value) {
70
+ const node = toNode(value);
71
+ if (node.type === "float")
72
+ return node;
73
+ if (node.type === "int")
74
+ return op("toFloat", node);
75
+ return tslError("tsl-type-mismatch", `float() cannot convert ${node.type}`);
76
+ }
77
+ function int(value) {
78
+ const node = typeof value === "number" ? constNode("int", [Math.trunc(value)]) : toNode(value);
79
+ if (node.type === "int")
80
+ return node;
81
+ if (node.type === "float")
82
+ return op("toInt", node);
83
+ return tslError("tsl-type-mismatch", `int() cannot convert ${node.type}`);
84
+ }
85
+ function bool(value) {
86
+ const node = toNode(value);
87
+ if (node.type !== "bool")
88
+ tslError("tsl-type-mismatch", `bool() cannot convert ${node.type}`);
89
+ return node;
90
+ }
91
+ /** `color("#rrggbb")`, `color(r, g, b)` or `color(grey)` → vec3 as authored (no colour-space conversion). */
92
+ function color(...args) {
93
+ if (args.length === 3)
94
+ return constNode("vec3", args);
95
+ const only = args[0];
96
+ if (typeof only === "string")
97
+ return constNode("vec3", [...parseHexColor(only)]);
98
+ return constNode("vec3", [only, only, only]);
99
+ }
100
+ const unary = (name) => (a) => op(name, a);
101
+ const binary = (name) => (a, b) => op(name, a, b);
102
+ /** Every name in the supported subset (also the codemod's and docs' source of truth). */
103
+ export const TSL_SUPPORTED_NAMES = [
104
+ "positionLocal", "positionWorld", "normalLocal", "normalWorld", "uv", "time", "cameraPosition",
105
+ "uniform", "uniformArray", "texture", "color", "float", "int", "bool", "vec2", "vec3", "vec4",
106
+ "add", "sub", "mul", "div", "mod", "mix", "smoothstep", "clamp", "pow", "abs", "min", "max", "dot", "cross",
107
+ "normalize", "length", "distance", "sin", "cos", "tan", "fract", "floor", "ceil", "sign", "sqrt", "exp", "log",
108
+ "step", "atan2", "saturate", "oneMinus", "negate", "select",
109
+ "lessThan", "greaterThan", "lessThanEqual", "greaterThanEqual", "equal", "notEqual", "and", "or", "not",
110
+ "Fn", "If", "Loop"
111
+ ];
112
+ const tslCore = {
113
+ positionLocal: builtin("positionLocal"),
114
+ positionWorld: builtin("positionWorld"),
115
+ normalLocal: builtin("normalLocal"),
116
+ normalWorld: builtin("normalWorld"),
117
+ time: builtin("time"),
118
+ cameraPosition: builtin("cameraPosition"),
119
+ uv: uvNode,
120
+ uniform,
121
+ uniformArray,
122
+ texture,
123
+ color,
124
+ float,
125
+ int,
126
+ bool,
127
+ vec2: (...args) => construct("vec2", args),
128
+ vec3: (...args) => construct("vec3", args),
129
+ vec4: (...args) => construct("vec4", args),
130
+ add: binary("add"), sub: binary("sub"), mul: binary("mul"), div: binary("div"), mod: binary("mod"),
131
+ pow: binary("pow"), min: binary("min"), max: binary("max"), dot: binary("dot"), cross: binary("cross"),
132
+ distance: binary("distance"), atan2: binary("atan2"), step: binary("step"),
133
+ mix: (a, b, t) => op("mix", a, b, t),
134
+ smoothstep: (edge0, edge1, x) => op("smoothstep", edge0, edge1, x),
135
+ clamp: (x, lo = 0, hi = 1) => op("clamp", x, lo, hi),
136
+ select: (condition, whenTrue, whenFalse) => op("select", condition, whenTrue, whenFalse),
137
+ abs: unary("abs"), normalize: unary("normalize"), length: unary("length"), sin: unary("sin"), cos: unary("cos"),
138
+ tan: unary("tan"), fract: unary("fract"), floor: unary("floor"), ceil: unary("ceil"), sign: unary("sign"),
139
+ sqrt: unary("sqrt"), exp: unary("exp"), log: unary("log"), saturate: unary("saturate"), oneMinus: unary("oneMinus"),
140
+ negate: unary("negate"), not: unary("not"),
141
+ lessThan: binary("lessThan"), greaterThan: binary("greaterThan"), lessThanEqual: binary("lessThanEqual"),
142
+ greaterThanEqual: binary("greaterThanEqual"), equal: binary("equal"), notEqual: binary("notEqual"),
143
+ and: binary("and"), or: binary("or"),
144
+ Fn,
145
+ If,
146
+ Loop,
147
+ /** `tsl.compile(options)`: the generated GLSL, uniform list and `material.custom` spec for a node material. */
148
+ compile: compileTslMaterial,
149
+ /** `tsl.evaluate(node, context)`: CPU reference evaluation of a graph (same op semantics as constant folding). */
150
+ evaluate: evaluateTsl,
151
+ supportedNames: TSL_SUPPORTED_NAMES
152
+ };
153
+ const PROBES = new Set([
154
+ "then", "toJSON", "constructor", "asymmetricMatch", "$$typeof", "nodeType", "inspect", "toString", "valueOf", "__esModule", "prototype", "length", "name", "tagName"
155
+ ]);
156
+ /**
157
+ * The `tsl` namespace. Reading a name that is not part of the supported subset
158
+ * (for example `triplanarTexture`, `viewportUV`, `storage`) throws
159
+ * `tsl-unsupported-node` so a ported graph fails loudly at authoring time.
160
+ */
161
+ export const tsl = new Proxy(tslCore, {
162
+ get(target, property, receiver) {
163
+ if (typeof property === "symbol" || property in target || PROBES.has(property))
164
+ return Reflect.get(target, property, receiver);
165
+ return tslError("tsl-unsupported-node", `tsl.${property} is not part of the supported TSL subset (supported: ${TSL_SUPPORTED_NAMES.join(", ")})`);
166
+ }
167
+ });
168
+ /** `material.node({ colorNode, emissiveNode, opacityNode, positionNode, ... })` → a `material.custom` spec. */
169
+ export function materialNode(options) {
170
+ const { spec } = compileTslMaterial(options);
171
+ assertAuraCustomMaterialSpec(spec, "material.node");
172
+ return { kind: "custom", custom: spec };
173
+ }
174
+ export { swizzle };
175
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/engine/src/agent-api/nodes/tsl/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EACL,EAAE,EACF,EAAE,EACF,IAAI,EACJ,iBAAiB,EACjB,OAAO,EACP,eAAe,EACf,SAAS,EACT,SAAS,EACT,EAAE,EACF,aAAa,EACb,OAAO,EACP,QAAQ,EACR,MAAM,EAIP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAsD,MAAM,WAAW,CAAC;AAEnG,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,CAAC;AAGvB,MAAM,OAAO,GAAG,CAAC,IAAoB,EAAW,EAAE,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAKhH,MAAM,KAAK,GAAG,gBAAgB,CAAC;AAC/B,MAAM,IAAI,GAAwF;IAChG,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;IACrC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;IACjC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IACpC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IACpC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IACpC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IACpC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;CACxC,CAAC;AAEF,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAK,KAA2B,CAAC,MAAM,IAAI,CAAC,IAAK,KAA2B,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAChJ,OAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAW,CAAE,KAA2B,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IACvF,CAAC;IACD,OAAO,QAAQ,CAAC,mBAAmB,EAAE,oCAAoC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;AACtH,CAAC;AAED,6GAA6G;AAC7G,SAAS,OAAO,CAAC,KAAc,EAAE,UAA6B,EAAE;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,QAAQ,CAAC,mBAAmB,EAAE,iBAAiB,OAAO,CAAC,IAAI,6BAA6B,CAAC,CAAC;IACvJ,IAAI,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACxE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACjJ,CAAC;AAED,sHAAsH;AACtH,SAAS,YAAY,CAAC,MAA0B,EAAE,OAAuB,OAAO,EAAE,UAAsC,EAAE;IACxH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;QAAE,QAAQ,CAAC,mBAAmB,EAAE,mCAAmC,CAAC,CAAC;IAChH,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,QAAQ,CAAC,mBAAmB,EAAE,sBAAsB,OAAO,CAAC,IAAI,6BAA6B,CAAC,CAAC;IAC5J,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvI,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC9E,CAAC;AAED,4HAA4H;AAC5H,SAAS,OAAO,CAAC,MAAe,EAAE,MAAiB,EAAE,UAAsC,EAAE;IAC3F,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,QAAQ,CAAC,mBAAmB,EAAE,iBAAiB,OAAO,CAAC,IAAI,6BAA6B,CAAC,CAAC;IACvJ,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IAChK,MAAM,EAAE,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjE,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM;QAAE,QAAQ,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC;IACtG,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,MAAM,CAAC,KAAK,GAAG,CAAC;IACvB,IAAI,KAAK,KAAK,CAAC;QAAE,QAAQ,CAAC,sBAAsB,EAAE,UAAU,KAAK,uCAAuC,CAAC,CAAC;IAC1G,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,KAAK,CAAC,KAAe;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,mBAAmB,EAAE,0BAA0B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,GAAG,CAAC,KAAe;IAC1B,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/F,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,mBAAmB,EAAE,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,IAAI,CAAC,KAAwB;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,QAAQ,CAAC,mBAAmB,EAAE,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6GAA6G;AAC7G,SAAS,KAAK,CAAC,GAAG,IAAoD;IACpE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,IAA8B,EAAE,EAAE,CAAC,CAAC,CAAW,EAAW,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACxF,MAAM,MAAM,GAAG,CAAC,IAA8B,EAAE,EAAE,CAAC,CAAC,CAAW,EAAE,CAAW,EAAW,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzG,yFAAyF;AACzF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB;IAC9F,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC7F,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;IAC3G,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAC9G,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ;IAC3D,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACvG,IAAI,EAAE,IAAI,EAAE,MAAM;CACV,CAAC;AAEX,MAAM,OAAO,GAAG;IACd,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC;IACvC,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC;IACvC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC;IACnC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC,gBAAgB,CAAC;IACzC,EAAE,EAAE,MAAM;IACV,OAAO;IACP,YAAY;IACZ,OAAO;IACP,KAAK;IACL,KAAK;IACL,GAAG;IACH,IAAI;IACJ,IAAI,EAAE,CAAC,GAAG,IAAgB,EAAW,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;IAC/D,IAAI,EAAE,CAAC,GAAG,IAAgB,EAAW,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;IAC/D,IAAI,EAAE,CAAC,GAAG,IAAgB,EAAW,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;IAC/D,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;IAClG,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtG,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;IAC1E,GAAG,EAAE,CAAC,CAAW,EAAE,CAAW,EAAE,CAAW,EAAW,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3E,UAAU,EAAE,CAAC,KAAe,EAAE,KAAe,EAAE,CAAW,EAAW,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACzG,KAAK,EAAE,CAAC,CAAW,EAAE,KAAe,CAAC,EAAE,KAAe,CAAC,EAAW,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IAC3F,MAAM,EAAE,CAAC,SAAmB,EAAE,QAAkB,EAAE,SAAmB,EAAW,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;IAC/H,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC;IAC/G,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;IACzG,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC;IACnH,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC;IACxG,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;IAClG,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;IACpC,EAAE;IACF,EAAE;IACF,IAAI;IACJ,+GAA+G;IAC/G,OAAO,EAAE,kBAAkB;IAC3B,kHAAkH;IAClH,QAAQ,EAAE,WAAW;IACrB,cAAc,EAAE,mBAAmB;CACpC,CAAC;AAEF,MAAM,MAAM,GAAwB,IAAI,GAAG,CAAC;IAC1C,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS;CACrK,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,GAAG,GAAmB,IAAI,KAAK,CAAC,OAAO,EAAE;IACpD,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;QAC5B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/H,OAAO,QAAQ,CAAC,sBAAsB,EAAE,OAAO,QAAQ,wDAAwD,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpJ,CAAC;CACF,CAAC,CAAC;AAEH,+GAA+G;AAC/G,MAAM,UAAU,YAAY,CAAC,OAA+B;IAC1D,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC7C,4BAA4B,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACpD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * SH-01 — reference interpreter for the TSL subset. It evaluates a graph on the
3
+ * CPU with the same op semantics as constant folding (`evalOp`), so tests can
4
+ * check numeric results of the exact graph the GLSL emitter lowers.
5
+ */
6
+ import { TslNode, type TslValue } from "./ir.js";
7
+ export interface TslEvalContext {
8
+ readonly positionLocal?: readonly number[];
9
+ readonly positionWorld?: readonly number[];
10
+ readonly normalLocal?: readonly number[];
11
+ readonly normalWorld?: readonly number[];
12
+ readonly uv?: readonly number[];
13
+ readonly time?: number;
14
+ readonly cameraPosition?: readonly number[];
15
+ /** Per-uniform-node overrides (mirrors `handle.setUniform`). */
16
+ readonly uniforms?: ReadonlyMap<TslNode, number | boolean | readonly number[]>;
17
+ /** Texture sampler for `texture(handle, uv)` nodes (default: opaque white). */
18
+ readonly textures?: (handle: unknown, uv: readonly number[]) => readonly number[];
19
+ }
20
+ export declare function evaluateTsl(node: TslNode, context?: TslEvalContext): TslValue;
21
+ //# sourceMappingURL=interpret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpret.d.ts","sourceRoot":"","sources":["../../../../../../../packages/engine/src/agent-api/nodes/tsl/interpret.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAuB,OAAO,EAA4F,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEhK,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC;IAC/E,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,EAAE,CAAC;CACnF;AAaD,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,QAAQ,CAwFjF"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * SH-01 — reference interpreter for the TSL subset. It evaluates a graph on the
3
+ * CPU with the same op semantics as constant folding (`evalOp`), so tests can
4
+ * check numeric results of the exact graph the GLSL emitter lowers.
5
+ */
6
+ import { TSL_MAX_STATIC_LOOP, TslNode, dimOf, evalOp, parseHexColor, tslError } from "./ir.js";
7
+ const MAX_STEPS = 200_000;
8
+ function uniformValue(node, override) {
9
+ const raw = override ?? (node.data.k === "uniform" ? node.data.value : undefined);
10
+ if (typeof raw === "number")
11
+ return [raw];
12
+ if (typeof raw === "boolean")
13
+ return [raw ? 1 : 0];
14
+ if (typeof raw === "string")
15
+ return [...parseHexColor(raw)];
16
+ if (Array.isArray(raw) || ArrayBuffer.isView(raw))
17
+ return Array.from(raw);
18
+ return tslError("invalid-tsl-graph", `uniform node has no numeric value to evaluate`);
19
+ }
20
+ export function evaluateTsl(node, context = {}) {
21
+ const env = new Map();
22
+ let steps = 0;
23
+ const builtin = (name) => {
24
+ const value = context[name];
25
+ if (value === undefined)
26
+ return tslError("invalid-tsl-graph", `evaluateTsl context is missing "${name}"`);
27
+ return typeof value === "number" ? [value] : value;
28
+ };
29
+ const run = (block) => {
30
+ for (const statement of block) {
31
+ if (++steps > MAX_STEPS)
32
+ tslError("invalid-tsl-graph", "interpreter step limit exceeded");
33
+ switch (statement.s) {
34
+ case "decl":
35
+ env.set(statement.node, [...value(statement.node.data.init).value]);
36
+ break;
37
+ case "assign": {
38
+ const target = statement.target;
39
+ const rhs = value(statement.value);
40
+ if (statement.op === undefined)
41
+ env.set(target, [...rhs.value]);
42
+ else {
43
+ const name = statement.op === "+" ? "add" : statement.op === "-" ? "sub" : statement.op === "*" ? "mul" : "div";
44
+ env.set(target, evalOp(name, [{ type: target.type, value: env.get(target) }, rhs], target.type));
45
+ }
46
+ break;
47
+ }
48
+ case "if": {
49
+ const taken = statement.branches.find((branch) => value(branch.cond).value[0] === 1);
50
+ if (taken)
51
+ run(taken.block);
52
+ else if (statement.otherwise)
53
+ run(statement.otherwise);
54
+ break;
55
+ }
56
+ case "loop": {
57
+ const start = value(statement.start).value[0];
58
+ const end = value(statement.end).value[0];
59
+ if (end - start > TSL_MAX_STATIC_LOOP)
60
+ tslError("invalid-tsl-graph", "loop exceeds the iteration limit");
61
+ for (let i = start; i < end; i++) {
62
+ env.set(statement.index, [i]);
63
+ run(statement.block);
64
+ }
65
+ break;
66
+ }
67
+ }
68
+ }
69
+ };
70
+ const value = (n) => {
71
+ const d = n.data;
72
+ switch (d.k) {
73
+ case "const": return { type: n.type, value: d.value };
74
+ case "builtin": return { type: n.type, value: builtin(d.name) };
75
+ case "uniform": return { type: n.type, value: uniformValue(n, context.uniforms?.get(n)) };
76
+ case "op": return { type: n.type, value: evalOp(d.op, d.args.map(value), n.type) };
77
+ case "swizzle": {
78
+ const src = value(d.src).value;
79
+ return { type: n.type, value: [...d.comps].map((c) => src[("xyzw").indexOf(c)]) };
80
+ }
81
+ case "construct": {
82
+ const flat = d.args.flatMap((arg) => [...value(arg).value]);
83
+ const need = dimOf(n.type);
84
+ return { type: n.type, value: flat.length === 1 && need > 1 ? Array.from({ length: need }, () => flat[0]) : flat };
85
+ }
86
+ case "texture": {
87
+ const handle = d.sampler.data.k === "uniform" ? d.sampler.data.value : undefined;
88
+ const sample = context.textures?.(handle, value(d.uv).value) ?? [1, 1, 1, 1];
89
+ return { type: "vec4", value: sample };
90
+ }
91
+ case "element": {
92
+ const index = value(d.index).value[0];
93
+ const element = d.array.elements[index];
94
+ if (!element)
95
+ return tslError("invalid-tsl-graph", `uniformArray index ${index} is out of range`);
96
+ return value(element);
97
+ }
98
+ case "var":
99
+ case "loopIndex": {
100
+ const stored = env.get(n);
101
+ if (!stored)
102
+ return tslError("invalid-tsl-graph", "variable read before its declaration executed");
103
+ return { type: n.type, value: stored };
104
+ }
105
+ case "call": {
106
+ run(d.block);
107
+ return value(d.result);
108
+ }
109
+ }
110
+ };
111
+ return value(node);
112
+ }
113
+ //# sourceMappingURL=interpret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpret.js","sourceRoot":"","sources":["../../../../../../../packages/engine/src/agent-api/nodes/tsl/interpret.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * SH-01 / L1-11 — TSL-style node graph subset: IR, type inference, constant
3
+ * folding and the imperative statement recorder (`Fn`, `If`, `Loop`).
4
+ *
5
+ * This is a deliberately small subset of three.js TSL that lowers to GLSL 300 es
6
+ * and feeds `material.custom` (see `emit.ts`). Anything outside the subset fails
7
+ * with a named `AuraRuntimeError`, never silently.
8
+ */
9
+ export type TslType = "float" | "int" | "bool" | "vec2" | "vec3" | "vec4" | "sampler2D";
10
+ export type TslBuiltinName = "positionLocal" | "positionWorld" | "normalLocal" | "normalWorld" | "uv" | "time" | "cameraPosition";
11
+ export declare const TSL_BUILTIN_TYPES: Readonly<Record<TslBuiltinName, TslType>>;
12
+ export type TslUnaryOp = "sin" | "cos" | "tan" | "abs" | "sign" | "sqrt" | "exp" | "log" | "fract" | "floor" | "ceil" | "normalize" | "saturate" | "oneMinus" | "negate" | "length" | "not" | "toFloat" | "toInt";
13
+ export type TslBinaryOp = "add" | "sub" | "mul" | "div" | "mod" | "pow" | "min" | "max" | "step" | "dot" | "cross" | "distance" | "atan2" | "lessThan" | "greaterThan" | "lessThanEqual" | "greaterThanEqual" | "equal" | "notEqual" | "and" | "or";
14
+ export type TslTernaryOp = "mix" | "smoothstep" | "clamp" | "select";
15
+ export type TslOpName = TslUnaryOp | TslBinaryOp | TslTernaryOp;
16
+ export type TslBlock = TslStatement[];
17
+ export type TslStatement = {
18
+ readonly s: "decl";
19
+ readonly node: TslNode;
20
+ } | {
21
+ readonly s: "assign";
22
+ readonly target: TslNode;
23
+ readonly value: TslNode;
24
+ readonly op?: "+" | "-" | "*" | "/";
25
+ } | {
26
+ readonly s: "if";
27
+ readonly branches: readonly {
28
+ readonly cond: TslNode;
29
+ readonly block: TslBlock;
30
+ }[];
31
+ readonly otherwise?: TslBlock;
32
+ } | {
33
+ readonly s: "loop";
34
+ readonly index: TslNode;
35
+ readonly start: TslNode;
36
+ readonly end: TslNode;
37
+ readonly block: TslBlock;
38
+ };
39
+ export type TslNodeData = {
40
+ readonly k: "const";
41
+ readonly value: readonly number[];
42
+ } | {
43
+ readonly k: "builtin";
44
+ readonly name: TslBuiltinName;
45
+ } | {
46
+ readonly k: "uniform";
47
+ readonly name?: string;
48
+ readonly value: unknown;
49
+ readonly specType: string;
50
+ } | {
51
+ readonly k: "op";
52
+ readonly op: TslOpName;
53
+ readonly args: readonly TslNode[];
54
+ } | {
55
+ readonly k: "swizzle";
56
+ readonly src: TslNode;
57
+ readonly comps: string;
58
+ } | {
59
+ readonly k: "construct";
60
+ readonly args: readonly TslNode[];
61
+ } | {
62
+ readonly k: "texture";
63
+ readonly sampler: TslNode;
64
+ readonly uv: TslNode;
65
+ } | {
66
+ readonly k: "element";
67
+ readonly array: TslUniformArray;
68
+ readonly index: TslNode;
69
+ } | {
70
+ readonly k: "var";
71
+ readonly init: TslNode;
72
+ } | {
73
+ readonly k: "loopIndex";
74
+ } | {
75
+ readonly k: "call";
76
+ readonly block: TslBlock;
77
+ readonly result: TslNode;
78
+ readonly args: readonly TslNode[];
79
+ };
80
+ export type TslInput = TslNode | number | boolean | readonly number[] | string;
81
+ export declare function tslError(code: "invalid-tsl-graph" | "tsl-type-mismatch" | "tsl-unsupported-node" | "tsl-unsupported-output" | "tsl-statement-outside-fn" | "tsl-requires-glsl-backend", message: string): never;
82
+ export declare const dimOf: (type: TslType) => number;
83
+ export declare const isVec: (type: TslType) => boolean;
84
+ export declare const isNumericScalar: (type: TslType) => boolean;
85
+ /** A node in the graph. Chainable methods mirror three's TSL (`a.mul(b).add(c)`). */
86
+ export declare class TslNode {
87
+ readonly type: TslType;
88
+ readonly data: TslNodeData;
89
+ readonly id: number;
90
+ constructor(type: TslType, data: TslNodeData);
91
+ add(other: TslInput): TslNode;
92
+ sub(other: TslInput): TslNode;
93
+ mul(other: TslInput): TslNode;
94
+ div(other: TslInput): TslNode;
95
+ mod(other: TslInput): TslNode;
96
+ pow(other: TslInput): TslNode;
97
+ min(other: TslInput): TslNode;
98
+ max(other: TslInput): TslNode;
99
+ dot(other: TslInput): TslNode;
100
+ cross(other: TslInput): TslNode;
101
+ distance(other: TslInput): TslNode;
102
+ atan2(other: TslInput): TslNode;
103
+ /** `edge.step(x)` is GLSL `step(edge, x)`: 0 where `x < edge`, else 1. */
104
+ step(x: TslInput): TslNode;
105
+ lessThan(other: TslInput): TslNode;
106
+ greaterThan(other: TslInput): TslNode;
107
+ lessThanEqual(other: TslInput): TslNode;
108
+ greaterThanEqual(other: TslInput): TslNode;
109
+ equal(other: TslInput): TslNode;
110
+ notEqual(other: TslInput): TslNode;
111
+ and(other: TslInput): TslNode;
112
+ or(other: TslInput): TslNode;
113
+ not(): TslNode;
114
+ sin(): TslNode;
115
+ cos(): TslNode;
116
+ tan(): TslNode;
117
+ abs(): TslNode;
118
+ sign(): TslNode;
119
+ sqrt(): TslNode;
120
+ exp(): TslNode;
121
+ log(): TslNode;
122
+ fract(): TslNode;
123
+ floor(): TslNode;
124
+ ceil(): TslNode;
125
+ normalize(): TslNode;
126
+ saturate(): TslNode;
127
+ oneMinus(): TslNode;
128
+ negate(): TslNode;
129
+ length(): TslNode;
130
+ mix(other: TslInput, t: TslInput): TslNode;
131
+ clamp(lo?: TslInput, hi?: TslInput): TslNode;
132
+ smoothstep(edge0: TslInput, edge1: TslInput): TslNode;
133
+ /** Local variable declaration (valid only inside `Fn`). */
134
+ toVar(): TslNode;
135
+ assign(value: TslInput): TslNode;
136
+ addAssign(value: TslInput): TslNode;
137
+ subAssign(value: TslInput): TslNode;
138
+ mulAssign(value: TslInput): TslNode;
139
+ divAssign(value: TslInput): TslNode;
140
+ /** Static-index convenience for `uniformArray(...).element(i)` results. */
141
+ get isConstant(): boolean;
142
+ }
143
+ /** `uniformArray` handle: lowered to N scalar/vector uniforms named `<name>_0 ... <name>_{N-1}`. */
144
+ export declare class TslUniformArray {
145
+ readonly name: string | undefined;
146
+ readonly elementType: TslType;
147
+ readonly values: readonly unknown[];
148
+ readonly elements: readonly TslNode[];
149
+ constructor(name: string | undefined, elementType: TslType, values: readonly unknown[], elements: readonly TslNode[]);
150
+ get length(): number;
151
+ /** Static index returns the element's uniform node; a node index lowers to a select ladder. */
152
+ element(index: TslInput): TslNode;
153
+ }
154
+ /** `Fn(callback)`: callback runs once per call site; its statements and return node become an inline block. */
155
+ export declare function Fn(callback: (...args: TslNode[]) => TslInput | void): (...args: TslInput[]) => TslNode;
156
+ export interface TslIfChain {
157
+ ElseIf(condition: TslInput, body: () => void): TslIfChain;
158
+ Else(body: () => void): void;
159
+ }
160
+ /** `If(cond, () => { ... }).ElseIf(...).Else(...)` — statement form, valid only inside `Fn`. */
161
+ export declare function If(condition: TslInput, body: () => void): TslIfChain;
162
+ export declare const TSL_MAX_STATIC_LOOP = 1024;
163
+ /** `Loop(count | { start, end }, ({ i }) => { ... })` — statement form, valid only inside `Fn`. */
164
+ export declare function Loop(range: number | TslNode | {
165
+ readonly start?: TslInput;
166
+ readonly end: TslInput;
167
+ }, body: (scope: {
168
+ i: TslNode;
169
+ }) => void): void;
170
+ export declare function constNode(type: TslType, value: readonly number[]): TslNode;
171
+ export declare function parseHexColor(value: string): readonly [number, number, number];
172
+ export declare function toNode(value: TslInput): TslNode;
173
+ /** Result type (and validation) for an op over already-converted argument nodes. */
174
+ export declare function opResultType(name: TslOpName, args: readonly TslNode[]): TslType;
175
+ /** Build an op node, folding it to a constant when every argument is a constant. */
176
+ export declare function op(name: TslOpName, ...inputs: TslInput[]): TslNode;
177
+ export interface TslValue {
178
+ readonly type: TslType;
179
+ readonly value: readonly number[];
180
+ }
181
+ export declare function evalOp(name: TslOpName, args: readonly TslValue[], resultType: TslType): number[];
182
+ export declare function swizzle(src: TslNode, comps: string): TslNode;
183
+ export declare function construct(type: "vec2" | "vec3" | "vec4", inputs: readonly TslInput[]): TslNode;
184
+ /** Swizzle accessors are defined dynamically; this declaration surfaces the common ones to TypeScript. */
185
+ export interface TslNode {
186
+ readonly x: TslNode;
187
+ readonly y: TslNode;
188
+ readonly z: TslNode;
189
+ readonly w: TslNode;
190
+ readonly r: TslNode;
191
+ readonly g: TslNode;
192
+ readonly b: TslNode;
193
+ readonly a: TslNode;
194
+ readonly xy: TslNode;
195
+ readonly xz: TslNode;
196
+ readonly yz: TslNode;
197
+ readonly zw: TslNode;
198
+ readonly xyz: TslNode;
199
+ readonly xyzw: TslNode;
200
+ readonly rg: TslNode;
201
+ readonly rgb: TslNode;
202
+ readonly rgba: TslNode;
203
+ }
204
+ //# sourceMappingURL=ir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../../../../../../packages/engine/src/agent-api/nodes/tsl/ir.ts"],"names":[],"mappings":"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"}