From cb6de98737ed75665b6ceb9163e4cc5259f4a0ee Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Wed, 10 Jun 2026 21:43:35 +0100 Subject: [PATCH] Don't reset user settings --- .../rendering/fps-quality-autoscaler.ts | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/graphics/rendering/fps-quality-autoscaler.ts b/src/graphics/rendering/fps-quality-autoscaler.ts index e4371b8..56f16aa 100644 --- a/src/graphics/rendering/fps-quality-autoscaler.ts +++ b/src/graphics/rendering/fps-quality-autoscaler.ts @@ -1,5 +1,7 @@ import { clamp } from '../../helper/clamp'; import { Renderer } from './renderer/renderer'; +import { defaultRuntimeSettings } from './settings/default-runtime-settings'; +import { RuntimeSettings } from './settings/runtime-settings'; /** * Set the quality of rendering based on FPS values. @@ -23,7 +25,24 @@ export class FpsQualityAutoscaler { public static fpsTarget = 30; public fpsHysteresis = 5; - constructor(private readonly renderer: Renderer) {} + /** + * When `false`, FPS is still measured but the render scales are left alone. + */ + public scalingEnabled = true; + + constructor( + private readonly renderer: Renderer, + initialScales: Partial< + Pick + > = {} + ) { + // Starting from the renderer's actual scales avoids a quality jump on + // the first adjustment. + this.distanceScale = + initialScales.distanceRenderScale ?? defaultRuntimeSettings.distanceRenderScale; + this.lightsScale = + initialScales.lightsRenderScale ?? defaultRuntimeSettings.lightsRenderScale; + } public get FPS(): number { return this.fps; @@ -59,10 +78,14 @@ export class FpsQualityAutoscaler { this.fps = 1000 / ninetiethPercentile; } - private distanceScale = 0.33; - private lightsScale = 1; + private distanceScale: number; + private lightsScale: number; private adjustQuality() { + if (!this.scalingEnabled) { + return; + } + if (this.fps >= FpsQualityAutoscaler.fpsTarget + this.fpsHysteresis) { this.distanceScale = this.distanceScale + 0.1; this.lightsScale = this.lightsScale + 0.1;