Просмотр исходного кода

Canvas3d: tick manualDraw option

David Sehnal 4 лет назад
Родитель
Сommit
96aff39272
3 измененных файлов с 12 добавлено и 8 удалено
  1. 1 1
      src/extensions/mp4-export/encoder.ts
  2. 7 3
      src/mol-canvas3d/canvas3d.ts
  3. 4 4
      src/mol-plugin/animation-loop.ts

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

@@ -54,7 +54,7 @@ export class Mp4Encoder {
         for (let i = 0; i < N; i++) {
         for (let i = 0; i < N; i++) {
 
 
             const t = i * dt;
             const t = i * dt;
-            await loop.tick(t, true);
+            await loop.tick(t, { isSynchronous: true, manualDraw: true });
 
 
             const image = pass.getImageData(w, h);
             const image = pass.getImageData(w, h);
             if (i === 0) canvasCtx.putImageData(image, 0, 0);
             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
      * Funcion for external "animation" control
      * Calls commit.
      * 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
     update(repr?: Representation.Any, keepBoundingSphere?: boolean): void
     clear(): void
     clear(): void
     syncVisibility(): void
     syncVisibility(): void
@@ -330,11 +330,15 @@ namespace Canvas3D {
 
 
         let animationFrameHandle = 0;
         let animationFrameHandle = 0;
 
 
-        function tick(t: now.Timestamp, isSynchronous?: boolean) {
+        function tick(t: now.Timestamp, options?: { isSynchronous?: boolean, manualDraw?: boolean }) {
             currentTime = t;
             currentTime = t;
-            commit(isSynchronous);
+            commit(options?.isSynchronous);
             camera.transition.tick(currentTime);
             camera.transition.tick(currentTime);
 
 
+            if (options?.manualDraw) {
+                return;
+            }
+
             draw(false);
             draw(false);
             if (!camera.transition.inTransition && !webgl.isContextLost) {
             if (!camera.transition.inTransition && !webgl.isContextLost) {
                 interactionHelper.tick(currentTime);
                 interactionHelper.tick(currentTime);

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

@@ -11,13 +11,13 @@ export class PluginAnimationLoop {
     private currentFrame: any = void 0;
     private currentFrame: any = void 0;
     private _isAnimating = false;
     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 = () => {
     private frame = () => {
-        this.tick(now(), false);
+        this.tick(now());
         if (this._isAnimating) {
         if (this._isAnimating) {
             this.currentFrame = requestAnimationFrame(this.frame);
             this.currentFrame = requestAnimationFrame(this.frame);
         }
         }