Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 93dafef

Browse files
committed
fix(core): use onReady event from Canvas NS
1 parent 7b54fae commit 93dafef

File tree

1 file changed

+39
-50
lines changed

1 file changed

+39
-50
lines changed

libs/core/nativescript/src/lib/canvas.ts

Lines changed: 39 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import '@nativescript/canvas-three';
22

33
import { DOCUMENT } from '@angular/common';
44
import {
5-
afterNextRender,
65
booleanAttribute,
76
ChangeDetectionStrategy,
87
Component,
@@ -16,7 +15,6 @@ import {
1615
NgZone,
1716
NO_ERRORS_SCHEMA,
1817
output,
19-
signal,
2018
Type,
2119
untracked,
2220
viewChild,
@@ -39,7 +37,6 @@ import {
3937
provideNgtRenderer,
4038
provideStore,
4139
} from 'angular-three';
42-
import { injectAutoEffect } from 'ngxtension/auto-effect';
4340
import { Raycaster, Scene, Vector3, WebGLRenderer } from 'three';
4441

4542
registerElement('Canvas', () => Canvas);
@@ -49,7 +46,7 @@ registerElement('Canvas', () => Canvas);
4946
standalone: true,
5047
template: `
5148
<GridLayout>
52-
<Canvas #canvas style="width: 100%; height: auto" (ready)="canvasElement.set($any($event).object)"></Canvas>
49+
<Canvas #canvas style="width: 100%; height: auto" (ready)="onReady($event)"></Canvas>
5350
</GridLayout>
5451
`,
5552
providers: [{ provide: DOCUMENT, useValue: document }, provideStore()],
@@ -97,60 +94,52 @@ export class NgtCanvasNative {
9794
private glEnvironmentInjector?: EnvironmentInjector;
9895
private glRef?: ComponentRef<any>;
9996

100-
canvasElement = signal<Canvas | null>(null);
101-
10297
constructor() {
103-
const autoEffect = injectAutoEffect();
104-
105-
afterNextRender(() => {
106-
autoEffect(() => {
107-
const canvas = this.canvasElement();
108-
if (!canvas) return;
109-
110-
const dpr = makeDpr(untracked(this.dpr), window);
111-
const canvasWidth = canvas.clientWidth * dpr;
112-
const canvasHeight = canvas.clientHeight * dpr;
113-
Object.assign(canvas, { width: canvasWidth, height: canvasHeight });
114-
115-
const context = canvas.getContext('webgl2');
116-
const gl = new WebGLRenderer({
117-
context: context as unknown as WebGLRenderingContext,
118-
powerPreference: 'high-performance',
119-
antialias: true,
120-
alpha: true,
121-
...untracked(this.gl),
122-
});
123-
124-
this.zone.runOutsideAngular(() => {
125-
this.configurator = this.initRoot(canvas as unknown as HTMLCanvasElement);
126-
this.configurator.configure({
127-
gl,
128-
size: { width: canvasWidth, height: canvasHeight, top: 0, left: 0 },
129-
shadows: untracked(this.shadows),
130-
legacy: untracked(this.legacy),
131-
linear: untracked(this.linear),
132-
flat: untracked(this.flat),
133-
orthographic: untracked(this.orthographic),
134-
frameloop: untracked(this.frameloop),
135-
performance: untracked(this.performance),
136-
dpr: untracked(this.dpr),
137-
raycaster: untracked(this.raycaster),
138-
scene: untracked(this.scene),
139-
camera: untracked(this.camera),
140-
lookAt: untracked(this.lookAt),
141-
});
142-
untracked(this.noZoneRender.bind(this));
143-
});
144-
});
145-
});
146-
14798
this.destroyRef.onDestroy(() => {
14899
this.glRef?.destroy();
149100
this.glEnvironmentInjector?.destroy();
150101
this.configurator?.destroy();
151102
});
152103
}
153104

105+
onReady(event: any) {
106+
const canvas = event.object;
107+
const dpr = makeDpr(untracked(this.dpr), window);
108+
const canvasWidth = canvas.clientWidth * dpr;
109+
const canvasHeight = canvas.clientHeight * dpr;
110+
Object.assign(canvas, { width: canvasWidth, height: canvasHeight });
111+
112+
const context = canvas.getContext('webgl2');
113+
const gl = new WebGLRenderer({
114+
context: context as unknown as WebGLRenderingContext,
115+
powerPreference: 'high-performance',
116+
antialias: true,
117+
alpha: true,
118+
...untracked(this.gl),
119+
});
120+
121+
this.zone.runOutsideAngular(() => {
122+
this.configurator = this.initRoot(canvas);
123+
this.configurator.configure({
124+
gl,
125+
size: { width: canvasWidth, height: canvasHeight, top: 0, left: 0 },
126+
shadows: untracked(this.shadows),
127+
legacy: untracked(this.legacy),
128+
linear: untracked(this.linear),
129+
flat: untracked(this.flat),
130+
orthographic: untracked(this.orthographic),
131+
frameloop: untracked(this.frameloop),
132+
performance: untracked(this.performance),
133+
dpr: untracked(this.dpr),
134+
raycaster: untracked(this.raycaster),
135+
scene: untracked(this.scene),
136+
camera: untracked(this.camera),
137+
lookAt: untracked(this.lookAt),
138+
});
139+
untracked(this.noZoneRender.bind(this));
140+
});
141+
}
142+
154143
private noZoneRender() {
155144
// NOTE: destroy previous instances if existed
156145
this.glEnvironmentInjector?.destroy();

0 commit comments

Comments
 (0)