@react-three/tsl 10.0.0-canary.d5cebb9 → 10.0.0-canary.dd5379c
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/dist/index.cjs +13 -4
- package/dist/index.d.cts +46 -32
- package/dist/index.d.mts +46 -32
- package/dist/index.d.ts +46 -32
- package/dist/index.mjs +13 -4
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -177,6 +177,10 @@ function extractTSLValue(value) {
|
|
|
177
177
|
if (node.isConstNode) {
|
|
178
178
|
return node.value;
|
|
179
179
|
}
|
|
180
|
+
if (node.isVarNode && node.node) {
|
|
181
|
+
const inner = extractTSLValue(node.node);
|
|
182
|
+
return inner === node.node ? value : inner;
|
|
183
|
+
}
|
|
180
184
|
if ("value" in node) {
|
|
181
185
|
let extractedValue = node.value;
|
|
182
186
|
if (typeof node.traverse === "function") {
|
|
@@ -759,18 +763,20 @@ function isSameThreeType(a, b) {
|
|
|
759
763
|
const uniformOf = tsl.uniform;
|
|
760
764
|
function useUniform(name, value) {
|
|
761
765
|
const store = usePrimaryStore();
|
|
766
|
+
const memoizedInput = useCompareMemoize(value === void 0 ? name : { [name]: normalizeValue(value) });
|
|
762
767
|
const registered = useScopedResource({
|
|
763
768
|
store,
|
|
764
769
|
kind: "uniforms",
|
|
765
770
|
scope: void 0,
|
|
766
771
|
isLeaf: isUniformNode,
|
|
767
|
-
input:
|
|
772
|
+
input: memoizedInput,
|
|
768
773
|
create: () => value === void 0 ? {} : { [name]: value },
|
|
769
774
|
prepare: createNamedUniform,
|
|
770
775
|
reconcile: (existing2) => {
|
|
771
|
-
if (value
|
|
772
|
-
|
|
773
|
-
|
|
776
|
+
if (value === void 0 || isUniformNode(value)) return;
|
|
777
|
+
const next = normalizeValue(value);
|
|
778
|
+
if (isTSLNode(next)) return;
|
|
779
|
+
existing2.value = next;
|
|
774
780
|
}
|
|
775
781
|
});
|
|
776
782
|
if (registered[name]) return registered[name];
|
|
@@ -780,6 +786,9 @@ function useUniform(name, value) {
|
|
|
780
786
|
`[useUniform] Uniform "${name}" not found. Create it first with: useUniform('${name}', initialValue)`
|
|
781
787
|
);
|
|
782
788
|
}
|
|
789
|
+
function normalizeValue(value) {
|
|
790
|
+
return typeof value === "string" ? new THREE.Color(value) : vectorize(value);
|
|
791
|
+
}
|
|
783
792
|
function createNamedUniform(name, value) {
|
|
784
793
|
let node;
|
|
785
794
|
if (isUniformNode(value)) {
|
package/dist/index.d.cts
CHANGED
|
@@ -149,6 +149,16 @@ declare global {
|
|
|
149
149
|
/** Node type accepted by broad dynamic node-store readers. */
|
|
150
150
|
type TSLNodeType = three_webgpu.Node | CallableTSLNode
|
|
151
151
|
|
|
152
|
+
/**
|
|
153
|
+
* What TSL's constant constructors return: `int(1)`, `vec2(0, 1)`, `color('red')` and friends
|
|
154
|
+
* wrap a ConstNode in a VarNode. three's `uniform()` unwraps exactly this shape to
|
|
155
|
+
* `UniformNode<TNodeType, TValue>`, and so do the mappings below.
|
|
156
|
+
*/
|
|
157
|
+
type TSLConstNode<TNodeType, TValue> = three_webgpu.VarNode<
|
|
158
|
+
TNodeType,
|
|
159
|
+
three_webgpu.ConstNode<TNodeType, TValue>
|
|
160
|
+
>
|
|
161
|
+
|
|
152
162
|
/**
|
|
153
163
|
* Derive Three's shader node type from an existing node or a supported raw input.
|
|
154
164
|
* Existing InputNode generics take precedence over structural value normalization.
|
|
@@ -159,44 +169,48 @@ declare global {
|
|
|
159
169
|
? TNodeType
|
|
160
170
|
: T extends three_webgpu.InputNode<infer TNodeType, infer _TValue>
|
|
161
171
|
? TNodeType
|
|
162
|
-
: T extends
|
|
163
|
-
?
|
|
164
|
-
: T extends
|
|
165
|
-
? '
|
|
166
|
-
: T extends
|
|
167
|
-
? '
|
|
168
|
-
: T extends three_webgpu.
|
|
169
|
-
? '
|
|
170
|
-
: T extends three_webgpu.
|
|
171
|
-
? '
|
|
172
|
-
: T extends three_webgpu.
|
|
173
|
-
? '
|
|
174
|
-
: T extends three_webgpu.
|
|
175
|
-
? '
|
|
176
|
-
: T extends three_webgpu.
|
|
177
|
-
? '
|
|
178
|
-
: T extends three_webgpu.
|
|
179
|
-
? '
|
|
180
|
-
:
|
|
172
|
+
: T extends TSLConstNode<infer TNodeType, infer _TValue>
|
|
173
|
+
? TNodeType
|
|
174
|
+
: T extends number
|
|
175
|
+
? 'float'
|
|
176
|
+
: T extends boolean
|
|
177
|
+
? 'bool'
|
|
178
|
+
: T extends string | three_webgpu.Color | { r: number; g: number; b: number }
|
|
179
|
+
? 'color'
|
|
180
|
+
: T extends three_webgpu.Vector4 | { x: number; y: number; z: number; w: number }
|
|
181
|
+
? 'vec4'
|
|
182
|
+
: T extends three_webgpu.Vector3 | { x: number; y: number; z: number }
|
|
183
|
+
? 'vec3'
|
|
184
|
+
: T extends three_webgpu.Vector2 | { x: number; y: number }
|
|
185
|
+
? 'vec2'
|
|
186
|
+
: T extends three_webgpu.Matrix4
|
|
187
|
+
? 'mat4'
|
|
188
|
+
: T extends three_webgpu.Matrix3
|
|
189
|
+
? 'mat3'
|
|
190
|
+
: T extends three_webgpu.Matrix2
|
|
191
|
+
? 'mat2'
|
|
192
|
+
: unknown
|
|
181
193
|
|
|
182
194
|
/** Derive the normalized JavaScript value stored by a uniform node. */
|
|
183
195
|
type UniformNodeValue<T> = T extends three_webgpu.UniformNode<infer _TNodeType, infer TValue>
|
|
184
196
|
? TValue
|
|
185
197
|
: T extends three_webgpu.InputNode<infer _TNodeType, infer TValue>
|
|
186
198
|
? TValue
|
|
187
|
-
: T extends
|
|
188
|
-
?
|
|
189
|
-
: T extends
|
|
190
|
-
? three_webgpu.
|
|
191
|
-
: T extends { x: number; y: number; z: number }
|
|
192
|
-
? three_webgpu.
|
|
193
|
-
: T extends { x: number; y: number }
|
|
194
|
-
? three_webgpu.
|
|
195
|
-
: T extends number
|
|
196
|
-
?
|
|
197
|
-
: T extends
|
|
198
|
-
?
|
|
199
|
-
: T
|
|
199
|
+
: T extends TSLConstNode<infer _TNodeType, infer TValue>
|
|
200
|
+
? TValue
|
|
201
|
+
: T extends string | { r: number; g: number; b: number }
|
|
202
|
+
? three_webgpu.Color
|
|
203
|
+
: T extends { x: number; y: number; z: number; w: number }
|
|
204
|
+
? three_webgpu.Vector4
|
|
205
|
+
: T extends { x: number; y: number; z: number }
|
|
206
|
+
? three_webgpu.Vector3
|
|
207
|
+
: T extends { x: number; y: number }
|
|
208
|
+
? three_webgpu.Vector2
|
|
209
|
+
: T extends number
|
|
210
|
+
? number
|
|
211
|
+
: T extends boolean
|
|
212
|
+
? boolean
|
|
213
|
+
: T
|
|
200
214
|
|
|
201
215
|
/** Three's exact UniformNode with shader and value generics derived from an input. */
|
|
202
216
|
type UniformNodeFor<T> = three_webgpu.UniformNode<UniformNodeType<T>, UniformNodeValue<T>>
|
package/dist/index.d.mts
CHANGED
|
@@ -149,6 +149,16 @@ declare global {
|
|
|
149
149
|
/** Node type accepted by broad dynamic node-store readers. */
|
|
150
150
|
type TSLNodeType = three_webgpu.Node | CallableTSLNode
|
|
151
151
|
|
|
152
|
+
/**
|
|
153
|
+
* What TSL's constant constructors return: `int(1)`, `vec2(0, 1)`, `color('red')` and friends
|
|
154
|
+
* wrap a ConstNode in a VarNode. three's `uniform()` unwraps exactly this shape to
|
|
155
|
+
* `UniformNode<TNodeType, TValue>`, and so do the mappings below.
|
|
156
|
+
*/
|
|
157
|
+
type TSLConstNode<TNodeType, TValue> = three_webgpu.VarNode<
|
|
158
|
+
TNodeType,
|
|
159
|
+
three_webgpu.ConstNode<TNodeType, TValue>
|
|
160
|
+
>
|
|
161
|
+
|
|
152
162
|
/**
|
|
153
163
|
* Derive Three's shader node type from an existing node or a supported raw input.
|
|
154
164
|
* Existing InputNode generics take precedence over structural value normalization.
|
|
@@ -159,44 +169,48 @@ declare global {
|
|
|
159
169
|
? TNodeType
|
|
160
170
|
: T extends three_webgpu.InputNode<infer TNodeType, infer _TValue>
|
|
161
171
|
? TNodeType
|
|
162
|
-
: T extends
|
|
163
|
-
?
|
|
164
|
-
: T extends
|
|
165
|
-
? '
|
|
166
|
-
: T extends
|
|
167
|
-
? '
|
|
168
|
-
: T extends three_webgpu.
|
|
169
|
-
? '
|
|
170
|
-
: T extends three_webgpu.
|
|
171
|
-
? '
|
|
172
|
-
: T extends three_webgpu.
|
|
173
|
-
? '
|
|
174
|
-
: T extends three_webgpu.
|
|
175
|
-
? '
|
|
176
|
-
: T extends three_webgpu.
|
|
177
|
-
? '
|
|
178
|
-
: T extends three_webgpu.
|
|
179
|
-
? '
|
|
180
|
-
:
|
|
172
|
+
: T extends TSLConstNode<infer TNodeType, infer _TValue>
|
|
173
|
+
? TNodeType
|
|
174
|
+
: T extends number
|
|
175
|
+
? 'float'
|
|
176
|
+
: T extends boolean
|
|
177
|
+
? 'bool'
|
|
178
|
+
: T extends string | three_webgpu.Color | { r: number; g: number; b: number }
|
|
179
|
+
? 'color'
|
|
180
|
+
: T extends three_webgpu.Vector4 | { x: number; y: number; z: number; w: number }
|
|
181
|
+
? 'vec4'
|
|
182
|
+
: T extends three_webgpu.Vector3 | { x: number; y: number; z: number }
|
|
183
|
+
? 'vec3'
|
|
184
|
+
: T extends three_webgpu.Vector2 | { x: number; y: number }
|
|
185
|
+
? 'vec2'
|
|
186
|
+
: T extends three_webgpu.Matrix4
|
|
187
|
+
? 'mat4'
|
|
188
|
+
: T extends three_webgpu.Matrix3
|
|
189
|
+
? 'mat3'
|
|
190
|
+
: T extends three_webgpu.Matrix2
|
|
191
|
+
? 'mat2'
|
|
192
|
+
: unknown
|
|
181
193
|
|
|
182
194
|
/** Derive the normalized JavaScript value stored by a uniform node. */
|
|
183
195
|
type UniformNodeValue<T> = T extends three_webgpu.UniformNode<infer _TNodeType, infer TValue>
|
|
184
196
|
? TValue
|
|
185
197
|
: T extends three_webgpu.InputNode<infer _TNodeType, infer TValue>
|
|
186
198
|
? TValue
|
|
187
|
-
: T extends
|
|
188
|
-
?
|
|
189
|
-
: T extends
|
|
190
|
-
? three_webgpu.
|
|
191
|
-
: T extends { x: number; y: number; z: number }
|
|
192
|
-
? three_webgpu.
|
|
193
|
-
: T extends { x: number; y: number }
|
|
194
|
-
? three_webgpu.
|
|
195
|
-
: T extends number
|
|
196
|
-
?
|
|
197
|
-
: T extends
|
|
198
|
-
?
|
|
199
|
-
: T
|
|
199
|
+
: T extends TSLConstNode<infer _TNodeType, infer TValue>
|
|
200
|
+
? TValue
|
|
201
|
+
: T extends string | { r: number; g: number; b: number }
|
|
202
|
+
? three_webgpu.Color
|
|
203
|
+
: T extends { x: number; y: number; z: number; w: number }
|
|
204
|
+
? three_webgpu.Vector4
|
|
205
|
+
: T extends { x: number; y: number; z: number }
|
|
206
|
+
? three_webgpu.Vector3
|
|
207
|
+
: T extends { x: number; y: number }
|
|
208
|
+
? three_webgpu.Vector2
|
|
209
|
+
: T extends number
|
|
210
|
+
? number
|
|
211
|
+
: T extends boolean
|
|
212
|
+
? boolean
|
|
213
|
+
: T
|
|
200
214
|
|
|
201
215
|
/** Three's exact UniformNode with shader and value generics derived from an input. */
|
|
202
216
|
type UniformNodeFor<T> = three_webgpu.UniformNode<UniformNodeType<T>, UniformNodeValue<T>>
|
package/dist/index.d.ts
CHANGED
|
@@ -149,6 +149,16 @@ declare global {
|
|
|
149
149
|
/** Node type accepted by broad dynamic node-store readers. */
|
|
150
150
|
type TSLNodeType = three_webgpu.Node | CallableTSLNode
|
|
151
151
|
|
|
152
|
+
/**
|
|
153
|
+
* What TSL's constant constructors return: `int(1)`, `vec2(0, 1)`, `color('red')` and friends
|
|
154
|
+
* wrap a ConstNode in a VarNode. three's `uniform()` unwraps exactly this shape to
|
|
155
|
+
* `UniformNode<TNodeType, TValue>`, and so do the mappings below.
|
|
156
|
+
*/
|
|
157
|
+
type TSLConstNode<TNodeType, TValue> = three_webgpu.VarNode<
|
|
158
|
+
TNodeType,
|
|
159
|
+
three_webgpu.ConstNode<TNodeType, TValue>
|
|
160
|
+
>
|
|
161
|
+
|
|
152
162
|
/**
|
|
153
163
|
* Derive Three's shader node type from an existing node or a supported raw input.
|
|
154
164
|
* Existing InputNode generics take precedence over structural value normalization.
|
|
@@ -159,44 +169,48 @@ declare global {
|
|
|
159
169
|
? TNodeType
|
|
160
170
|
: T extends three_webgpu.InputNode<infer TNodeType, infer _TValue>
|
|
161
171
|
? TNodeType
|
|
162
|
-
: T extends
|
|
163
|
-
?
|
|
164
|
-
: T extends
|
|
165
|
-
? '
|
|
166
|
-
: T extends
|
|
167
|
-
? '
|
|
168
|
-
: T extends three_webgpu.
|
|
169
|
-
? '
|
|
170
|
-
: T extends three_webgpu.
|
|
171
|
-
? '
|
|
172
|
-
: T extends three_webgpu.
|
|
173
|
-
? '
|
|
174
|
-
: T extends three_webgpu.
|
|
175
|
-
? '
|
|
176
|
-
: T extends three_webgpu.
|
|
177
|
-
? '
|
|
178
|
-
: T extends three_webgpu.
|
|
179
|
-
? '
|
|
180
|
-
:
|
|
172
|
+
: T extends TSLConstNode<infer TNodeType, infer _TValue>
|
|
173
|
+
? TNodeType
|
|
174
|
+
: T extends number
|
|
175
|
+
? 'float'
|
|
176
|
+
: T extends boolean
|
|
177
|
+
? 'bool'
|
|
178
|
+
: T extends string | three_webgpu.Color | { r: number; g: number; b: number }
|
|
179
|
+
? 'color'
|
|
180
|
+
: T extends three_webgpu.Vector4 | { x: number; y: number; z: number; w: number }
|
|
181
|
+
? 'vec4'
|
|
182
|
+
: T extends three_webgpu.Vector3 | { x: number; y: number; z: number }
|
|
183
|
+
? 'vec3'
|
|
184
|
+
: T extends three_webgpu.Vector2 | { x: number; y: number }
|
|
185
|
+
? 'vec2'
|
|
186
|
+
: T extends three_webgpu.Matrix4
|
|
187
|
+
? 'mat4'
|
|
188
|
+
: T extends three_webgpu.Matrix3
|
|
189
|
+
? 'mat3'
|
|
190
|
+
: T extends three_webgpu.Matrix2
|
|
191
|
+
? 'mat2'
|
|
192
|
+
: unknown
|
|
181
193
|
|
|
182
194
|
/** Derive the normalized JavaScript value stored by a uniform node. */
|
|
183
195
|
type UniformNodeValue<T> = T extends three_webgpu.UniformNode<infer _TNodeType, infer TValue>
|
|
184
196
|
? TValue
|
|
185
197
|
: T extends three_webgpu.InputNode<infer _TNodeType, infer TValue>
|
|
186
198
|
? TValue
|
|
187
|
-
: T extends
|
|
188
|
-
?
|
|
189
|
-
: T extends
|
|
190
|
-
? three_webgpu.
|
|
191
|
-
: T extends { x: number; y: number; z: number }
|
|
192
|
-
? three_webgpu.
|
|
193
|
-
: T extends { x: number; y: number }
|
|
194
|
-
? three_webgpu.
|
|
195
|
-
: T extends number
|
|
196
|
-
?
|
|
197
|
-
: T extends
|
|
198
|
-
?
|
|
199
|
-
: T
|
|
199
|
+
: T extends TSLConstNode<infer _TNodeType, infer TValue>
|
|
200
|
+
? TValue
|
|
201
|
+
: T extends string | { r: number; g: number; b: number }
|
|
202
|
+
? three_webgpu.Color
|
|
203
|
+
: T extends { x: number; y: number; z: number; w: number }
|
|
204
|
+
? three_webgpu.Vector4
|
|
205
|
+
: T extends { x: number; y: number; z: number }
|
|
206
|
+
? three_webgpu.Vector3
|
|
207
|
+
: T extends { x: number; y: number }
|
|
208
|
+
? three_webgpu.Vector2
|
|
209
|
+
: T extends number
|
|
210
|
+
? number
|
|
211
|
+
: T extends boolean
|
|
212
|
+
? boolean
|
|
213
|
+
: T
|
|
200
214
|
|
|
201
215
|
/** Three's exact UniformNode with shader and value generics derived from an input. */
|
|
202
216
|
type UniformNodeFor<T> = three_webgpu.UniformNode<UniformNodeType<T>, UniformNodeValue<T>>
|
package/dist/index.mjs
CHANGED
|
@@ -162,6 +162,10 @@ function extractTSLValue(value) {
|
|
|
162
162
|
if (node.isConstNode) {
|
|
163
163
|
return node.value;
|
|
164
164
|
}
|
|
165
|
+
if (node.isVarNode && node.node) {
|
|
166
|
+
const inner = extractTSLValue(node.node);
|
|
167
|
+
return inner === node.node ? value : inner;
|
|
168
|
+
}
|
|
165
169
|
if ("value" in node) {
|
|
166
170
|
let extractedValue = node.value;
|
|
167
171
|
if (typeof node.traverse === "function") {
|
|
@@ -744,18 +748,20 @@ function isSameThreeType(a, b) {
|
|
|
744
748
|
const uniformOf = uniform;
|
|
745
749
|
function useUniform(name, value) {
|
|
746
750
|
const store = usePrimaryStore();
|
|
751
|
+
const memoizedInput = useCompareMemoize(value === void 0 ? name : { [name]: normalizeValue(value) });
|
|
747
752
|
const registered = useScopedResource({
|
|
748
753
|
store,
|
|
749
754
|
kind: "uniforms",
|
|
750
755
|
scope: void 0,
|
|
751
756
|
isLeaf: isUniformNode,
|
|
752
|
-
input:
|
|
757
|
+
input: memoizedInput,
|
|
753
758
|
create: () => value === void 0 ? {} : { [name]: value },
|
|
754
759
|
prepare: createNamedUniform,
|
|
755
760
|
reconcile: (existing2) => {
|
|
756
|
-
if (value
|
|
757
|
-
|
|
758
|
-
|
|
761
|
+
if (value === void 0 || isUniformNode(value)) return;
|
|
762
|
+
const next = normalizeValue(value);
|
|
763
|
+
if (isTSLNode(next)) return;
|
|
764
|
+
existing2.value = next;
|
|
759
765
|
}
|
|
760
766
|
});
|
|
761
767
|
if (registered[name]) return registered[name];
|
|
@@ -765,6 +771,9 @@ function useUniform(name, value) {
|
|
|
765
771
|
`[useUniform] Uniform "${name}" not found. Create it first with: useUniform('${name}', initialValue)`
|
|
766
772
|
);
|
|
767
773
|
}
|
|
774
|
+
function normalizeValue(value) {
|
|
775
|
+
return typeof value === "string" ? new Color(value) : vectorize(value);
|
|
776
|
+
}
|
|
768
777
|
function createNamedUniform(name, value) {
|
|
769
778
|
let node;
|
|
770
779
|
if (isUniformNode(value)) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-three/tsl",
|
|
3
|
-
"version": "10.0.0-canary.
|
|
3
|
+
"version": "10.0.0-canary.dd5379c",
|
|
4
4
|
"description": "TSL resource hooks for react-three-fiber: uniforms, nodes, buffers, GPU storage and render pipelines on WebGPU",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@types/three": "^0.185.0",
|
|
57
57
|
"@webgpu/types": "^0.1.64",
|
|
58
58
|
"three": ">=0.185.0",
|
|
59
|
-
"@react-three/fiber": "10.0.0-canary.
|
|
59
|
+
"@react-three/fiber": "10.0.0-canary.dd5379c"
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"build": "unbuild",
|