Thanks Robert for the detailed answer, I see the point of incremental
compilation now but for my particular
use case where I basically load everything at the beginning (but hide some
things from the camera) I think
my magic wand still is this "Performer parading trick". I'm happy to break
many frames as long as I can make it
happen in the beginning, so compile time is not a major issue here.

I just did some initial "parade tests" and I can confirm the stalls are
gone now so it seems to work out great.

Still this solution is a bit hacky, so if Carl or somebody else proceeds
with the incremental path I'm curios to see an
example of how complex it gets.

/Per


On 2 September 2014 16:02, Robert Osfield <[email protected]> wrote:

> Hi Per,
>
>
> On 2 September 2014 14:18, Per Nordqvist <[email protected]> wrote:
>
>>
>> Thanks guys for the answers! I guess it's OK to take a hit at the
>> beginning if things run smoothly afterwards,
>> so I don't think I need a incremental compilation.
>>
>> Based on your answers I found a similar question here
>> http://forum.openscenegraph.org/viewtopic.php?t=4997
>>
>> So I tried this:
>>   osgViewer::Renderer* renderer =
>>
>> dynamic_cast<osgViewer::Renderer*>(viewer->getCamera()->getRenderer());
>>   renderer->setCompileOnNextDraw(true);
>>
>>
> This simply runs the GLObjectVisitor on the next frame to run GL object
> compile on objects in scene graph, which, if you have lots of new GL
> objects to be compiled will result in a frame stall.
>
> which is promising beacuse it creates exactly the same stall that I was
>> seeing before.
>>
>
> Best case is setCompileOnNextDraw(true) will perform the same as just
> rendering it without if everything is on screen, if some elements would
> otherwise be culled the frame time will actually be longer as all the GL
> objects that need to be compiled will be compiled at the same time.  The
> advantage comes in subsequent frames as no new objects will enter the view
> frustum and then have to be compiled.
>
> However, if I have hidden objects under a switch or if it's outside the
>> frustum, I still see a recompilation
>> triggered automatically once it is in the frustum and visible under the
>> switch.
>> So how to compile the _entire_ scene?
>>
>
> You need to slow down and understand the basic mechanics of what is going
> on.  The OSG has lots of features to help with these issues but it's an
> advanced topic with no magic wand so best take bit by bit.
>
> Part of the solution will be use of the
> ogUtil::IncrementalCompileOperation as it designed to load balance the
> number of GL compilations and deletes that happen each frame so that no one
> frame gets overload and causes a frame break. The OSG's DatabasePager
> utilizes the ogUtil::IncrementCompileOperation to avoid frame breaks, and
> osgViewer::Viewer/CompositeViewer have support for
> IncrementalCompileOperation built in, so the infrastructure is all there
> waiting to be utilized.
>
> When you incremental compile objects you have to submit a subgraph to be
> compiled and this is done by bit until all parts are compiled and when they
> are these subgraphs are placed in a ready to be merged list, you can also
> get a callback to get informed that a subgraph is ready.  There are lots of
> controls in the IncrementalCompileOperation to tune how quickly GL objects
> get compiled - you can balance the speed of compilation vs the risk of
> breaking frame.
>
> Another part of the work to make this efficient is make sure that the GL
> objects in the scene graph are efficient to compile.  Various drivers have
> different strengths and weakness so what might be slow on one
> driver/hardware might be fast on another.  There are however general
> rules.  For instance generating of texture mipmaps can be a bottleneck so
> precomputing mipmaps and storing them on disk can help, compressing imagery
> in an OpenGL native compression format can also be very helpful.
>
> Robert.
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to