Changeset 9565

Show
Ignore:
Timestamp:
01/28/09 10:31:43 (5 years ago)
Author:
robert
Message:

From Paul Melis, "Here is an updated osgViewer::StatsHandler?. It has the following changes:
- The text and dark background rectangles are now correctly placed, and
slightly resized here and there.
- All counters (vertices, etc) now use a fixed formatting with 0 digits
precision, to prevent the text from being shown in scientific notation
when the number get large (e.g. 6.34344e+6). I tested with a scene
containing roughly 4 million vertices, to make sure its stats would
display correctly.

I also made slight changes to osgcompositeviewer (attached) to aid in
testing the stats display, specifically displaying of camera and view
names."

Location:
OpenSceneGraph/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgcompositeviewer/osgcompositeviewer.cpp

    r9564 r9565  
    164164        { 
    165165            osgViewer::View* view = new osgViewer::View; 
     166            view->setName("View one"); 
    166167            viewer.addView(view); 
    167168 
     
    180181        { 
    181182            osgViewer::View* view = new osgViewer::View; 
     183            view->setName("View two"); 
    182184            viewer.addView(view); 
    183185 
     
    235237        { 
    236238            osgViewer::View* view = new osgViewer::View; 
     239            view->setName("View one"); 
    237240            viewer.addView(view); 
    238241 
    239242            view->setSceneData(scene.get()); 
     243            view->getCamera()->setName("Cam one"); 
    240244            view->getCamera()->setViewport(new osg::Viewport(0,0, traits->width/2, traits->height/2)); 
    241245            view->getCamera()->setGraphicsContext(gc.get()); 
     
    258262        { 
    259263            osgViewer::View* view = new osgViewer::View; 
     264            view->setName("View two"); 
    260265            viewer.addView(view); 
    261266 
    262267            view->setSceneData(scene.get()); 
     268            view->getCamera()->setName("Cam two"); 
    263269            view->getCamera()->setViewport(new osg::Viewport(traits->width/2,0, traits->width/2, traits->height/2)); 
    264270            view->getCamera()->setGraphicsContext(gc.get()); 
     
    273279        { 
    274280            osgViewer::View* view = new osgViewer::View; 
     281            view->setName("View three"); 
    275282            viewer.addView(view); 
    276283 
    277284            view->setSceneData(osgDB::readNodeFile("cessnafire.osg")); 
    278285 
     286            view->getCamera()->setName("Cam three"); 
    279287            view->getCamera()->setProjectionMatrixAsPerspective(30.0, double(traits->width) / double(traits->height/2), 1.0, 1000.0); 
    280288            view->getCamera()->setViewport(new osg::Viewport(0, traits->height/2, traits->width, traits->height/2)); 
  • OpenSceneGraph/trunk/src/osgViewer/StatsHandler.cpp

    r9563 r9565  
    367367                viewStr.setf(std::ios::left, std::ios::adjustfield); 
    368368                viewStr.width(14); 
    369  
    370                 viewStr << std::setw(1) << _cameraNumber  << ": "; 
     369                // Used fixed formatting, as scientific will switch to "...e+.." notation for 
     370                // large numbers of vertices/drawables/etc. 
     371                viewStr.setf(std::ios::fixed); 
     372                viewStr.precision(0); 
     373 
     374                viewStr << std::setw(1) << "#" << _cameraNumber << std::endl; 
    371375 
    372376                // Camera name 
    373                 if (_camera->getName().empty()) 
    374                     viewStr << std::endl; 
    375                 else 
    376                     viewStr << _camera->getName() << std::endl; 
    377                      
     377                if (!_camera->getName().empty()) 
     378                    viewStr << _camera->getName(); 
     379                viewStr << std::endl; 
     380 
    378381                int frameNumber = renderInfo.getState()->getFrameStamp()->getFrameNumber(); 
    379382                if (!(renderer->getGraphicsThreadDoesCull())) 
     
    381384                    --frameNumber; 
    382385                } 
    383                  
     386 
    384387                #define STATS_ATTRIBUTE(str) \ 
    385388                    if (stats->getAttribute(frameNumber, str, value)) \ 
    386                         viewStr << std::setw(7) << value << std::endl; \ 
     389                        viewStr << std::setw(8) << value << std::endl; \ 
    387390                    else \ 
    388                         viewStr << std::setw(7) << "." << std::endl; \ 
     391                        viewStr << std::setw(8) << "." << std::endl; \ 
    389392 
    390393                double value = 0.0; 
     
    448451                std::ostringstream viewStr; 
    449452                viewStr.clear(); 
    450                 viewStr.setf(std::ios::left,std::ios::adjustfield); 
     453                viewStr.setf(std::ios::left, std::ios::adjustfield); 
    451454                viewStr.width(20); 
    452                  
    453                 viewStr << std::setw(1) << _viewNumber  << ": "; 
     455                viewStr.setf(std::ios::fixed); 
     456                viewStr.precision(0); 
     457 
     458                viewStr << std::setw(1) << "#" << _viewNumber; 
     459 
    454460                // View name 
    455                 if (_view->getName().empty()) 
    456                     viewStr << std::endl; 
    457                 else 
    458                     viewStr << _view->getName() << std::endl; 
    459  
     461                if (!_view->getName().empty()) 
     462                    viewStr << ": " << _view->getName(); 
    460463                viewStr << std::endl; 
    461464 
     
    477480 
    478481                double value = 0.0; 
     482 
     483                // header 
     484                viewStr << std::setw(10) << "Unique" << std::setw(10) << "Instanced" << std::endl; 
    479485 
    480486                STATS_ATTRIBUTE_PAIR("Number of unique StateSet","Number of instanced Stateset") 
     
    10881094        float topOfViewerStats = pos.y() + characterSize; 
    10891095 
    1090         geode->addDrawable(createBackgroundRectangle(    pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0),  
    1091                                                         _camera->getViewport()->width() - 2 * backgroundMargin,  
     1096        geode->addDrawable(createBackgroundRectangle(    pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0), 
     1097                                                        _camera->getViewport()->width() - 2 * backgroundMargin, 
    10921098                                                        (3 + 4.5 * cameras.size()) * characterSize + 2 * backgroundMargin, 
    10931099                                                      backgroundColor) ); 
     
    12351241                pos.y() -= (characterSize + backgroundSpacing); 
    12361242 
    1237                 geode->addDrawable(createBackgroundRectangle(    pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0),  
    1238                                                                 _camera->getViewport()->width() - 2 * backgroundMargin,  
     1243                geode->addDrawable(createBackgroundRectangle(    pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0), 
     1244                                                                _camera->getViewport()->width() - 2 * backgroundMargin, 
    12391245                                                                characterSize + 2 * backgroundMargin, 
    12401246                                                                backgroundColor)); 
     
    13691375        geode->setCullingActive(false); 
    13701376        group->addChild(geode); 
    1371         geode->addDrawable(createBackgroundRectangle(    pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0),  
    1372                                                         7 * characterSize + 2 * backgroundMargin,  
    1373                                                         18 * characterSize + 2 * backgroundMargin, 
     1377        geode->addDrawable(createBackgroundRectangle(pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0), 
     1378                                                        7 * characterSize + 2 * backgroundMargin, 
     1379                                                        19 * characterSize + 2 * backgroundMargin, 
    13741380                                                        backgroundColor)); 
    13751381 
    13761382        // Camera scene & primitive stats static text 
    13771383        osg::ref_ptr<osgText::Text> camStaticText = new osgText::Text; 
    1378         geode->addDrawable( camStaticText.get() );   
     1384        geode->addDrawable( camStaticText.get() ); 
    13791385        camStaticText->setColor(staticTextColor); 
    13801386        camStaticText->setFont(font); 
     
    13841390        std::ostringstream viewStr; 
    13851391        viewStr.clear(); 
    1386         viewStr.setf(std::ios::left,std::ios::adjustfield); 
     1392        viewStr.setf(std::ios::left, std::ios::adjustfield); 
    13871393        viewStr.width(14); 
    13881394        viewStr << "Camera" << std::endl; 
     1395        viewStr << "" << std::endl; // placeholder for Camera name 
    13891396        viewStr << "Vertices" << std::endl; 
    13901397        viewStr << "Drawables" << std::endl; 
     
    14081415 
    14091416        // Move camera block to the right 
    1410         pos.x() += 7 * characterSize + 2 * backgroundMargin + backgroundSpacing;  
    1411  
    1412         // add camera scene stats 
     1417        pos.x() += 7 * characterSize + 2 * backgroundMargin + backgroundSpacing; 
     1418 
     1419        // Add camera scene stats, one block per camera 
    14131420        int cameraCounter = 0; 
    14141421        for(ViewerBase::Cameras::iterator citr = cameras.begin(); citr != cameras.end(); ++citr) 
    14151422        { 
    1416             geode->addDrawable(createBackgroundRectangle(    pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0),  
    1417                                                             5 * characterSize + 2 * backgroundMargin,  
    1418                                                             18 * characterSize + 2 * backgroundMargin, 
     1423            geode->addDrawable(createBackgroundRectangle(pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0), 
     1424                                                            5 * characterSize + 2 * backgroundMargin, 
     1425                                                            19 * characterSize + 2 * backgroundMargin, 
    14191426                                                            backgroundColor)); 
    14201427 
     
    14311438 
    14321439            // Move camera block to the right 
    1433             pos.x() +=  5 * characterSize + 2 * backgroundMargin + backgroundSpacing;  
     1440            pos.x() +=  5 * characterSize + 2 * backgroundMargin + backgroundSpacing; 
    14341441            cameraCounter++; 
    14351442        } 
     
    14461453        group->addChild(geode); 
    14471454 
    1448         geode->addDrawable(createBackgroundRectangle(    pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0),  
    1449                                                         5 * characterSize + 2 * backgroundMargin,  
     1455        geode->addDrawable(createBackgroundRectangle(pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0), 
     1456                                                        6 * characterSize + 2 * backgroundMargin, 
    14501457                                                        12 * characterSize + 2 * backgroundMargin, 
    14511458                                                        backgroundColor)); 
     
    14611468        std::ostringstream viewStr; 
    14621469        viewStr.clear(); 
    1463         viewStr.setf(std::ios::left,std::ios::adjustfield); 
     1470        viewStr.setf(std::ios::left, std::ios::adjustfield); 
    14641471        viewStr.width(14); 
    14651472        viewStr << "View" << std::endl; 
    1466         viewStr << std::endl; 
     1473        viewStr << " " << std::endl; 
    14671474        viewStr << "Stateset" << std::endl; 
    14681475        viewStr << "Group" << std::endl; 
     
    14751482        viewStr << "Vertices" << std::endl; 
    14761483        viewStr << "Primitives" << std::endl; 
    1477         viewStr.setf(std::ios::right,std::ios::adjustfield); 
     1484        viewStr.setf(std::ios::right, std::ios::adjustfield); 
    14781485        camStaticText->setText(viewStr.str()); 
    14791486 
    1480         // Move camera block to the right 
    1481         pos.x() += 5 * characterSize + 2 * backgroundMargin + backgroundSpacing;  
     1487        // Move viewer block to the right 
     1488        pos.x() += 6 * characterSize + 2 * backgroundMargin + backgroundSpacing; 
    14821489 
    14831490        std::vector<osgViewer::View*> views; 
     
    14881495        for (it = views.begin(); it != views.end(); ++it) 
    14891496        { 
    1490             geode->addDrawable(createBackgroundRectangle(    pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0),  
    1491                                                             6 * characterSize + 2 * backgroundMargin,  
     1497            geode->addDrawable(createBackgroundRectangle(pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0), 
     1498                                                            11 * characterSize + 2 * backgroundMargin, 
    14921499                                                            12 * characterSize + 2 * backgroundMargin, 
    14931500                                                            backgroundColor)); 
     
    15031510            text->setDrawCallback(new ViewSceneStatsTextDrawCallback(*it, viewCounter)); 
    15041511 
    1505             pos.x() += 6 * characterSize + 2 * backgroundMargin + backgroundSpacing;  
     1512            pos.x() += 11 * characterSize + 2 * backgroundMargin + backgroundSpacing; 
    15061513            viewCounter++; 
    15071514        }