Selaa lähdekoodia

Canvas3d: tick manualDraw option

David Sehnal 4 vuotta sitten
vanhempi
commit
96aff39272

+ 1 - 1
src/extensions/mp4-export/encoder.ts

@@ -54,7 +54,7 @@ export class Mp4Encoder {
         for (let i = 0; i < N; i++) {
 
             const t = i * dt;
-            await loop.tick(t, true);
+            await loop.tick(t, { isSynchronous: true, manualDraw: true });
 
             const image = pass.getImageData(w, h);
             if (i === 0) canvasCtx.putImageData(image, 0, 0);

+ 7 - 3
src/mol-canvas3d/canvas3d.ts

@@ -100,7 +100,7 @@ interface Canvas3D {
      * Funcion for external "animation" control
      * Calls commit.
      */
-    tick(t: now.Timestamp, isSynchronous?: boolean): void
+    tick(t: now.Timestamp, options?: { isSynchronous?: boolean, manualDraw?: boolean }): void
     update(repr?: Representation.Any, keepBoundingSphere?: boolean): void
     clear(): void
     syncVisibility(): void
@@ -330,11 +330,15 @@ namespace Canvas3D {
 
         let animationFrameHandle = 0;
 
-        function tick(t: now.Timestamp, isSynchronous?: boolean) {
+        function tick(t: now.Timestamp, options?: { isSynchronous?: boolean, manualDraw?: boolean }) {
             currentTime = t;
-            commit(isSynchronous);
+            commit(options?.isSynchronous);
             camera.transition.tick(currentTime);
 
+            if (options?.manualDraw) {
+                return;
+            }
+
             draw(false);
             if (!camera.transition.inTransition && !webgl.isContextLost) {
                 interactionHelper.tick(currentTime);

+ 4 - 4
src/mol-plugin/animation-loop.ts

@@ -11,13 +11,13 @@ export class PluginAnimationLoop {
     private currentFrame: any = void 0;
     private _isAnimating = false;
 
-    tick(t: number, isSynchronous?: boolean) {
-        this.plugin.canvas3d?.tick(t as now.Timestamp, isSynchronous);
-        return this.plugin.managers.animation.tick(t, isSynchronous);
+    tick(t: number, options?: { isSynchronous?: boolean, manualDraw?: boolean }) {
+        this.plugin.canvas3d?.tick(t as now.Timestamp, options);
+        return this.plugin.managers.animation.tick(t, options?.isSynchronous);
     }
 
     private frame = () => {
-        this.tick(now(), false);
+        this.tick(now());
         if (this._isAnimating) {
             this.currentFrame = requestAnimationFrame(this.frame);
         }