Skip to content

Commit 046575b

Browse files
authored
RenderObject: Fix geometry key for morph targets. (#1504)
* Update three.js * Add src * Update patch and delete src * Update declarations * RenderObject: Fix geometry key for morph targets. * Update three.js * Add src * Update patch and delete src * Add examples * Update patch and delete examples
1 parent 400129b commit 046575b

File tree

5 files changed

+60
-32
lines changed

5 files changed

+60
-32
lines changed

examples-testing/changes.patch

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13335,6 +13335,28 @@ index 45619da3..97df59b3 100644
1333513335
switch (event.keyCode) {
1333613336
case 79 /*O*/:
1333713337
activeCamera = cameraOrtho;
13338+
diff --git a/examples-testing/examples/webgpu_camera_array.ts b/examples-testing/examples/webgpu_camera_array.ts
13339+
index 2e8218be..92051ebc 100644
13340+
--- a/examples-testing/examples/webgpu_camera_array.ts
13341+
+++ b/examples-testing/examples/webgpu_camera_array.ts
13342+
@@ -1,6 +1,6 @@
13343+
-import * as THREE from 'three';
13344+
+import * as THREE from 'three/webgpu';
13345+
13346+
-let camera, scene, renderer;
13347+
+let camera: THREE.ArrayCamera, scene: THREE.Scene, renderer: THREE.WebGPURenderer;
13348+
let mesh;
13349+
const AMOUNT = 6;
13350+
13351+
@@ -87,7 +87,7 @@ function onWindowResize() {
13352+
for (let x = 0; x < AMOUNT; x++) {
13353+
const subcamera = camera.cameras[AMOUNT * y + x];
13354+
13355+
- subcamera.viewport.set(Math.floor(x * WIDTH), Math.floor(y * HEIGHT), Math.ceil(WIDTH), Math.ceil(HEIGHT));
13356+
+ subcamera.viewport!.set(Math.floor(x * WIDTH), Math.floor(y * HEIGHT), Math.ceil(WIDTH), Math.ceil(HEIGHT));
13357+
13358+
subcamera.aspect = ASPECT_RATIO;
13359+
subcamera.updateProjectionMatrix();
1333813360
diff --git a/examples-testing/examples/webgpu_camera_logarithmicdepthbuffer.ts b/examples-testing/examples/webgpu_camera_logarithmicdepthbuffer.ts
1333913361
index 15527632..58f5cc14 100644
1334013362
--- a/examples-testing/examples/webgpu_camera_logarithmicdepthbuffer.ts
@@ -15894,7 +15916,7 @@ index 6e69c3be..2cdd4ba7 100644
1589415916
mouse.y = e.offsetY / window.innerHeight;
1589515917
}
1589615918
diff --git a/examples-testing/examples/webgpu_occlusion.ts b/examples-testing/examples/webgpu_occlusion.ts
15897-
index 85dbc6f0..b641b745 100644
15919+
index d9eb32a2..02b0c1d9 100644
1589815920
--- a/examples-testing/examples/webgpu_occlusion.ts
1589915921
+++ b/examples-testing/examples/webgpu_occlusion.ts
1590015922
@@ -1,12 +1,18 @@

src-testing/changes.patch

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ index d3ab54f8..1fdb5cf0 100644
336336

337337
addMethodChaining('toAttribute', bufferNode => bufferAttribute(bufferNode.value));
338338
diff --git a/src-testing/src/nodes/accessors/TextureNode.ts b/src-testing/src/nodes/accessors/TextureNode.ts
339-
index 4e41bb4f..480397d1 100644
339+
index d6d8b80a..0603c8c2 100644
340340
--- a/src-testing/src/nodes/accessors/TextureNode.ts
341341
+++ b/src-testing/src/nodes/accessors/TextureNode.ts
342342
@@ -4,10 +4,15 @@ import { textureSize } from './TextureSizeNode.js';
@@ -497,16 +497,16 @@ index 4e41bb4f..480397d1 100644
497497
this.sampler = value;
498498

499499
return this;
500-
@@ -468,7 +494,7 @@ class TextureNode extends UniformNode {
501-
502-
// @TODO: Move to TSL
503-
500+
@@ -475,7 +501,7 @@ class TextureNode extends UniformNode {
501+
* @param {Node} uvNode - The uv node.
502+
* @return {TextureNode} A texture node representing the texture sample.
503+
*/
504504
- uv(uvNode) {
505505
+ uv(uvNode: ShaderNodeObject<Node> | null) {
506506
// @deprecated, r172
507507

508508
console.warn('THREE.TextureNode: .uv() has been renamed. Use .sample() instead.');
509-
@@ -496,7 +522,7 @@ class TextureNode extends UniformNode {
509+
@@ -503,7 +529,7 @@ class TextureNode extends UniformNode {
510510
* @param {Node<float>} amountNode - How blurred the texture should be.
511511
* @return {TextureNode} A texture node representing the texture sample.
512512
*/
@@ -515,7 +515,7 @@ index 4e41bb4f..480397d1 100644
515515
const textureNode = this.clone();
516516
textureNode.biasNode = nodeObject(amountNode).mul(maxMipLevel(textureNode));
517517
textureNode.referenceNode = this.getSelf();
518-
@@ -510,7 +536,7 @@ class TextureNode extends UniformNode {
518+
@@ -517,7 +543,7 @@ class TextureNode extends UniformNode {
519519
* @param {Node<int>} levelNode - The mip level to sample.
520520
* @return {TextureNode} A texture node representing the texture sample.
521521
*/
@@ -1271,7 +1271,7 @@ index b1a5c99b..df827f78 100644
12711271
* This flag can be used for type testing.
12721272
*
12731273
diff --git a/src-testing/src/nodes/core/NodeBuilder.ts b/src-testing/src/nodes/core/NodeBuilder.ts
1274-
index 0736b400..345d0f7f 100644
1274+
index 30598127..e9ddf0f1 100644
12751275
--- a/src-testing/src/nodes/core/NodeBuilder.ts
12761276
+++ b/src-testing/src/nodes/core/NodeBuilder.ts
12771277
@@ -9,7 +9,7 @@ import StructTypeNode from './StructTypeNode.js';
@@ -2736,7 +2736,7 @@ index 8a291b92..39c864a4 100644
27362736

27372737
/**
27382738
diff --git a/src-testing/src/nodes/core/StackNode.ts b/src-testing/src/nodes/core/StackNode.ts
2739-
index eb1dadc7..36ade03e 100644
2739+
index 8cd4175a..68f7a383 100644
27402740
--- a/src-testing/src/nodes/core/StackNode.ts
27412741
+++ b/src-testing/src/nodes/core/StackNode.ts
27422742
@@ -1,6 +1,7 @@
@@ -3122,7 +3122,7 @@ index 1aa67531..25a4bd72 100644
31223122
this.value.lightingModel = this.lightingModel || builder.context.lightingModel;
31233123

31243124
diff --git a/src-testing/src/nodes/tsl/TSLCore.ts b/src-testing/src/nodes/tsl/TSLCore.ts
3125-
index 4ac059f0..fcb1c9fd 100644
3125+
index 227dc9db..549cbbb7 100644
31263126
--- a/src-testing/src/nodes/tsl/TSLCore.ts
31273127
+++ b/src-testing/src/nodes/tsl/TSLCore.ts
31283128
@@ -7,11 +7,40 @@ import SetNode from '../utils/SetNode.js';
@@ -3131,7 +3131,7 @@ index 4ac059f0..fcb1c9fd 100644
31313131
import { getValueFromType, getValueType } from '../core/NodeUtils.js';
31323132
+import NodeBuilder from '../core/NodeBuilder.js';
31333133

3134-
//
3134+
/** @module TSLCore **/
31353135

31363136
let currentStack = null;
31373137

@@ -3341,7 +3341,7 @@ index 4ac059f0..fcb1c9fd 100644
33413341
const { shaderNode, inputNodes } = this;
33423342

33433343
const properties = builder.getNodeProperties(shaderNode);
3344-
@@ -272,7 +438,15 @@ class ShaderCallNodeInternal extends Node {
3344+
@@ -273,7 +439,15 @@ class ShaderCallNodeInternal extends Node {
33453345
}
33463346
}
33473347

@@ -3357,7 +3357,7 @@ index 4ac059f0..fcb1c9fd 100644
33573357
constructor(jsFunc, nodeType) {
33583358
super(nodeType);
33593359

3360-
@@ -284,7 +458,7 @@ class ShaderNodeInternal extends Node {
3360+
@@ -285,7 +459,7 @@ class ShaderNodeInternal extends Node {
33613361
this.once = false;
33623362
}
33633363

@@ -3366,7 +3366,7 @@ index 4ac059f0..fcb1c9fd 100644
33663366
this.layout = layout;
33673367

33683368
return this;
3369-
@@ -301,6 +475,8 @@ class ShaderNodeInternal extends Node {
3369+
@@ -302,6 +476,8 @@ class ShaderNodeInternal extends Node {
33703370
}
33713371
}
33723372

@@ -3375,7 +3375,7 @@ index 4ac059f0..fcb1c9fd 100644
33753375
const bools = [false, true];
33763376
const uints = [0, 1, 2, 3];
33773377
const ints = [-1, -2];
3378-
@@ -394,10 +570,27 @@ export function ShaderNode(jsFunc, nodeType) {
3378+
@@ -395,10 +571,27 @@ export function ShaderNode(jsFunc, nodeType) {
33793379
return new Proxy(new ShaderNodeInternal(jsFunc, nodeType), shaderNodeHandler);
33803380
}
33813381

@@ -5329,7 +5329,7 @@ index d6c72696..3ae4005b 100644
53295329

53305330
_chainKeys[0] = bundleGroup;
53315331
diff --git a/src-testing/src/renderers/common/RenderContext.ts b/src-testing/src/renderers/common/RenderContext.ts
5332-
index 3db4ccbe..9b0c7493 100644
5332+
index 17124b62..ed67c412 100644
53335333
--- a/src-testing/src/renderers/common/RenderContext.ts
53345334
+++ b/src-testing/src/renderers/common/RenderContext.ts
53355335
@@ -1,5 +1,9 @@
@@ -5728,7 +5728,7 @@ index d12ad583..ef6e14ec 100644
57285728
}
57295729

57305730
diff --git a/src-testing/src/renderers/common/RenderObject.ts b/src-testing/src/renderers/common/RenderObject.ts
5731-
index 449b8028..3f506673 100644
5731+
index d4cc350a..8d62b85b 100644
57325732
--- a/src-testing/src/renderers/common/RenderObject.ts
57335733
+++ b/src-testing/src/renderers/common/RenderObject.ts
57345734
@@ -1,8 +1,27 @@
@@ -5882,7 +5882,7 @@ index 449b8028..3f506673 100644
58825882

58835883
for (const nodeAttribute of nodeAttributes) {
58845884
const attribute =
5885-
@@ -681,7 +741,7 @@ class RenderObject {
5885+
@@ -693,7 +753,7 @@ class RenderObject {
58865886
dispose() {
58875887
this.material.removeEventListener('dispose', this.onMaterialDispose);
58885888

@@ -6050,7 +6050,7 @@ index 78ce62cb..e978810d 100644
60506050

60516051
/**
60526052
diff --git a/src-testing/src/renderers/common/Renderer.ts b/src-testing/src/renderers/common/Renderer.ts
6053-
index 5ed43e22..81c62bbf 100644
6053+
index a5ec1592..bfa81fd3 100644
60546054
--- a/src-testing/src/renderers/common/Renderer.ts
60556055
+++ b/src-testing/src/renderers/common/Renderer.ts
60566056
@@ -36,7 +36,34 @@ import {
@@ -7056,7 +7056,7 @@ index 5ed43e22..81c62bbf 100644
70567056
// process renderable objects
70577057

70587058
for (let i = 0, il = renderList.length; i < il; i++) {
7059-
@@ -2359,31 +2608,31 @@ class Renderer {
7059+
@@ -2359,18 +2608,18 @@ class Renderer {
70607060

70617061
const { object, geometry, material, group, clippingContext } = renderItem;
70627062

@@ -7079,6 +7079,7 @@ index 5ed43e22..81c62bbf 100644
70797079
viewportValue.copy(vp).multiplyScalar(this._pixelRatio).floor();
70807080
viewportValue.minDepth = minDepth;
70817081
viewportValue.maxDepth = maxDepth;
7082+
@@ -2378,13 +2627,13 @@ class Renderer {
70827083

70837084
this.backend.updateViewport(this._currentRenderContext);
70847085

@@ -7097,7 +7098,7 @@ index 5ed43e22..81c62bbf 100644
70977098
lightsNode,
70987099
clippingContext,
70997100
passId,
7100-
@@ -2391,13 +2640,13 @@ class Renderer {
7101+
@@ -2392,13 +2641,13 @@ class Renderer {
71017102
}
71027103
}
71037104
} else {
@@ -7116,7 +7117,7 @@ index 5ed43e22..81c62bbf 100644
71167117
lightsNode,
71177118
clippingContext,
71187119
passId,
7119-
@@ -2420,7 +2669,17 @@ class Renderer {
7120+
@@ -2421,7 +2670,17 @@ class Renderer {
71207121
* @param {ClippingContext} clippingContext - The clipping context.
71217122
* @param {String?} [passId=null] - An optional ID for identifying the pass.
71227123
*/
@@ -7135,7 +7136,7 @@ index 5ed43e22..81c62bbf 100644
71357136
let overridePositionNode;
71367137
let overrideColorNode;
71377138
let overrideDepthNode;
7138-
@@ -2507,14 +2766,23 @@ class Renderer {
7139+
@@ -2508,14 +2767,23 @@ class Renderer {
71397140
* @param {ClippingContext} clippingContext - The clipping context.
71407141
* @param {String?} [passId=null] - An optional ID for identifying the pass.
71417142
*/
@@ -7162,7 +7163,7 @@ index 5ed43e22..81c62bbf 100644
71627163
clippingContext,
71637164
passId,
71647165
);
7165-
@@ -2523,18 +2791,18 @@ class Renderer {
7166+
@@ -2524,18 +2792,18 @@ class Renderer {
71667167

71677168
//
71687169

@@ -7187,7 +7188,7 @@ index 5ed43e22..81c62bbf 100644
71877188

71887189
//
71897190

7190-
@@ -2548,7 +2816,7 @@ class Renderer {
7191+
@@ -2549,7 +2817,7 @@ class Renderer {
71917192

71927193
this.backend.draw(renderObject, this.info);
71937194

@@ -7196,7 +7197,7 @@ index 5ed43e22..81c62bbf 100644
71967197
}
71977198

71987199
/**
7199-
@@ -2565,14 +2833,23 @@ class Renderer {
7200+
@@ -2566,14 +2834,23 @@ class Renderer {
72007201
* @param {ClippingContext} clippingContext - The clipping context.
72017202
* @param {String?} [passId=null] - An optional ID for identifying the pass.
72027203
*/
@@ -7223,7 +7224,7 @@ index 5ed43e22..81c62bbf 100644
72237224
clippingContext,
72247225
passId,
72257226
);
7226-
@@ -2581,16 +2858,16 @@ class Renderer {
7227+
@@ -2582,16 +2859,16 @@ class Renderer {
72277228

72287229
//
72297230

@@ -8751,7 +8752,7 @@ index 51bd2e13..74f42846 100644
87518752
const monitor = renderObject.getMonitor();
87528753

87538754
diff --git a/src-testing/src/renderers/webgl-fallback/WebGLBackend.ts b/src-testing/src/renderers/webgl-fallback/WebGLBackend.ts
8754-
index 6dbffadb..eb121811 100644
8755+
index 6a453fd4..00ac75fb 100644
87558756
--- a/src-testing/src/renderers/webgl-fallback/WebGLBackend.ts
87568757
+++ b/src-testing/src/renderers/webgl-fallback/WebGLBackend.ts
87578758
@@ -13,6 +13,7 @@ import { WebGLBufferRenderer } from './WebGLBufferRenderer.js';
@@ -9213,7 +9214,7 @@ index bc7914ba..ffbf5e67 100644
92139214
const nodeData = this.getDataFromNode(node, shaderStage, this.globalCache);
92149215

92159216
diff --git a/src-testing/src/renderers/webgpu/WebGPUBackend.ts b/src-testing/src/renderers/webgpu/WebGPUBackend.ts
9216-
index bc8b4ef5..28495763 100644
9217+
index d17e3a4b..eaeb4232 100644
92179218
--- a/src-testing/src/renderers/webgpu/WebGPUBackend.ts
92189219
+++ b/src-testing/src/renderers/webgpu/WebGPUBackend.ts
92199220
@@ -1279,7 +1279,14 @@ class WebGPUBackend extends Backend {

types/three/src/core/BufferAttribute.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ export class BufferAttribute {
5757
*/
5858
constructor(array: TypedArray, itemSize: number, normalized?: boolean);
5959

60+
/**
61+
* Unique number for this attribute instance.
62+
*/
63+
readonly id: number;
64+
6065
/**
6166
* Optional name for this attribute instance.
6267
* @defaultValue ''

types/three/src/renderers/common/RenderContext.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ declare class RenderContext {
5656
getCacheKey(): number;
5757
}
5858
/**
59-
* Computes a cache key for the given render context. This cache
59+
* Computes a cache key for the given render context. This key
6060
* should identify the render target state so it is possible to
6161
* configure the correct attachments in the respective backend.
6262
*

0 commit comments

Comments
 (0)