@@ -8,6 +8,14 @@ import {
88} from "../../Types" ;
99import { Components } from "../../Components" ;
1010
11+ /**
12+ * The mode of the renderer. If MANUAL, the renderer will be updated on command. If AUTO, the renderer will render on every update tick.
13+ */
14+ export enum RendererMode {
15+ MANUAL ,
16+ AUTO ,
17+ }
18+
1119/**
1220 * A basic renderer capable of rendering [Objec3Ds](https://threejs.org/docs/#api/en/core/Object3D).
1321 */
@@ -28,6 +36,16 @@ export class SimpleRenderer extends BaseRenderer {
2836 */
2937 three : THREE . WebGLRenderer ;
3038
39+ /**
40+ * The mode of the renderer. If MANUAL, the renderer will be updated manually. If AUTO, the renderer will render on every update tick.
41+ */
42+ mode = RendererMode . AUTO ;
43+
44+ /**
45+ * Whether the renderer needs to be updated. If true, the renderer will be updated on the next frame.
46+ */
47+ needsUpdate = false ;
48+
3149 protected _canvas : HTMLCanvasElement ;
3250 protected _parameters ?: Partial < THREE . WebGLRendererParameters > ;
3351 protected _resizeObserver : ResizeObserver | null = null ;
@@ -75,6 +93,12 @@ export class SimpleRenderer extends BaseRenderer {
7593 /** {@link Updateable.update } */
7694 update ( ) {
7795 if ( ! this . enabled || ! this . currentWorld ) return ;
96+
97+ if ( this . mode === RendererMode . MANUAL && ! this . needsUpdate ) {
98+ return ;
99+ }
100+ this . needsUpdate = false ;
101+
78102 this . onBeforeUpdate . trigger ( this ) ;
79103 const scene = this . currentWorld . scene . three ;
80104 const camera = this . currentWorld . camera . three ;
0 commit comments