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.
@@ -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
- const store = new NgtRendererStore({
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 && !this.first) {
2000
- this.first = true;
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() {