@@ -2,7 +2,6 @@ import '@nativescript/canvas-three';
2
2
3
3
import { DOCUMENT } from '@angular/common' ;
4
4
import {
5
- afterNextRender ,
6
5
booleanAttribute ,
7
6
ChangeDetectionStrategy ,
8
7
Component ,
@@ -16,7 +15,6 @@ import {
16
15
NgZone ,
17
16
NO_ERRORS_SCHEMA ,
18
17
output ,
19
- signal ,
20
18
Type ,
21
19
untracked ,
22
20
viewChild ,
@@ -39,7 +37,6 @@ import {
39
37
provideNgtRenderer ,
40
38
provideStore ,
41
39
} from 'angular-three' ;
42
- import { injectAutoEffect } from 'ngxtension/auto-effect' ;
43
40
import { Raycaster , Scene , Vector3 , WebGLRenderer } from 'three' ;
44
41
45
42
registerElement ( 'Canvas' , ( ) => Canvas ) ;
@@ -49,7 +46,7 @@ registerElement('Canvas', () => Canvas);
49
46
standalone : true ,
50
47
template : `
51
48
<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>
53
50
</GridLayout>
54
51
` ,
55
52
providers : [ { provide : DOCUMENT , useValue : document } , provideStore ( ) ] ,
@@ -97,60 +94,52 @@ export class NgtCanvasNative {
97
94
private glEnvironmentInjector ?: EnvironmentInjector ;
98
95
private glRef ?: ComponentRef < any > ;
99
96
100
- canvasElement = signal < Canvas | null > ( null ) ;
101
-
102
97
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
-
147
98
this . destroyRef . onDestroy ( ( ) => {
148
99
this . glRef ?. destroy ( ) ;
149
100
this . glEnvironmentInjector ?. destroy ( ) ;
150
101
this . configurator ?. destroy ( ) ;
151
102
} ) ;
152
103
}
153
104
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
+
154
143
private noZoneRender ( ) {
155
144
// NOTE: destroy previous instances if existed
156
145
this . glEnvironmentInjector ?. destroy ( ) ;
0 commit comments