Quellcode durchsuchen

add MultiSampleParams.reduceFlicker

Alexander Rose vor 1 Jahr
Ursprung
Commit
11604b9e8f

+ 1 - 0
CHANGELOG.md

@@ -12,6 +12,7 @@ Note that since we don't clearly distinguish between a public and private interf
 - CCD extension: Make visuals for aromatic bonds configurable
 - Add optional `file?: CifFile` to `MmcifFormat.data`
 - Add support for `WEBGL_clip_cull_distance`
+- Add `MultiSampleParams.reduceFlicker` (to be able to switch it off)
 
 ## [v3.39.0] - 2023-09-02
 

+ 1 - 1
src/mol-canvas3d/canvas3d.ts

@@ -445,7 +445,7 @@ namespace Canvas3D {
                 if (isTimingMode) webgl.timer.mark('Canvas3D.render', true);
                 const ctx = { renderer, camera: cam, scene, helper };
                 if (MultiSamplePass.isEnabled(p.multiSample)) {
-                    const forceOn = !cameraChanged && markingUpdated && !controls.isAnimating;
+                    const forceOn = p.multiSample.reduceFlicker && !cameraChanged && markingUpdated && !controls.isAnimating;
                     multiSampleHelper.render(ctx, p, true, forceOn);
                 } else {
                     passes.draw.render(ctx, p, true);

+ 1 - 0
src/mol-canvas3d/passes/multi-sample.ts

@@ -53,6 +53,7 @@ function getComposeRenderable(ctx: WebGLContext, colorTexture: Texture): Compose
 export const MultiSampleParams = {
     mode: PD.Select('temporal', [['off', 'Off'], ['on', 'On'], ['temporal', 'Temporal']]),
     sampleLevel: PD.Numeric(2, { min: 0, max: 5, step: 1 }, { description: 'Take level^2 samples.' }),
+    reduceFlicker: PD.Boolean(true, { description: 'Reduce flicker in "temporal" mode.' }),
 };
 export type MultiSampleProps = PD.Values<typeof MultiSampleParams>
 

+ 3 - 3
src/mol-plugin/util/headless-screenshot.ts

@@ -24,7 +24,6 @@ import { PixelData } from '../../mol-util/image';
 import { InputObserver } from '../../mol-util/input/input-observer';
 import { ParamDefinition } from '../../mol-util/param-definition';
 
-
 export interface ExternalModules {
     'gl': typeof import('gl'),
     'jpeg-js'?: typeof import('jpeg-js'),
@@ -43,7 +42,6 @@ export type RawImageData = {
     height: number,
 }
 
-
 /** To render Canvas3D when running in Node.js (without DOM) */
 export class HeadlessScreenshotHelper {
     readonly canvas3d: Canvas3D;
@@ -168,6 +166,7 @@ export function defaultCanvas3DParams(): Partial<Canvas3DProps> {
             backgroundColor: ColorNames.white,
         },
         postprocessing: {
+            ...DefaultCanvas3DParams.renderer,
             occlusion: {
                 name: 'off', params: {}
             },
@@ -205,8 +204,9 @@ export function defaultImagePassParams(): Partial<ImageProps> {
             axes: { name: 'off', params: {} },
         },
         multiSample: {
+            ...DefaultCanvas3DParams.multiSample,
             mode: 'on',
-            sampleLevel: 4
+            sampleLevel: 4,
         }
     };
 }

+ 4 - 3
src/mol-plugin/util/viewport-screenshot.ts

@@ -105,7 +105,7 @@ class ViewportScreenshotHelper extends PluginComponent {
         }
     }
 
-    private createPass(mutlisample: boolean) {
+    private createPass(multisample: boolean) {
         const c = this.plugin.canvas3d!;
         const { colorBufferFloat, textureFloat } = c.webgl.extensions;
         const aoProps = c.props.postprocessing.occlusion;
@@ -113,8 +113,9 @@ class ViewportScreenshotHelper extends PluginComponent {
             transparentBackground: this.values.transparent,
             cameraHelper: { axes: this.values.axes },
             multiSample: {
-                mode: mutlisample ? 'on' : 'off',
-                sampleLevel: colorBufferFloat && textureFloat ? 4 : 2
+                ...c.props.multiSample,
+                mode: multisample ? 'on' : 'off',
+                sampleLevel: colorBufferFloat && textureFloat ? 4 : 2,
             },
             postprocessing: {
                 ...c.props.postprocessing,