# Not work well restoreContext() on vtkOpenGLRenderWindow

**URL:** https://discourse.vtk.org/t/not-work-well-restorecontext-on-vtkopenglrenderwindow/8459
**Category:** Web
**Created:** [May 10, 2022, 8:32am UTC](https://discourse.vtk.org/t/not-work-well-restorecontext-on-vtkopenglrenderwindow/8459 "2022-05-10T08:32:59Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![cmoh](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/c/91b2a8/32.png) [@cmoh](https://discourse.vtk.org/u/cmoh)
#### Post date: [May 10, 2022, 8:32am UTC](https://discourse.vtk.org/t/not-work-well-restorecontext-on-vtkopenglrenderwindow/8459/1 "2022-05-10T08:32:59Z")

</div>

I already know that when I lose WebGL context, there is context restore eventListener and it handle restore process internally(by call vtkOpenGLRenderWindow.restoreContext()).

But I have received some warning message like below and there is no restored object in vtkRenderWindow.

 ![image](https://discourse.vtk.org/uploads/default/original/2X/8/81053d7674469f0d5376028e1be60065e620310c.png)

Is this expected result?

Then, how can I restore objects that have added to renderer.

---

<div class="post-metadata">

### Author: ![Forrest](https://discourse.vtk.org/user_avatar/discourse.vtk.org/forrest/32/300_2.png) [@Forrest](https://discourse.vtk.org/u/Forrest)
#### Post date: [May 10, 2022, 2:46pm UTC](https://discourse.vtk.org/t/not-work-well-restorecontext-on-vtkopenglrenderwindow/8459/2 "2022-05-10T14:46:51Z")

</div>

@ken-martin can you comment on this? We may not be fully restoring/resetting everything after the context restore event.

Under what scenario are you bumping up against losing your webgl contexts?

---

<div class="post-metadata">

### Author: ![cmoh](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/c/91b2a8/32.png) [@cmoh](https://discourse.vtk.org/u/cmoh)
#### Post date: [May 12, 2022, 6:47am UTC](https://discourse.vtk.org/t/not-work-well-restorecontext-on-vtkopenglrenderwindow/8459/3 "2022-05-12T06:47:52Z")

</div>

I tested using WebGL’s ‘WEBGL\_lose\_context’ extension.

---

<div class="post-metadata">

### Author: ![Forrest](https://discourse.vtk.org/user_avatar/discourse.vtk.org/forrest/32/300_2.png) [@Forrest](https://discourse.vtk.org/u/Forrest)
#### Post date: [May 12, 2022, 2:18pm UTC](https://discourse.vtk.org/t/not-work-well-restorecontext-on-vtkopenglrenderwindow/8459/4 "2022-05-12T14:18:12Z")

</div>

The errors definitely point to objects being bound to the old context. I don’t know how extensively restoreContext was tested.

---

<div class="post-metadata">

### Author: ![cmoh](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/c/91b2a8/32.png) [@cmoh](https://discourse.vtk.org/u/cmoh)
#### Post date: [May 13, 2022, 1:24am UTC](https://discourse.vtk.org/t/not-work-well-restorecontext-on-vtkopenglrenderwindow/8459/5 "2022-05-13T01:24:12Z")

</div>

Let me show you the code I tested.  
My test code very simple.  
just one cone was added to renderer.  
And I call loseContext() and call restoreContext() after 3 seconds.

```auto
var fullScreenRenderer = vtkFullScreenRenderWindow.newInstance();
var actor = vtkActor.newInstance();
var mapper = vtkMapper.newInstance();
var cone = vtkConeSource.newInstance();
actor.setMapper(mapper);
mapper.setInputConnection(cone.getOutputPort());

var renderer = fullScreenRenderer.getRenderer();
renderer.addActor(actor);
renderer.resetCamera();

var renderWindow = fullScreenRenderer.getRenderWindow();
renderWindow.render();

let originContext, restoredContext;
originContext = fullScreenRenderer.getApiSpecificRenderWindow().getContext();
        
const ext = originContext.getExtension('WEBGL_lose_context');
ext.loseContext();

setTimeout(() => {
    ext.restoreContext();
}, 3000);

```

Is there something wrong with my code?

---

<div class="post-metadata">

### Author: ![cmoh](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/c/91b2a8/32.png) [@cmoh](https://discourse.vtk.org/u/cmoh)
#### Post date: [May 17, 2022, 2:16am UTC](https://discourse.vtk.org/t/not-work-well-restorecontext-on-vtkopenglrenderwindow/8459/6 "2022-05-17T02:16:05Z")

</div>

Incidentally, I was expecting cones that disappeared from renderer after loseContext() to reappear in restoreContext() but they didn’t.

---

<div class="post-metadata">

### Author: ![Forrest](https://discourse.vtk.org/user_avatar/discourse.vtk.org/forrest/32/300_2.png) [@Forrest](https://discourse.vtk.org/u/Forrest)
#### Post date: [May 18, 2022, 3:13pm UTC](https://discourse.vtk.org/t/not-work-well-restorecontext-on-vtkopenglrenderwindow/8459/7 "2022-05-18T15:13:26Z")

</div>

This looks to be like a bug in vtk.js. Restoring the context should restore the rendering pipeline. Please log an issue on the [vtk.js issue tracker](https://github.com/Kitware/vtk-js/issues).

---

<div class="post-metadata">

### Author: ![cmoh](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/c/91b2a8/32.png) [@cmoh](https://discourse.vtk.org/u/cmoh)
#### Post date: [May 19, 2022, 2:19am UTC](https://discourse.vtk.org/t/not-work-well-restorecontext-on-vtkopenglrenderwindow/8459/8 "2022-05-19T02:19:24Z")

</div>

Thanks for your reply.  
I reported it to the vtk.js issue tracker, so please refer to it.

> <https://github.com/Kitware/vtk-js/issues/2425>
>
> \<!--
> 👋 Hello, and thank you for starting this contribution!
> ❓ If you are tryin…g to submit a question for general support, please reach out on our discourse forum instead: https://discourse.vtk.org/c/web/9
> 🐞 If you do need to report a bug, please follow the template below to increase the chances of your report being looked at.
> 🧱 If adequate, assign one of the \`Module: XXX\` labels to your issue when creating it.
> \--\>
> 
> \### High-level description
> Context restore was simulated after context lose using '\[WEBGL\_lose\_context\](https://developer.mozilla.org/en-US/docs/Web/API/WEBGL\_lose\_context)' extension, but it was not properly restored.
> 
> \### Steps to reproduce
> \- Run the code below:
> \`\`\`js
> var fullScreenRenderer = vtkFullScreenRenderWindow.newInstance();
> var actor = vtkActor.newInstance();
> var mapper = vtkMapper.newInstance();
> var cone = vtkConeSource.newInstance();
> actor.setMapper(mapper);
> mapper.setInputConnection(cone.getOutputPort());
> 
> var renderer = fullScreenRenderer.getRenderer();
> renderer.addActor(actor);
> renderer.resetCamera();
> 
> var renderWindow = fullScreenRenderer.getRenderWindow();
> renderWindow.render();
> 
> let originContext, restoredContext;
> originContext = fullScreenRenderer.getApiSpecificRenderWindow().getContext();
>         
> const ext = originContext.getExtension('WEBGL\_lose\_context');
> ext.loseContext();
> 
> setTimeout(() =\> {
> ext.restoreContext();
> }, 3000);
> \`\`\`
> 
> \### Detailed behavior
> The screen is not restored and warning message appears as shown below.
> !\[image\](https://user-images.githubusercontent.com/3060262/169188176-a0695c82-8706-4fc5-815c-024ddd4985b1.png)
> 
> \### Expected behavior
> The cone should be redrawn on the screen as shown below.
> !\[image\](https://user-images.githubusercontent.com/3060262/169188398-2434941a-f27c-47db-bd74-3b9cc55c5a3e.png)
> 
> \### Environment
> \- \*\*vtk.js\*\*: 24.12.1
> \- \*\*OS\*\*: Windows 10
> \- \*\*Browser\*\*: Chrome 101.0.4951.54
