Browse Source

improve Canvas3DContext types

Alexander Rose 1 year ago
parent
commit
c2217829a3

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

@@ -107,13 +107,13 @@ export { Canvas3DContext };
 
 /** Can be used to create multiple Canvas3D objects */
 interface Canvas3DContext {
-    readonly canvas: HTMLCanvasElement
+    readonly canvas?: HTMLCanvasElement
     readonly webgl: WebGLContext
     readonly input: InputObserver
     readonly passes: Passes
     readonly attribs: Readonly<Canvas3DContext.Attribs>
-    readonly contextLost: BehaviorSubject<now.Timestamp>
-    readonly contextRestored: BehaviorSubject<now.Timestamp>
+    readonly contextLost?: BehaviorSubject<now.Timestamp>
+    readonly contextRestored?: BehaviorSubject<now.Timestamp>
     readonly assetManager: AssetManager
     dispose: (options?: Partial<{ doNotForceWebGLContextLoss: boolean }>) => void
 }

+ 1 - 1
src/mol-plugin/behavior/dynamic/camera.ts

@@ -213,7 +213,7 @@ export const CameraControls = PluginBehavior.create<CameraControlsProps>({
                         trackball: { flyMode }
                     });
 
-                    if (this.ctx.canvas3dContext) {
+                    if (this.ctx.canvas3dContext?.canvas) {
                         this.ctx.canvas3dContext.canvas.style.cursor = flyMode ? 'crosshair' : 'unset';
                     }
                 }

+ 7 - 2
src/mol-plugin/util/headless-screenshot.ts

@@ -57,8 +57,13 @@ export class HeadlessScreenshotHelper {
             const webgl = createContext(glContext);
             const input = InputObserver.create();
             const attribs = { ...Canvas3DContext.DefaultAttribs };
-            const passes = new Passes(webgl, new AssetManager(), attribs);
-            this.canvas3d = Canvas3D.create({ webgl, input, passes, attribs } as Canvas3DContext, options?.canvas ?? defaultCanvas3DParams());
+            const assetManager = new AssetManager();
+            const passes = new Passes(webgl, assetManager, attribs);
+            const dispose = () => {
+                input.dispose();
+                webgl.destroy();
+            };
+            this.canvas3d = Canvas3D.create({ webgl, input, passes, attribs, assetManager, dispose }, options?.canvas ?? defaultCanvas3DParams());
         }
 
         this.imagePass = this.canvas3d.getImagePass(options?.imagePass ?? defaultImagePassParams());