From 4c93f01c64a1483be1f43b40fde2469a7c16ba9a Mon Sep 17 00:00:00 2001
From: Alexander Rose <alexander.rose@weirdbyte.de>
Date: Tue, 28 Dec 2021 20:39:03 -0800
Subject: [PATCH] improve temporal multi-smaple handling

- add forceOn arg
- instead of letting temporal converge do full sampling
- saves one geometry pass
---
 src/mol-canvas3d/canvas3d.ts            |  7 ++-----
 src/mol-canvas3d/passes/multi-sample.ts | 10 +++++-----
 2 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts
index 4206ac7a8..743e6bb42 100644
--- a/src/mol-canvas3d/canvas3d.ts
+++ b/src/mol-canvas3d/canvas3d.ts
@@ -404,11 +404,8 @@ namespace Canvas3D {
 
                 const ctx = { renderer, camera: cam, scene, helper };
                 if (MultiSamplePass.isEnabled(p.multiSample)) {
-                    if (!cameraChanged && allowMulti && !controls.props.spin) {
-                        while (!multiSampleHelper.render(ctx, p, true));
-                    } else {
-                        multiSampleHelper.render(ctx, p, true);
-                    }
+                    const forceOn = !cameraChanged && allowMulti && !controls.props.spin;
+                    multiSampleHelper.render(ctx, p, true, forceOn);
                 } else {
                     passes.draw.render(ctx, p, true);
                 }
diff --git a/src/mol-canvas3d/passes/multi-sample.ts b/src/mol-canvas3d/passes/multi-sample.ts
index 965015c2d..dba08fb53 100644
--- a/src/mol-canvas3d/passes/multi-sample.ts
+++ b/src/mol-canvas3d/passes/multi-sample.ts
@@ -105,12 +105,12 @@ export class MultiSamplePass {
         }
     }
 
-    render(sampleIndex: number, ctx: RenderContext, props: Props, toDrawingBuffer: boolean) {
-        if (props.multiSample.mode === 'temporal') {
+    render(sampleIndex: number, ctx: RenderContext, props: Props, toDrawingBuffer: boolean, forceOn: boolean) {
+        if (props.multiSample.mode === 'temporal' && !forceOn) {
             return this.renderTemporalMultiSample(sampleIndex, ctx, props, toDrawingBuffer);
         } else {
             this.renderMultiSample(ctx, toDrawingBuffer, props);
-            return sampleIndex;
+            return -2;
         }
     }
 
@@ -335,8 +335,8 @@ export class MultiSampleHelper {
     }
 
     /** Return `true` while more samples are needed */
-    render(ctx: RenderContext, props: Props, toDrawingBuffer: boolean) {
-        this.sampleIndex = this.multiSamplePass.render(this.sampleIndex, ctx, props, toDrawingBuffer);
+    render(ctx: RenderContext, props: Props, toDrawingBuffer: boolean, forceOn?: boolean) {
+        this.sampleIndex = this.multiSamplePass.render(this.sampleIndex, ctx, props, toDrawingBuffer, !!forceOn);
         return this.sampleIndex < 0;
     }
 
-- 
GitLab