@@ -6,8 +6,7 @@ import * as Logic from './logic/index.zig'
66import initMouseController , { camera } from 'pointer'
77import getDefaultPoints from 'utils/getDefaultPoints'
88import * as Textures from 'textures'
9- import throttle from 'utils/throttle'
10- import generatePreview from 'WebGPU/generatePreview'
9+ import { captureCanvas } from 'WebGPU/captureCanvas'
1110import * as Typing from 'typing'
1211import * as Fonts from 'fonts'
1312import { Asset , CreatorAPI , CreatorProps , Id , ZigAsset , ZigProjectSnapshot } from './types'
@@ -19,19 +18,19 @@ import * as Snapshots from 'snapshots/snapshots'
1918import toZigAsset from 'snapshots/toZigAsset'
2019import { NO_ASSET_ID } from 'consts'
2120import { downloadCanvas } from 'utils/downloadCanvas'
21+ import * as PreviewTrigger from './previewTrigger'
2222
2323export default async function initCreator ( { canvas, ...props } : CreatorProps ) : Promise < CreatorAPI > {
2424 const fakeMaxTexSize = 40
2525
26- let texturesLoading = 0
2726 let isMouseEventProcessing = false
2827 const abortController = new AbortController ( )
2928
3029 function updateIsProcessingFlag ( ) {
31- props . onIsProcessingFlagUpdate ( texturesLoading > 0 || isMouseEventProcessing )
30+ // TODO: add back resources loading status and trigger each time reosurces are loaded
31+ props . onIsProcessingFlagUpdate ( isMouseEventProcessing )
3232 }
3333
34- let isDestroyed = false
3534 await setupDevice ( props . captureError )
3635 Snapshots . init ( props . initialProjectWidth , props . initialProjectHeight )
3736
@@ -43,11 +42,7 @@ export default async function initCreator({ canvas, ...props }: CreatorProps): P
4342 props . isTest
4443 )
4544
46- Textures . init ( ( texLoadings ) => {
47- texturesLoading = texLoadings
48- updateIsProcessingFlag ( )
49- triggerGeneratePreview ( )
50- } )
45+ Textures . init ( )
5146
5247 CustomPrograms . init ( )
5348 Fonts . init ( props . getFontUrl )
@@ -88,33 +83,11 @@ export default async function initCreator({ canvas, ...props }: CreatorProps): P
8883 abortController . signal
8984 )
9085
91- const throttledPreviewGenerator = throttle ( ( ) => {
92- if ( isDestroyed || texturesLoading > 0 || props . isTest || props . disableMinaitures ) return
93-
94- generatePreview (
95- device ,
96- presentationFormat ,
97- canvas ,
98- Snapshots . lastSnapshot . width ,
99- Snapshots . lastSnapshot . height ,
100- 400 ,
101- 400 ,
102- capturePreview ,
103- props . onPreviewUpdate
104- )
105- } , 1000 * 5 )
106-
107- const triggerGeneratePreview = ( ) => {
108- if ( texturesLoading === 0 ) {
109- throttledPreviewGenerator ( )
110- }
111- }
112-
11386 const onAssetUpdate = ( snapshot : ZigProjectSnapshot , commit : boolean ) => {
11487 Snapshots . saveSnapshot ( snapshot )
11588 props . onSnapshotUpdate ( Snapshots . lastSnapshot , commit )
11689 if ( commit ) {
117- triggerGeneratePreview ( )
90+ PreviewTrigger . safeGeneratePreview ( )
11891 }
11992 }
12093
@@ -221,6 +194,15 @@ export default async function initCreator({ canvas, ...props }: CreatorProps): P
221194 props . captureError
222195 )
223196
197+ if ( ! props . isTest && ! props . disableMinaitures ) {
198+ PreviewTrigger . init ( {
199+ canvas,
200+ capturePreview,
201+ onPreviewUpdate : props . onPreviewUpdate ,
202+ onResourcesLoad : updateIsProcessingFlag ,
203+ } )
204+ }
205+
224206 Fonts . loadFont ( 0 )
225207
226208 const setSnapshot : CreatorAPI [ 'setSnapshot' ] = async (
@@ -230,7 +212,7 @@ export default async function initCreator({ canvas, ...props }: CreatorProps): P
230212 try {
231213 const assets = snapshot . assets . map < ZigAsset > ( ( asset ) => toZigAsset ( asset , props . captureError ) )
232214 Logic . setSnapshot ( { ...snapshot , assets } , produceSnapshot , addHistoryEntry )
233- triggerGeneratePreview ( )
215+ PreviewTrigger . safeGeneratePreview ( )
234216 } catch ( err ) {
235217 props . captureError ( err )
236218 }
@@ -242,7 +224,7 @@ export default async function initCreator({ canvas, ...props }: CreatorProps): P
242224 removeAsset : Logic . removeAsset ,
243225 setSnapshot,
244226 destroy : ( ) => {
245- isDestroyed = true
227+ PreviewTrigger . markDeviceDestroyed ( )
246228 abortController . abort ( )
247229 stopRAF ( )
248230 Logic . deinitState ( )
@@ -266,7 +248,7 @@ export default async function initCreator({ canvas, ...props }: CreatorProps): P
266248 Logic . setSelectedAssetTypoProps ( typoProps , commit )
267249 } ,
268250 download : ( ) => {
269- generatePreview (
251+ captureCanvas (
270252 device ,
271253 presentationFormat ,
272254 canvas ,
0 commit comments