Browse Source

improve temporal multi-smaple handling

- add forceOn arg
- instead of letting temporal converge do full sampling
- saves one geometry pass
Alexander Rose 3 years ago
parent
commit
4c93f01c64
2 changed files with 7 additions and 10 deletions
  1. 2 5
      src/mol-canvas3d/canvas3d.ts
  2. 5 5
      src/mol-canvas3d/passes/multi-sample.ts

+ 2 - 5
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);
                 }

+ 5 - 5
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;
     }