@@ -2,7 +2,6 @@ import '@nativescript/canvas-three';
22
33import { DOCUMENT } from '@angular/common' ;
44import {
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' ;
4340import { Raycaster , Scene , Vector3 , WebGLRenderer } from 'three' ;
4441
4542registerElement ( '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