angular-three 1.7.0 → 1.7.2
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/esm2020/lib/canvas.mjs +2 -1
- package/esm2020/lib/renderer/renderer.mjs +11 -25
- package/esm2020/lib/stores/store.mjs +31 -1
- package/fesm2015/angular-three.mjs +42 -24
- package/fesm2015/angular-three.mjs.map +1 -1
- package/fesm2020/angular-three.mjs +41 -24
- package/fesm2020/angular-three.mjs.map +1 -1
- package/lib/renderer/renderer.d.ts +2 -2
- package/lib/stores/store.d.ts +1 -0
- package/package.json +1 -1
- package/plugin/package.json +1 -1
|
@@ -894,6 +894,27 @@ class NgtStore extends NgtRxStore {
|
|
|
894
894
|
this.set({ ready: true });
|
|
895
895
|
this.invalidate();
|
|
896
896
|
}
|
|
897
|
+
destroy(canvas) {
|
|
898
|
+
this.set((state) => ({
|
|
899
|
+
internal: { ...state.internal, active: false },
|
|
900
|
+
}));
|
|
901
|
+
setTimeout(() => {
|
|
902
|
+
const { gl, xr, events } = this.get();
|
|
903
|
+
if (gl) {
|
|
904
|
+
if (events.disconnect) {
|
|
905
|
+
events.disconnect();
|
|
906
|
+
}
|
|
907
|
+
gl.renderLists.dispose();
|
|
908
|
+
gl.forceContextLoss();
|
|
909
|
+
if (gl.xr && gl.xr.enabled) {
|
|
910
|
+
gl.xr.setAnimationLoop(null);
|
|
911
|
+
xr.disconnect();
|
|
912
|
+
}
|
|
913
|
+
dispose(this.get());
|
|
914
|
+
rootStateMap.delete(canvas);
|
|
915
|
+
}
|
|
916
|
+
}, 500);
|
|
917
|
+
}
|
|
897
918
|
resize() {
|
|
898
919
|
const state = this.get();
|
|
899
920
|
let oldSize = state.size;
|
|
@@ -937,6 +958,15 @@ function computeInitialSize(canvas, defaultSize) {
|
|
|
937
958
|
}
|
|
938
959
|
return { width: 0, height: 0, top: 0, left: 0 };
|
|
939
960
|
}
|
|
961
|
+
// Disposes an object and all its properties
|
|
962
|
+
function dispose(obj) {
|
|
963
|
+
if (obj.dispose && !is.scene(obj))
|
|
964
|
+
obj.dispose();
|
|
965
|
+
for (const p in obj) {
|
|
966
|
+
p.dispose?.();
|
|
967
|
+
delete obj[p];
|
|
968
|
+
}
|
|
969
|
+
}
|
|
940
970
|
|
|
941
971
|
const NGT_COMPOUND_PREFIXES = new InjectionToken('NgtCompoundPrefixes');
|
|
942
972
|
|
|
@@ -1933,34 +1963,21 @@ class NgtRendererFactory {
|
|
|
1933
1963
|
this.document = inject(DOCUMENT);
|
|
1934
1964
|
this.rendererMap = new Map();
|
|
1935
1965
|
this.portals = [];
|
|
1966
|
+
this.rendererStore = new NgtRendererStore({
|
|
1967
|
+
store: this.store,
|
|
1968
|
+
cdr: this.cdr,
|
|
1969
|
+
portals: this.portals,
|
|
1970
|
+
compoundPrefixes: this.compoundPrefixes,
|
|
1971
|
+
document: this.document,
|
|
1972
|
+
});
|
|
1936
1973
|
}
|
|
1937
1974
|
createRenderer(hostElement, type) {
|
|
1938
1975
|
const delegateRenderer = this.delegateRendererFactory.createRenderer(hostElement, type);
|
|
1939
1976
|
if (!type)
|
|
1940
1977
|
return delegateRenderer;
|
|
1941
1978
|
let renderer = this.rendererMap.get(type.id);
|
|
1942
|
-
if (renderer)
|
|
1943
|
-
return renderer;
|
|
1944
|
-
if (!hostElement) {
|
|
1945
|
-
const store = new NgtRendererStore({
|
|
1946
|
-
store: this.store,
|
|
1947
|
-
cdr: this.cdr,
|
|
1948
|
-
portals: this.portals,
|
|
1949
|
-
compoundPrefixes: this.compoundPrefixes,
|
|
1950
|
-
document: this.document,
|
|
1951
|
-
});
|
|
1952
|
-
renderer = new NgtRenderer(delegateRenderer, store, this.catalogue);
|
|
1953
|
-
this.rendererMap.set(type.id, renderer);
|
|
1954
|
-
}
|
|
1955
1979
|
if (!renderer) {
|
|
1956
|
-
|
|
1957
|
-
store: this.store,
|
|
1958
|
-
cdr: this.cdr,
|
|
1959
|
-
portals: this.portals,
|
|
1960
|
-
compoundPrefixes: this.compoundPrefixes,
|
|
1961
|
-
document: this.document,
|
|
1962
|
-
});
|
|
1963
|
-
renderer = new NgtRenderer(delegateRenderer, store, this.catalogue, false);
|
|
1980
|
+
renderer = new NgtRenderer(delegateRenderer, this.rendererStore, this.catalogue, !hostElement);
|
|
1964
1981
|
this.rendererMap.set(type.id, renderer);
|
|
1965
1982
|
}
|
|
1966
1983
|
return renderer;
|
|
@@ -1980,7 +1997,6 @@ class NgtRenderer {
|
|
|
1980
1997
|
this.store = store;
|
|
1981
1998
|
this.catalogue = catalogue;
|
|
1982
1999
|
this.root = root;
|
|
1983
|
-
this.first = false;
|
|
1984
2000
|
this.createText = this.delegate.createText.bind(this.delegate);
|
|
1985
2001
|
this.destroy = this.delegate.destroy.bind(this.delegate);
|
|
1986
2002
|
this.destroyNode = null;
|
|
@@ -1996,8 +2012,8 @@ class NgtRenderer {
|
|
|
1996
2012
|
createElement(name, namespace) {
|
|
1997
2013
|
const element = this.delegate.createElement(name, namespace);
|
|
1998
2014
|
// on first pass, we return the Root Scene as the root node
|
|
1999
|
-
if (this.root
|
|
2000
|
-
this.
|
|
2015
|
+
if (this.root) {
|
|
2016
|
+
this.root = false;
|
|
2001
2017
|
const node = this.store.createNode('three', this.store.rootScene);
|
|
2002
2018
|
node.__ngt_renderer__[13 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(element).injector;
|
|
2003
2019
|
return node;
|
|
@@ -2491,6 +2507,7 @@ class NgtCanvas extends NgtRxStore {
|
|
|
2491
2507
|
if (this.glEnvInjector)
|
|
2492
2508
|
this.glEnvInjector.destroy();
|
|
2493
2509
|
injectNgtLoader.destroy();
|
|
2510
|
+
this.store.destroy(this.glCanvas.nativeElement);
|
|
2494
2511
|
super.ngOnDestroy();
|
|
2495
2512
|
}
|
|
2496
2513
|
overrideDetectChanges() {
|