@@ -365,7 +365,12 @@ function Inner() {
365365 setEditorState ( "playbackTime" , payload . playhead_position / FPS ) ;
366366 } ) ;
367367
368+ let skipRenderFrameForConfigUpdate = false ;
369+
368370 const emitRenderFrame = ( time : number ) => {
371+ if ( skipRenderFrameForConfigUpdate ) {
372+ return ;
373+ }
369374 if ( ! editorState . playing ) {
370375 events . renderFrameEvent . emit ( {
371376 frame_number : Math . max ( Math . floor ( time * FPS ) , 0 ) ,
@@ -390,33 +395,6 @@ function Inner() {
390395 return editorState . playbackTime ;
391396 } ) ;
392397
393- createEffect (
394- on (
395- ( ) => [ frameNumberToRender ( ) , previewResolutionBase ( ) ] ,
396- ( [ number ] ) => {
397- if ( editorState . playing ) return ;
398- renderFrame ( number as number ) ;
399- } ,
400- { defer : false } ,
401- ) ,
402- ) ;
403-
404- createEffect (
405- on ( isExportMode , ( exportMode , prevExportMode ) => {
406- if ( prevExportMode === true && exportMode === false ) {
407- emitRenderFrame ( frameNumberToRender ( ) ) ;
408- }
409- } ) ,
410- ) ;
411-
412- createEffect (
413- on ( isCropMode , ( cropMode , prevCropMode ) => {
414- if ( prevCropMode === true && cropMode === false ) {
415- emitRenderFrame ( frameNumberToRender ( ) ) ;
416- }
417- } ) ,
418- ) ;
419-
420398 const doConfigUpdate = async ( time : number ) => {
421399 const config = getPreviewProjectConfig ( project , editorState ) ;
422400 const frameNumber = Math . max ( Math . floor ( time * FPS ) , 0 ) ;
@@ -441,6 +419,7 @@ function Inner() {
441419 throttledConfigUpdate ( time ) ;
442420 trailingConfigUpdate ( time ) ;
443421 } ;
422+
444423 createEffect (
445424 on (
446425 ( ) => {
@@ -451,12 +430,43 @@ function Inner() {
451430 } ;
452431 } ,
453432 ( ) => {
433+ skipRenderFrameForConfigUpdate = true ;
434+ queueMicrotask ( ( ) => {
435+ skipRenderFrameForConfigUpdate = false ;
436+ } ) ;
454437 updateConfigAndRender ( frameNumberToRender ( ) ) ;
455438 } ,
456439 { defer : true } ,
457440 ) ,
458441 ) ;
459442
443+ createEffect (
444+ on (
445+ ( ) => [ frameNumberToRender ( ) , previewResolutionBase ( ) ] ,
446+ ( [ number ] ) => {
447+ if ( editorState . playing ) return ;
448+ renderFrame ( number as number ) ;
449+ } ,
450+ { defer : false } ,
451+ ) ,
452+ ) ;
453+
454+ createEffect (
455+ on ( isExportMode , ( exportMode , prevExportMode ) => {
456+ if ( prevExportMode === true && exportMode === false ) {
457+ emitRenderFrame ( frameNumberToRender ( ) ) ;
458+ }
459+ } ) ,
460+ ) ;
461+
462+ createEffect (
463+ on ( isCropMode , ( cropMode , prevCropMode ) => {
464+ if ( prevCropMode === true && cropMode === false ) {
465+ emitRenderFrame ( frameNumberToRender ( ) ) ;
466+ }
467+ } ) ,
468+ ) ;
469+
460470 const fullscreenMode = ( ) => {
461471 if ( isExportMode ( ) ) return "export" as const ;
462472 return null ;
0 commit comments