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.
@@ -875,6 +875,27 @@ class NgtStore extends NgtRxStore {
875
875
  this.set({ ready: true });
876
876
  this.invalidate();
877
877
  }
878
+ destroy(canvas) {
879
+ this.set((state) => ({
880
+ internal: Object.assign(Object.assign({}, state.internal), { active: false }),
881
+ }));
882
+ setTimeout(() => {
883
+ const { gl, xr, events } = this.get();
884
+ if (gl) {
885
+ if (events.disconnect) {
886
+ events.disconnect();
887
+ }
888
+ gl.renderLists.dispose();
889
+ gl.forceContextLoss();
890
+ if (gl.xr && gl.xr.enabled) {
891
+ gl.xr.setAnimationLoop(null);
892
+ xr.disconnect();
893
+ }
894
+ dispose(this.get());
895
+ rootStateMap.delete(canvas);
896
+ }
897
+ }, 500);
898
+ }
878
899
  resize() {
879
900
  const state = this.get();
880
901
  let oldSize = state.size;
@@ -918,6 +939,16 @@ function computeInitialSize(canvas, defaultSize) {
918
939
  }
919
940
  return { width: 0, height: 0, top: 0, left: 0 };
920
941
  }
942
+ // Disposes an object and all its properties
943
+ function dispose(obj) {
944
+ var _a;
945
+ if (obj.dispose && !is.scene(obj))
946
+ obj.dispose();
947
+ for (const p in obj) {
948
+ (_a = p.dispose) === null || _a === void 0 ? void 0 : _a.call(p);
949
+ delete obj[p];
950
+ }
951
+ }
921
952
 
922
953
  const NGT_COMPOUND_PREFIXES = new InjectionToken('NgtCompoundPrefixes');
923
954
 
@@ -1912,34 +1943,21 @@ class NgtRendererFactory {
1912
1943
  this.document = inject(DOCUMENT);
1913
1944
  this.rendererMap = new Map();
1914
1945
  this.portals = [];
1946
+ this.rendererStore = new NgtRendererStore({
1947
+ store: this.store,
1948
+ cdr: this.cdr,
1949
+ portals: this.portals,
1950
+ compoundPrefixes: this.compoundPrefixes,
1951
+ document: this.document,
1952
+ });
1915
1953
  }
1916
1954
  createRenderer(hostElement, type) {
1917
1955
  const delegateRenderer = this.delegateRendererFactory.createRenderer(hostElement, type);
1918
1956
  if (!type)
1919
1957
  return delegateRenderer;
1920
1958
  let renderer = this.rendererMap.get(type.id);
1921
- if (renderer)
1922
- return renderer;
1923
- if (!hostElement) {
1924
- const store = new NgtRendererStore({
1925
- store: this.store,
1926
- cdr: this.cdr,
1927
- portals: this.portals,
1928
- compoundPrefixes: this.compoundPrefixes,
1929
- document: this.document,
1930
- });
1931
- renderer = new NgtRenderer(delegateRenderer, store, this.catalogue);
1932
- this.rendererMap.set(type.id, renderer);
1933
- }
1934
1959
  if (!renderer) {
1935
- const store = new NgtRendererStore({
1936
- store: this.store,
1937
- cdr: this.cdr,
1938
- portals: this.portals,
1939
- compoundPrefixes: this.compoundPrefixes,
1940
- document: this.document,
1941
- });
1942
- renderer = new NgtRenderer(delegateRenderer, store, this.catalogue, false);
1960
+ renderer = new NgtRenderer(delegateRenderer, this.rendererStore, this.catalogue, !hostElement);
1943
1961
  this.rendererMap.set(type.id, renderer);
1944
1962
  }
1945
1963
  return renderer;
@@ -1959,7 +1977,6 @@ class NgtRenderer {
1959
1977
  this.store = store;
1960
1978
  this.catalogue = catalogue;
1961
1979
  this.root = root;
1962
- this.first = false;
1963
1980
  this.createText = this.delegate.createText.bind(this.delegate);
1964
1981
  this.destroy = this.delegate.destroy.bind(this.delegate);
1965
1982
  this.destroyNode = null;
@@ -1975,8 +1992,8 @@ class NgtRenderer {
1975
1992
  createElement(name, namespace) {
1976
1993
  const element = this.delegate.createElement(name, namespace);
1977
1994
  // on first pass, we return the Root Scene as the root node
1978
- if (this.root && !this.first) {
1979
- this.first = true;
1995
+ if (this.root) {
1996
+ this.root = false;
1980
1997
  const node = this.store.createNode('three', this.store.rootScene);
1981
1998
  node.__ngt_renderer__[13 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(element).injector;
1982
1999
  return node;
@@ -2471,6 +2488,7 @@ class NgtCanvas extends NgtRxStore {
2471
2488
  if (this.glEnvInjector)
2472
2489
  this.glEnvInjector.destroy();
2473
2490
  injectNgtLoader.destroy();
2491
+ this.store.destroy(this.glCanvas.nativeElement);
2474
2492
  super.ngOnDestroy();
2475
2493
  }
2476
2494
  overrideDetectChanges() {