hi robert,

i did a review of osgDB::DatabasePager and got some questions, or
remarks....

*******************************************************************************************************************
../src/osgDB/DatabasePager.cpp @ Ln72

#if __APPLE__
    // OSX really doesn't like compiling display lists, and performs poorly
when they are used,
    // so apply this hack to make up for its short comings.
    _drawablePolicy = USE_VERTEX_ARRAYS;
#else
    _drawablePolicy = DO_NOT_MODIFY_DRAWABLE_SETTINGS;
#endif



I don't believe that this is just an __APPLE__ performance problem. The
problem is that on ATI Cards,
most of APPLE OS/X computers are based on ATI, nowadays latest MacBooks Pro
have NVIDIA, but most Apple
Computers are based on ATI cards. And as we know, that on ATI DisplayList
compiling is really poorly
implemented, i propose to read vendors back from the graphics card, and if
we were working on ATI based
graphic system, we switch directly to vertex arrays.

glVender.string.has("ATI") => vertex arrays

*******************************************************************************************************************
../src/osgDB/DatabasePager.cpp @ Ln290



    OpenThreads::ScopedLock<OpenThreads::Mutex>
lock(_dataToCompileListMutex);

        for(DatabaseRequestList::iterator litr = _dataToCompileList.begin();
            litr != _dataToCompileList.end() && !foundEntry;
            ++litr)
        {
            if ((*litr)->_fileName==fileName)
            {
                foundEntry = true;
                (*litr)->_frameNumberLastRequest = frameNumber;
                (*litr)->_timestampLastRequest = timestamp;
                (*litr)->_priorityLastRequest = priority;
                ++((*litr)->_numOfRequests);
            }
        }

    ...


if we have a huge database with many level of request, once had more than
200(!) requests per frame [calls of requestNodeFile].
then we have to walk trough the database say sum of i from 1:x = (x*(x+1) )/
2, instead of log(x), i propse to use a
std::map or a std::multimap instead of a std::list of database request. of
course we will use more memory, but the performance can be increased.
(called in each cull pass / at each frame ) => Time Critical
*******************************************************************************************************************



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

Reply via email to