MantisBT - ParaView
View Issue Details
0003924ParaView(No Category)public2006-10-11 14:342016-08-12 09:57
Ken Moreland 
Utkarsh Ayachit 
normalmajoralways
closedmoved 
 
 
0003924: Render Window images need to be cached
I have noticed that when one of the render windows needs to be updated but none of the view parameters changed, a full rerender is performed. This occurs, for example, when one of the docable windows or a window from another application is dragged over the display. This can cause the whole window system to slow down.

Rather than redraw the image, the last rendered image should be cached and redrawn over the window. The QVTKWidget already has this ability. We just need to enable it.
No tags attached.
txt patch.txt (2,066) 1969-12-31 19:00
https://www.vtk.org/Bug/file/5737/patch.txt
Issue History
2007-08-13 14:13Berk GeveciNote Deleted: 0008176
2007-08-13 14:19Berk GeveciPriorityhigh => normal
2007-08-13 14:19Berk GeveciStatusbacklog => tabled
2008-04-07 12:01Berk GeveciNote Added: 0011097
2008-04-07 12:01Berk GeveciAssigned ToBerk Geveci => Ken Moreland
2008-04-07 12:01Berk GeveciCategory => 3.4
2008-04-07 12:09Clinton StimpsonNote Added: 0011098
2008-04-14 14:23Ken MorelandCategory3.4 => 3.6
2009-02-16 14:40Ken MorelandCategory3.6 => 3.8
2009-05-13 13:42Utkarsh AyachitTarget Version => 3.8
2010-12-10 13:43Dave DeMarleAssigned ToKen Moreland => Utkarsh Ayachit
2010-12-10 13:43Dave DeMarleStatustabled => @20@
2011-06-16 13:10Zack GalbreathCategory => (No Category)
2016-08-12 09:57Kitware RobotNote Added: 0037503
2016-08-12 09:57Kitware RobotStatusexpired => closed
2016-08-12 09:57Kitware RobotResolutionreopened => moved

Notes
(0005368)
Berk Geveci   
2006-10-12 10:35   
Do this in November if easy. Otherwise, we may postpone it to later.
(0005464)
Clinton Stimpson   
2006-10-18 18:52   
/cvsroot/ParaView3/ParaView3/Qt/Core/pqRenderModule.cxx,v <-- pqRenderModule.cxx
new revision: 1.17; previous revision: 1.16

Fixed (one liner)
(0005465)
Clinton Stimpson   
2006-10-18 18:56   
backed out. QVTKWidget has an issue.
(0005585)
Clinton Stimpson   
2006-10-27 19:01   
Fixing bug 3995 will allow us to turn this image caching on and have it work correctly on X11.

I guess it already works fine on Windows & Mac.
(0005682)
Clinton Stimpson   
2006-11-08 16:14   
Looked into this some more....
And did some measurements on it in the context of ParaView3.
For a test case I did, I got a real low 5% cache hit rate. It is saving lots of images during interaction that end up getting thrown away.

And sometimes when the cache is reused, the image is too old, and we get incorrect results. For example, in the display panel, I hit the checkbox to toggle the visibility, and the screen remains unchanged because it reused the cache.

In ParaView3, we prefer QVTKWidget::update() over vtkRenderWindow::Render() for performance reasons. If vtkRenderWindow::Render() were called instead, the cache would always be correct, but we'd never re-use the cache because re-using it is handled by the QVTKWidget. If we called QVTKWidget::paintEvent(), the cache is re-used, but it the image may be too old.

We need to do some re-thinking here.
(0005687)
Clinton Stimpson   
2006-11-09 14:47   
just so I remember, attached is patch.txt which checks the MTime of the renderers for modifications. That works fine for tracking some model modifications. But the cache is still incorrectly reused when the visibility of a source is changed.
(0005723)
Clinton Stimpson   
2006-11-15 14:51   
Ok, finally fixed.

/cvsroot/ParaView3/ParaView3/Qt/Core/pqRenderModule.cxx,v <-- pqRenderModule.cxx
new revision: 1.20; previous revision: 1.19

QVTKWidget needs help knowing when the cache is dirty.
(0005744)
Ken Moreland   
2006-11-20 15:24   
This almost works. There is one issue I found on my Windows machine where if another window happens to be over the render window when the render occurs, that window is grabbed in the image cache.

This is easy to replicate. Un-dock one of the dockable windows and place it over the view. Then move the camera to make a new render. Now move the dockable window a bit. You will see it still drawn in the old location.
(0005745)
Clinton Stimpson   
2006-11-20 16:49   
I don't know how to fix that. Qt or VTK don't give me the information necessary to know whether the image saved is partly occuluded.
A render server should have an unoccluded image. Can we just have the render server or server manager put the image back?
(0007267)
Berk Geveci   
2007-04-13 08:56   
I enabled this feature on OS X. It works there because OpenGL buffers are always valid even when they are rendered behind a window. We can also get this working well if:
* Compositing is on and we cache the image before putting it on screen
* Hardware accelerated offscreen rendering is supported (framebuffers) and we always render still frames offscreen and paste as texture
* Compiled with offscreen Mesa

We should probably turn caching off for all other cases.
(0011097)
Berk Geveci   
2008-04-07 12:01   
Ken,

Can you create a detailed design document on things we want caching to accomplish? We will reevaluate in the future.

(0011098)
Clinton Stimpson   
2008-04-07 12:09   
I thought it was a way to take a shortcut when getting an expose event from the window system (the scene doesn't change).
Above, the feature was enabled on OS X, which I think is redundent because OS X doesn't produce expose events. The Window manager does caching already for us.
(0037503)
Kitware Robot   
2016-08-12 09:57   
Resolving issue as `moved`.

This issue tracker is no longer used. Further discussion of this issue may take place in the current ParaView Issues page linked in the banner at the top of this page.