diff --git a/src/graphics/rendering/renderer/renderer-implementation.ts b/src/graphics/rendering/renderer/renderer-implementation.ts index 8b67ebe..7f2cd28 100644 --- a/src/graphics/rendering/renderer/renderer-implementation.ts +++ b/src/graphics/rendering/renderer/renderer-implementation.ts @@ -6,6 +6,7 @@ import { LightDrawable } from '../../../drawables/lights/light-drawable'; import { colorToString } from '../../../helper/color-to-string'; import { DefaultFrameBuffer } from '../../graphics-library/frame-buffer/default-frame-buffer'; import { IntermediateFrameBuffer } from '../../graphics-library/frame-buffer/intermediate-frame-buffer'; +import { enableExtension } from '../../graphics-library/helper/enable-extension'; import { getHardwareInfo } from '../../graphics-library/helper/get-hardware-info'; import { WebGlStopwatch } from '../../graphics-library/helper/stopwatch'; import { ParallelCompiler } from '../../graphics-library/parallel-compiler'; @@ -77,7 +78,9 @@ export class RendererImplementation implements Renderer { setRuntimeSettings(overrides: Partial): void { Object.entries(overrides).forEach(([k, v]) => { - this.applyRuntimeSettings[k as keyof RuntimeSettings](v); + if (k in this.applyRuntimeSettings) { + this.applyRuntimeSettings[k as keyof RuntimeSettings](v); + } }); } @@ -287,8 +290,12 @@ export class RendererImplementation implements Renderer { public destroy(): void { this.canvasResizeObserver.disconnect(); + this.distancePass.destroy(); this.lightsPass.destroy(); this.palette.destroy(); + + const ext = enableExtension(this.gl, 'WEBGL_lose_context'); + ext.loseContext(); } } diff --git a/src/run-animation.ts b/src/run-animation.ts index 53d410c..98c49d3 100644 --- a/src/run-animation.ts +++ b/src/run-animation.ts @@ -51,18 +51,17 @@ export async function runAnimation( currentTimeInMilliseconds: DOMHighResTimeStamp, deltaTimeInMilliseconds: DOMHighResTimeStamp ) => boolean, - startupSettingOverrides: Partial = {}, - initialRuntimeSettingOverrides: Partial = {} + settings: Partial = {} ): Promise { - if (startupSettingOverrides.enableContextLostSimulator) { + if (settings.enableContextLostSimulator) { enableContextLostSimulator(canvas); } - const renderer = new ContextAwareRenderer(canvas, descriptors, startupSettingOverrides); + const renderer = new ContextAwareRenderer(canvas, descriptors, settings); const deltaTimeCalculator = new DeltaTimeCalculator(); let triggerIsOver: () => void; const isOver = new Promise((resolve) => (triggerIsOver = resolve)); - renderer.setRuntimeSettings(initialRuntimeSettingOverrides); + renderer.setRuntimeSettings(settings); const autoscaler = new FpsQualityAutoscaler(renderer); await renderer.initializedPromise;