Hi Glenn,
Sebastian, here is my understanding.

StateSets and Drawables must be marked as DYNAMIC is you plan to change them. That's because they are used by the rendering stage, which can overlap the next frame's update.
Okay, thank you for your insights.

Everything else (scene graph structure, etc.) is safe to change during the Update traversal/callbacks.

Hope this helps.
Okay, there is some idea growing, how to get the maximum out of my use case.

Glenn Waldron

On Fri, Oct 23, 2015 at 1:07 PM, Sebastian Messerschmidt <[email protected] <mailto:[email protected]>> wrote:

    Hi Robert,

    Thanks for the explanation. I'm still puzzled by the question
    which elements can be updated in the update-phase without setting
    them to dynamic. I always was under the impression, that the
    update is performed before cull/draw are actually executed.
    Right now I need some thread safe "time slot" to change the scene
    graph in terms of inserting nodes, updating transforms etc. I
    guess it is totally okay to do this in the update callback/operation.
    But for changes to images, text, an arrays of drawables I need to
    set them to DYNAMIC if I understood you correctly. So basically
    what I got is, that I could put the draw of those elements as far
    to beginning of the draw as possible.

    As for the double buffering: Can it be done at drawable level?
    Like swapping the front/back drawable back and forth, effectively
    doubling the geometry/image space needed?

    Cheers
    Sebastian
    Hi Robert,

    On 23 October 2015 at 12:36, Robert Milharcic
    <[email protected]
    <mailto:[email protected]>> wrote:

        First of all, I didn't know that cull and draw traversal can
        execute in parallel on a single scene. I always thought that
        cull and draw can only execute sequential (serial) in all
        available threading models. Anyway,  what I know for sure is
        that update and draw traversal can indeed execute in parallel
        within some threading models, and that is the reason why we
        need DYNAMIC variance, to tell drawing thread it must process
        dynamic elements first, and then immediately allow execution
        of the update traversal in a main thread while STATIC
        elements are still being rendered in a draw thread. I also
        suspect that next frame cannot start before all the
        static+dynamic elements are rendered. If I'm correct on this
        one, then few DYNAMIC elements should not affect frame rate
        at all, because there is plenty of time to do the processing
        while STATIC elements are still being rendered.


    With the DrawThreadPerContext and
    DrawThreadPerContextCullThreadPerCamera threading models the
    static part of the rendering can be done in parallel with the
    next frame.  You guess this correct.

    The one thing I'd add is that the OSG itself doesn't attempt to
    sort DYNAMIC objects so that are drawn first.  You can set up
    your StateSet::RenderBinDetails to force the dynamic objects to
    be drawn first, but you can only do this for objects that don't
    affect the rendering of other objects, or are affected by what is
    the fame buffer already.

    In the case of text it has to be placed in the depth sorted bin
    which is drawn after the main opaque bin, so if there are text
    objects set to DYNAMIC then you stop the next frame from start
    till the end of dispatch of the last depth sorted dynamic
    object.  This may well be very near the end of the draw dispatch
    so you come pretty close to nullifying all the capacity for
    running the draw thread in parallel with the next frames' update
    and cull traversals. This is likely the situation for Sebastian.

    Using double buffering of Text object's is probably the best way
    to avoid updating a Text object while it's being drawn, allowing
    the Text DataVariance to remain STATIC. Such double buffering
    could be done a custom Node that has two Text objects, one for
    current frame being updated, and one for the previous frame still
    being rendered.

    Robert.




    _______________________________________________
    osg-users mailing list
    [email protected]  
<mailto:[email protected]>
    http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


    _______________________________________________
    osg-users mailing list
    [email protected]
    <mailto:[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

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to