From 07f351888f8b6632c55f15d98b9740381309de51 Mon Sep 17 00:00:00 2001
From: dsehnal <david.sehnal@gmail.com>
Date: Sun, 17 Jan 2021 11:15:15 +0100
Subject: [PATCH] add doNotForceWebGLContextLoss option

---
 src/mol-canvas3d/canvas3d.ts | 6 +++---
 src/mol-plugin/context.ts    | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts
index 9176c5338..b04242f6f 100644
--- a/src/mol-canvas3d/canvas3d.ts
+++ b/src/mol-canvas3d/canvas3d.ts
@@ -135,7 +135,7 @@ interface Canvas3D {
     readonly stats: RendererStats
     readonly interaction: Canvas3dInteractionHelper['events']
 
-    dispose(): void
+    dispose(options?: { doNotForceWebGLContextLoss?: boolean }): void
 }
 
 const requestAnimationFrame = typeof window !== 'undefined'
@@ -705,7 +705,7 @@ namespace Canvas3D {
             get interaction() {
                 return interactionHelper.events;
             },
-            dispose: () => {
+            dispose: (options?: { doNotForceWebGLContextLoss?: boolean }) => {
                 contextRestoredSub.unsubscribe();
 
                 scene.clear();
@@ -715,7 +715,7 @@ namespace Canvas3D {
                 renderer.dispose();
                 interactionHelper.dispose();
 
-                gl.getExtension('WEBGL_lose_context')?.loseContext();
+                if (!options?.doNotForceWebGLContextLoss) gl.getExtension('WEBGL_lose_context')?.loseContext();
             }
         };
 
diff --git a/src/mol-plugin/context.ts b/src/mol-plugin/context.ts
index cc94a312f..1d785a6c9 100644
--- a/src/mol-plugin/context.ts
+++ b/src/mol-plugin/context.ts
@@ -256,10 +256,10 @@ export class PluginContext {
         return PluginCommands.State.RemoveObject(this, { state: this.state.data, ref: StateTransform.RootRef });
     }
 
-    dispose() {
+    dispose(options?: { doNotForceWebGLContextLoss?: boolean }) {
         if (this.disposed) return;
         this.commands.dispose();
-        this.canvas3d?.dispose();
+        this.canvas3d?.dispose(options);
         this.ev.dispose();
         this.state.dispose();
         this.managers.task.dispose();
-- 
GitLab