QVTKOpenGLWidget - update() or GetRenderWindow()->Render()

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

QVTKOpenGLWidget - update() or GetRenderWindow()->Render()

Elvis Stansvik
Hi all,

I was looking over calls to Render() in our application, trying to replace them with update() which I think is a "nicer" way of requesting a re-render (?).

But it seems to not be a drop-in replacements since it seems sometimes update() doesn't cause a re-render (not even when control returns to the event loop).

So then I looked again at the docs for QVTKOpenGLWidget, and they say:

    "An alternative is to call update() on the widget instance to trigger a render once the context gets validated"

It was this that sort of guided me to try to use update() instead of Render().

But then I found e.g. this commit:


The commit message says: "QVTKOpenGLWidget now relies on VTK applications calling `Render` on the window when data or rendering has changed.".

So now I'm a little confused: What is the correct way to request a re-render once control returns to the event loop? Or must we always call Render()?

I'm talking now about the QVTKOpenGLWidget that is in 8.1.1, not the new one that is in master (though I guess the best practice should be the same for the two?).

Many thanks in advance,
Elvis

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
https://public.kitware.com/mailman/listinfo/vtkusers
Reply | Threaded
Open this post in threaded view
|

Re: QVTKOpenGLWidget - update() or GetRenderWindow()->Render()

Utkarsh Ayachit
Elvis,

The best practice is indeed to call Render() when data has changed.
While making QVTKOpenGLWidget (which is called QVTKOpenGLSimpleWidget
in master) do a `RenderWindow::Render` in paint may seem like a good
behavior (as we indeed did initially), it so happens that the paint
gets called way too frequently e.g. if a tooltip or a menu pops  up.
Doing these potentially expensive renders in each `paint` is not
necessary since QVTKOpenGLWidget caches the last rendered image and
can simply `blit` it to the active frame buffer to satisfy Qt. Hence
we opted to let the application decide when scene has truly changed
and call Render explicitly to indicate that.

Hope that clarifies things.

Utkarsh
On Tue, Jun 19, 2018 at 10:20 AM Elvis Stansvik
<[hidden email]> wrote:

>
> Hi all,
>
> I was looking over calls to Render() in our application, trying to replace them with update() which I think is a "nicer" way of requesting a re-render (?).
>
> But it seems to not be a drop-in replacements since it seems sometimes update() doesn't cause a re-render (not even when control returns to the event loop).
>
> So then I looked again at the docs for QVTKOpenGLWidget, and they say:
>
>     "An alternative is to call update() on the widget instance to trigger a render once the context gets validated"
>
> It was this that sort of guided me to try to use update() instead of Render().
>
> But then I found e.g. this commit:
>
>     "https://gitlab.kitware.com/vtk/vtk/commit/4c77c46025e737ad66e0b797a759e73d81c9f240"
>
> The commit message says: "QVTKOpenGLWidget now relies on VTK applications calling `Render` on the window when data or rendering has changed.".
>
> So now I'm a little confused: What is the correct way to request a re-render once control returns to the event loop? Or must we always call Render()?
>
> I'm talking now about the QVTKOpenGLWidget that is in 8.1.1, not the new one that is in master (though I guess the best practice should be the same for the two?).
>
> Many thanks in advance,
> Elvis
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>
> Search the list archives at: http://markmail.org/search/?q=vtkusers
>
> Follow this link to subscribe/unsubscribe:
> https://public.kitware.com/mailman/listinfo/vtkusers
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
https://public.kitware.com/mailman/listinfo/vtkusers
Reply | Threaded
Open this post in threaded view
|

Re: QVTKOpenGLWidget - update() or GetRenderWindow()->Render()

Andras Lasso
You can use CTK's ctkVTKAbstractView class to handle this. It has scheduleRender method, which you call any time something might have changed in your pipeline. Actual rendering will not happen more frequently than the specified maximumUpdateRate.

https://github.com/commontk/CTK/blob/master/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.h#L77 

Andras

-----Original Message-----
From: vtkusers <[hidden email]> On Behalf Of Utkarsh Ayachit
Sent: Tuesday, June 19, 2018 10:38 AM
To: Elvis Stansvik <[hidden email]>
Cc: vtk <[hidden email]>
Subject: Re: [vtkusers] QVTKOpenGLWidget - update() or GetRenderWindow()->Render()

Elvis,

The best practice is indeed to call Render() when data has changed.
While making QVTKOpenGLWidget (which is called QVTKOpenGLSimpleWidget in master) do a `RenderWindow::Render` in paint may seem like a good behavior (as we indeed did initially), it so happens that the paint gets called way too frequently e.g. if a tooltip or a menu pops  up.
Doing these potentially expensive renders in each `paint` is not necessary since QVTKOpenGLWidget caches the last rendered image and can simply `blit` it to the active frame buffer to satisfy Qt. Hence we opted to let the application decide when scene has truly changed and call Render explicitly to indicate that.

Hope that clarifies things.

Utkarsh
On Tue, Jun 19, 2018 at 10:20 AM Elvis Stansvik <[hidden email]> wrote:

>
> Hi all,
>
> I was looking over calls to Render() in our application, trying to replace them with update() which I think is a "nicer" way of requesting a re-render (?).
>
> But it seems to not be a drop-in replacements since it seems sometimes update() doesn't cause a re-render (not even when control returns to the event loop).
>
> So then I looked again at the docs for QVTKOpenGLWidget, and they say:
>
>     "An alternative is to call update() on the widget instance to trigger a render once the context gets validated"
>
> It was this that sort of guided me to try to use update() instead of Render().
>
> But then I found e.g. this commit:
>
>     "https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.kitware.com%2Fvtk%2Fvtk%2Fcommit%2F4c77c46025e737ad66e0b797a759e73d81c9f240&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=8m7aw0XcHhoXg5h%2BH%2FnywEEfXlSKd04Fc3%2F2wKRcaRc%3D&reserved=0"
>
> The commit message says: "QVTKOpenGLWidget now relies on VTK applications calling `Render` on the window when data or rendering has changed.".
>
> So now I'm a little confused: What is the correct way to request a re-render once control returns to the event loop? Or must we always call Render()?
>
> I'm talking now about the QVTKOpenGLWidget that is in 8.1.1, not the new one that is in master (though I guess the best practice should be the same for the two?).
>
> Many thanks in advance,
> Elvis
> _______________________________________________
> Powered by
> https://na01.safelinks.protection.outlook.com/?url=www.kitware.com&dat
> a=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd6
> 1ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=NuXp
> HHrNM9ouQUfibQdvb%2FvdHXbDdJt2gUMbKCwoQhU%3D&reserved=0
>
> Visit other Kitware open-source projects at
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.ki
> tware.com%2Fopensource%2Fopensource.html&data=02%7C01%7Classo%40queens
> u.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b
> 925c%7C1%7C0%7C636650159330792727&sdata=Xppm3uezu3nyaA9rf5IxxDqLMBeyBb
> 6nIrt%2FForVoBs%3D&reserved=0
>
> Please keep messages on-topic and check the VTK FAQ at:
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.vt
> k.org%2FWiki%2FVTK_FAQ&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57e
> e44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636
> 650159330792727&sdata=hhRnwdAr4eTN5Tidn%2FhjGoDj9REIazlvfVgW3V8uAPs%3D
> &reserved=0
>
> Search the list archives at:
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmarkma
> il.org%2Fsearch%2F%3Fq%3Dvtkusers&data=02%7C01%7Classo%40queensu.ca%7C
> 2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C
> 1%7C0%7C636650159330792727&sdata=xChSvX1Q%2BjBODVNNLWtCkFaoEdhSR1KeRIi
> MBCM%2Bm%2Bo%3D&reserved=0
>
> Follow this link to subscribe/unsubscribe:
> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpubli
> c.kitware.com%2Fmailman%2Flistinfo%2Fvtkusers&data=02%7C01%7Classo%40q
> ueensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb
> 2838b925c%7C1%7C0%7C636650159330792727&sdata=vjwoMbm%2BOqCgp4O%2F7h%2F
> JqtvqoSZWx%2FQwpot6Gqs%2BLiE%3D&reserved=0
_______________________________________________
Powered by https://na01.safelinks.protection.outlook.com/?url=www.kitware.com&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=NuXpHHrNM9ouQUfibQdvb%2FvdHXbDdJt2gUMbKCwoQhU%3D&reserved=0

Visit other Kitware open-source projects at https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.kitware.com%2Fopensource%2Fopensource.html&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=Xppm3uezu3nyaA9rf5IxxDqLMBeyBb6nIrt%2FForVoBs%3D&reserved=0

Please keep messages on-topic and check the VTK FAQ at: https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.vtk.org%2FWiki%2FVTK_FAQ&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=hhRnwdAr4eTN5Tidn%2FhjGoDj9REIazlvfVgW3V8uAPs%3D&reserved=0

Search the list archives at: https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmarkmail.org%2Fsearch%2F%3Fq%3Dvtkusers&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=xChSvX1Q%2BjBODVNNLWtCkFaoEdhSR1KeRIiMBCM%2Bm%2Bo%3D&reserved=0

Follow this link to subscribe/unsubscribe:
https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpublic.kitware.com%2Fmailman%2Flistinfo%2Fvtkusers&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=vjwoMbm%2BOqCgp4O%2F7h%2FJqtvqoSZWx%2FQwpot6Gqs%2BLiE%3D&reserved=0
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
https://public.kitware.com/mailman/listinfo/vtkusers
Reply | Threaded
Open this post in threaded view
|

Re: QVTKOpenGLWidget - update() or GetRenderWindow()->Render()

Elvis Stansvik
Aha, thank you both for the clarification/tip.

I had hoped that there was a way in VTK to request a re-render to occur once control returns to the Qt event loop, instead of the immediate Render().

That way an application could afford to be "sloppy" and request a re-render multiple times during the processing of a single event, but it would in the end only result in a single re-render.

The ITK help class I guess could help here, but I'm always weary of bringing in additional dependencies. Thanks for the tip though, we may end up using it.

My endeavour was not to solve any identified problems in our app. I just wrongly though that calling Render was discouraged in favor of update(), so was wondering why it didn't work.

I may go with the do nothing approach now that I know that Render is not bad per se.

Elvis

Den tis 19 juni 2018 17:32Andras Lasso <[hidden email]> skrev:
You can use CTK's ctkVTKAbstractView class to handle this. It has scheduleRender method, which you call any time something might have changed in your pipeline. Actual rendering will not happen more frequently than the specified maximumUpdateRate.

https://github.com/commontk/CTK/blob/master/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.h#L77

Andras

-----Original Message-----
From: vtkusers <[hidden email]> On Behalf Of Utkarsh Ayachit
Sent: Tuesday, June 19, 2018 10:38 AM
To: Elvis Stansvik <[hidden email]>
Cc: vtk <[hidden email]>
Subject: Re: [vtkusers] QVTKOpenGLWidget - update() or GetRenderWindow()->Render()

Elvis,

The best practice is indeed to call Render() when data has changed.
While making QVTKOpenGLWidget (which is called QVTKOpenGLSimpleWidget in master) do a `RenderWindow::Render` in paint may seem like a good behavior (as we indeed did initially), it so happens that the paint gets called way too frequently e.g. if a tooltip or a menu pops  up.
Doing these potentially expensive renders in each `paint` is not necessary since QVTKOpenGLWidget caches the last rendered image and can simply `blit` it to the active frame buffer to satisfy Qt. Hence we opted to let the application decide when scene has truly changed and call Render explicitly to indicate that.

Hope that clarifies things.

Utkarsh
On Tue, Jun 19, 2018 at 10:20 AM Elvis Stansvik <[hidden email]> wrote:
>
> Hi all,
>
> I was looking over calls to Render() in our application, trying to replace them with update() which I think is a "nicer" way of requesting a re-render (?).
>
> But it seems to not be a drop-in replacements since it seems sometimes update() doesn't cause a re-render (not even when control returns to the event loop).
>
> So then I looked again at the docs for QVTKOpenGLWidget, and they say:
>
>     "An alternative is to call update() on the widget instance to trigger a render once the context gets validated"
>
> It was this that sort of guided me to try to use update() instead of Render().
>
> But then I found e.g. this commit:
>
>     "https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.kitware.com%2Fvtk%2Fvtk%2Fcommit%2F4c77c46025e737ad66e0b797a759e73d81c9f240&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=8m7aw0XcHhoXg5h%2BH%2FnywEEfXlSKd04Fc3%2F2wKRcaRc%3D&reserved=0"
>
> The commit message says: "QVTKOpenGLWidget now relies on VTK applications calling `Render` on the window when data or rendering has changed.".
>
> So now I'm a little confused: What is the correct way to request a re-render once control returns to the event loop? Or must we always call Render()?
>
> I'm talking now about the QVTKOpenGLWidget that is in 8.1.1, not the new one that is in master (though I guess the best practice should be the same for the two?).
>
> Many thanks in advance,
> Elvis
> _______________________________________________
> Powered by
> https://na01.safelinks.protection.outlook.com/?url=www.kitware.com&dat
> a=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd6
> 1ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=NuXp
> HHrNM9ouQUfibQdvb%2FvdHXbDdJt2gUMbKCwoQhU%3D&reserved=0
>
> Visit other Kitware open-source projects at
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.ki
> tware.com%2Fopensource%2Fopensource.html&data=02%7C01%7Classo%40queens
> u.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b
> 925c%7C1%7C0%7C636650159330792727&sdata=Xppm3uezu3nyaA9rf5IxxDqLMBeyBb
> 6nIrt%2FForVoBs%3D&reserved=0
>
> Please keep messages on-topic and check the VTK FAQ at:
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.vt
> k.org%2FWiki%2FVTK_FAQ&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57e
> e44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636
> 650159330792727&sdata=hhRnwdAr4eTN5Tidn%2FhjGoDj9REIazlvfVgW3V8uAPs%3D
> &reserved=0
>
> Search the list archives at:
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmarkma
> il.org%2Fsearch%2F%3Fq%3Dvtkusers&data=02%7C01%7Classo%40queensu.ca%7C
> 2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C
> 1%7C0%7C636650159330792727&sdata=xChSvX1Q%2BjBODVNNLWtCkFaoEdhSR1KeRIi
> MBCM%2Bm%2Bo%3D&reserved=0
>
> Follow this link to subscribe/unsubscribe:
> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpubli
> c.kitware.com%2Fmailman%2Flistinfo%2Fvtkusers&data=02%7C01%7Classo%40q
> ueensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb
> 2838b925c%7C1%7C0%7C636650159330792727&sdata=vjwoMbm%2BOqCgp4O%2F7h%2F
> JqtvqoSZWx%2FQwpot6Gqs%2BLiE%3D&reserved=0
_______________________________________________
Powered by https://na01.safelinks.protection.outlook.com/?url=www.kitware.com&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=NuXpHHrNM9ouQUfibQdvb%2FvdHXbDdJt2gUMbKCwoQhU%3D&reserved=0

Visit other Kitware open-source projects at https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.kitware.com%2Fopensource%2Fopensource.html&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=Xppm3uezu3nyaA9rf5IxxDqLMBeyBb6nIrt%2FForVoBs%3D&reserved=0

Please keep messages on-topic and check the VTK FAQ at: https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.vtk.org%2FWiki%2FVTK_FAQ&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=hhRnwdAr4eTN5Tidn%2FhjGoDj9REIazlvfVgW3V8uAPs%3D&reserved=0

Search the list archives at: https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmarkmail.org%2Fsearch%2F%3Fq%3Dvtkusers&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=xChSvX1Q%2BjBODVNNLWtCkFaoEdhSR1KeRIiMBCM%2Bm%2Bo%3D&reserved=0

Follow this link to subscribe/unsubscribe:
https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpublic.kitware.com%2Fmailman%2Flistinfo%2Fvtkusers&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=vjwoMbm%2BOqCgp4O%2F7h%2FJqtvqoSZWx%2FQwpot6Gqs%2BLiE%3D&reserved=0

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
https://public.kitware.com/mailman/listinfo/vtkusers
Reply | Threaded
Open this post in threaded view
|

Re: QVTKOpenGLWidget - update() or GetRenderWindow()->Render()

Elvis Stansvik
Den tis 19 juni 2018 17:51Elvis Stansvik <[hidden email]> skrev:
Aha, thank you both for the clarification/tip.

I had hoped that there was a way in VTK to request a re-render to occur once control returns to the Qt event loop, instead of the immediate Render().

That way an application could afford to be "sloppy" and request a re-render multiple times during the processing of a single event, but it would in the end only result in a single re-render.

The ITK help class I guess could help

*CTK

Elvis 

here, but I'm always weary of bringing in additional dependencies. Thanks for the tip though, we may end up using it.

My endeavour was not to solve any identified problems in our app. I just wrongly though that calling Render was discouraged in favor of update(), so was wondering why it didn't work.

I may go with the do nothing approach now that I know that Render is not bad per se.

Elvis

Den tis 19 juni 2018 17:32Andras Lasso <[hidden email]> skrev:
You can use CTK's ctkVTKAbstractView class to handle this. It has scheduleRender method, which you call any time something might have changed in your pipeline. Actual rendering will not happen more frequently than the specified maximumUpdateRate.

https://github.com/commontk/CTK/blob/master/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.h#L77

Andras

-----Original Message-----
From: vtkusers <[hidden email]> On Behalf Of Utkarsh Ayachit
Sent: Tuesday, June 19, 2018 10:38 AM
To: Elvis Stansvik <[hidden email]>
Cc: vtk <[hidden email]>
Subject: Re: [vtkusers] QVTKOpenGLWidget - update() or GetRenderWindow()->Render()

Elvis,

The best practice is indeed to call Render() when data has changed.
While making QVTKOpenGLWidget (which is called QVTKOpenGLSimpleWidget in master) do a `RenderWindow::Render` in paint may seem like a good behavior (as we indeed did initially), it so happens that the paint gets called way too frequently e.g. if a tooltip or a menu pops  up.
Doing these potentially expensive renders in each `paint` is not necessary since QVTKOpenGLWidget caches the last rendered image and can simply `blit` it to the active frame buffer to satisfy Qt. Hence we opted to let the application decide when scene has truly changed and call Render explicitly to indicate that.

Hope that clarifies things.

Utkarsh
On Tue, Jun 19, 2018 at 10:20 AM Elvis Stansvik <[hidden email]> wrote:
>
> Hi all,
>
> I was looking over calls to Render() in our application, trying to replace them with update() which I think is a "nicer" way of requesting a re-render (?).
>
> But it seems to not be a drop-in replacements since it seems sometimes update() doesn't cause a re-render (not even when control returns to the event loop).
>
> So then I looked again at the docs for QVTKOpenGLWidget, and they say:
>
>     "An alternative is to call update() on the widget instance to trigger a render once the context gets validated"
>
> It was this that sort of guided me to try to use update() instead of Render().
>
> But then I found e.g. this commit:
>
>     "https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.kitware.com%2Fvtk%2Fvtk%2Fcommit%2F4c77c46025e737ad66e0b797a759e73d81c9f240&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=8m7aw0XcHhoXg5h%2BH%2FnywEEfXlSKd04Fc3%2F2wKRcaRc%3D&reserved=0"
>
> The commit message says: "QVTKOpenGLWidget now relies on VTK applications calling `Render` on the window when data or rendering has changed.".
>
> So now I'm a little confused: What is the correct way to request a re-render once control returns to the event loop? Or must we always call Render()?
>
> I'm talking now about the QVTKOpenGLWidget that is in 8.1.1, not the new one that is in master (though I guess the best practice should be the same for the two?).
>
> Many thanks in advance,
> Elvis
> _______________________________________________
> Powered by
> https://na01.safelinks.protection.outlook.com/?url=www.kitware.com&dat
> a=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd6
> 1ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=NuXp
> HHrNM9ouQUfibQdvb%2FvdHXbDdJt2gUMbKCwoQhU%3D&reserved=0
>
> Visit other Kitware open-source projects at
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.ki
> tware.com%2Fopensource%2Fopensource.html&data=02%7C01%7Classo%40queens
> u.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b
> 925c%7C1%7C0%7C636650159330792727&sdata=Xppm3uezu3nyaA9rf5IxxDqLMBeyBb
> 6nIrt%2FForVoBs%3D&reserved=0
>
> Please keep messages on-topic and check the VTK FAQ at:
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.vt
> k.org%2FWiki%2FVTK_FAQ&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57e
> e44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636
> 650159330792727&sdata=hhRnwdAr4eTN5Tidn%2FhjGoDj9REIazlvfVgW3V8uAPs%3D
> &reserved=0
>
> Search the list archives at:
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmarkma
> il.org%2Fsearch%2F%3Fq%3Dvtkusers&data=02%7C01%7Classo%40queensu.ca%7C
> 2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C
> 1%7C0%7C636650159330792727&sdata=xChSvX1Q%2BjBODVNNLWtCkFaoEdhSR1KeRIi
> MBCM%2Bm%2Bo%3D&reserved=0
>
> Follow this link to subscribe/unsubscribe:
> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpubli
> c.kitware.com%2Fmailman%2Flistinfo%2Fvtkusers&data=02%7C01%7Classo%40q
> ueensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb
> 2838b925c%7C1%7C0%7C636650159330792727&sdata=vjwoMbm%2BOqCgp4O%2F7h%2F
> JqtvqoSZWx%2FQwpot6Gqs%2BLiE%3D&reserved=0
_______________________________________________
Powered by https://na01.safelinks.protection.outlook.com/?url=www.kitware.com&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=NuXpHHrNM9ouQUfibQdvb%2FvdHXbDdJt2gUMbKCwoQhU%3D&reserved=0

Visit other Kitware open-source projects at https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.kitware.com%2Fopensource%2Fopensource.html&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=Xppm3uezu3nyaA9rf5IxxDqLMBeyBb6nIrt%2FForVoBs%3D&reserved=0

Please keep messages on-topic and check the VTK FAQ at: https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.vtk.org%2FWiki%2FVTK_FAQ&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=hhRnwdAr4eTN5Tidn%2FhjGoDj9REIazlvfVgW3V8uAPs%3D&reserved=0

Search the list archives at: https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmarkmail.org%2Fsearch%2F%3Fq%3Dvtkusers&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=xChSvX1Q%2BjBODVNNLWtCkFaoEdhSR1KeRIiMBCM%2Bm%2Bo%3D&reserved=0

Follow this link to subscribe/unsubscribe:
https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpublic.kitware.com%2Fmailman%2Flistinfo%2Fvtkusers&data=02%7C01%7Classo%40queensu.ca%7C2c47a8aa57ee44de212b08d5d5f25ffa%7Cd61ecb3b38b142d582c4efb2838b925c%7C1%7C0%7C636650159330792727&sdata=vjwoMbm%2BOqCgp4O%2F7h%2FJqtvqoSZWx%2FQwpot6Gqs%2BLiE%3D&reserved=0

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
https://public.kitware.com/mailman/listinfo/vtkusers