CompositeViewer::checkNeedToDoFrame() does the following:
Code:
    if (_requestRedraw) return true;
    if (_requestContinousUpdate) return true;

    for(RefViews::iterator itr = _views.begin();
        itr != _views.end();
        ++itr)
    {
        osgViewer::View* view = itr->get();
        if (view)
        {
            // If the database pager is going to update the scene the render 
flag is
            // set so that the updates show up
            if (view->getDatabasePager()->requiresUpdateSceneGraph() ||
                view->getDatabasePager()->getRequestsInProgress()) return true;
        }
    }

    // now do a eventTraversal to see if any events might require a new frame.
    eventTraversal();

    if (_requestRedraw) return true;
    if (_requestContinousUpdate) return true;

    return false;

and Viewer::checkNeedToDoFrame() does:
Code:
    if (_requestRedraw) return true;
    if (_requestContinousUpdate) return true;


    // If the database pager is going to update the scene the render flag is
    // set so that the updates show up
    if(getDatabasePager()->requiresUpdateSceneGraph() || 
getDatabasePager()->getRequestsInProgress()) return true;

    // if there update callbacks then we need to do frame.
    if (_camera->getUpdateCallback()) return true;
    if (getSceneData()!=0 && 
getSceneData()->getNumChildrenRequiringUpdateTraversal()>0) return true;

    // now do a eventTraversal to see if any events might require a new frame.
    eventTraversal();

    // now check if any of the event handles have prompted a redraw.
    if (_requestRedraw) return true;
    if (_requestContinousUpdate) return true;

    return false;

CompositeViewer works great in my case and calls frame() only when needed. When 
I make the few changes required to use Viewer, it will always call frame(). In 
my case, Viewer returns true because getNumChildrenRequiringUpdateTraversal() 
== 2 and it never goes to 0. If I manually set it to 0, everything works just 
fine. Am I doing something wrong? It seems odd that the methods do not quite do 
the same thing. Should these two methods be more consistent?[/code]

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=43645#43645





_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to