Skip to content

Commit f39e32c

Browse files
nartcclaude
andcommitted
fix(core): align ngt-primitive handling with R3F reconciler behavior
- Always delete and regenerate __ngt__ instance state for primitives to simulate a fresh object (matches R3F's createInstance pattern) - Fix isPrimitive check in removeThreeChild to correctly skip disposal for primitives (was using !== instead of ===) Co-Authored-By: Claude Opus 4.5 <[email protected]>
1 parent f8bf568 commit f39e32c

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

libs/core/src/lib/renderer/renderer.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,13 @@ export class NgtRenderer2 implements Renderer2 {
212212
if (name === 'ngt-primitive') {
213213
if (!injectedArgs[0]) throw new Error(`[NGT] ngt-primitive without args is invalid`);
214214
const object = injectedArgs[0];
215-
let instanceState = getInstanceState(object);
216-
if (!instanceState || instanceState.type !== 'ngt-primitive') {
217-
// if an object isn't already "prepared", we'll prepare it
218-
prepare(object, 'ngt-primitive', instanceState);
215+
216+
if (getInstanceState(object)) {
217+
delete object['__ngt__'];
219218
}
220219

220+
prepare(object, 'ngt-primitive');
221+
221222
const primitiveRendererNode = createRendererNode('three', object, this.document);
222223
if (injectedParent) {
223224
primitiveRendererNode.__ngt_renderer__[NgtRendererClassId.parent] =

libs/core/src/lib/renderer/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ export function removeThreeChild(child: NgtInstanceNode, parent: NgtInstanceNode
194194
}
195195

196196
// dispose
197-
const isPrimitive = cIS?.type && cIS.type !== 'ngt-primitive';
197+
const isPrimitive = cIS?.type && cIS.type === 'ngt-primitive';
198198
if (!isPrimitive && child['dispose'] && !is.three<THREE.Scene>(child, 'isScene')) {
199199
queueMicrotask(() => child['dispose']());
200200
}

0 commit comments

Comments
 (0)