diff --git a/src/core/Stage.ts b/src/core/Stage.ts index 6adb539b..d949c4b6 100644 --- a/src/core/Stage.ts +++ b/src/core/Stage.ts @@ -69,6 +69,7 @@ export type StageOptions = Omit< platform: Platform | WebPlatform; inspector: boolean; maxRetryCount: number; + enableClear: boolean; }; export type StageFpsUpdateHandler = ( diff --git a/src/core/renderers/webgl/WebGlRenderer.ts b/src/core/renderers/webgl/WebGlRenderer.ts index 0ec0f927..761a849d 100644 --- a/src/core/renderers/webgl/WebGlRenderer.ts +++ b/src/core/renderers/webgl/WebGlRenderer.ts @@ -190,7 +190,9 @@ export class WebGlRenderer extends CoreRenderer { this.curRenderOp = null; this.renderOps.length = 0; glw.setScissorTest(false); - glw.clear(); + if (this.stage.options.enableClear !== false) { + glw.clear(); + } } createShaderProgram( diff --git a/src/main-api/Renderer.ts b/src/main-api/Renderer.ts index fbef8dca..6802ee7a 100644 --- a/src/main-api/Renderer.ts +++ b/src/main-api/Renderer.ts @@ -238,6 +238,17 @@ export interface RendererRuntimeSettings { */ fpsUpdateInterval: number; + /** + * Clears the render buffer on reset + * + * @remarks + * If false, the renderer will not clear the buffer before rendering a new frame. + * This is useful if you want to preserve the previous frame. + * + * @defaultValue `true` + */ + enableClear: boolean; + /** * DOM Inspector * @@ -525,6 +536,7 @@ export class RendererMain extends EventEmitter { settings.devicePhysicalPixelRatio || window.devicePixelRatio || 1, clearColor: settings.clearColor ?? 0x00000000, fpsUpdateInterval: settings.fpsUpdateInterval || 0, + enableClear: settings.enableClear ?? true, targetFPS: settings.targetFPS || 0, numImageWorkers: settings.numImageWorkers !== undefined ? settings.numImageWorkers : 2, @@ -586,6 +598,7 @@ export class RendererMain extends EventEmitter { enableContextSpy: settings.enableContextSpy!, forceWebGL2: settings.forceWebGL2!, fpsUpdateInterval: settings.fpsUpdateInterval!, + enableClear: settings.enableClear!, numImageWorkers: settings.numImageWorkers!, renderEngine: settings.renderEngine!, textureMemory: resolvedTxSettings,