Changeset 9552
- Timestamp:
- 01/26/09 22:23:09 (4 years ago)
- Location:
- OpenSceneGraph/trunk
- Files:
-
- 3 modified
-
include/osgUtil/Statistics (modified) (1 diff)
-
src/osgViewer/Renderer.cpp (modified) (4 diffs)
-
src/osgViewer/StatsHandler.cpp (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/include/osgUtil/Statistics
r9377 r9552 116 116 public: 117 117 118 PrimitiveCountMap& getPrimitiveCountMap() { return _primitives_count; } 119 const PrimitiveCountMap& getPrimitiveCountMap() const { return _primitives_count; } 120 121 /// deprecated 118 122 PrimitiveCountMap::iterator GetPrimitivesBegin() { return _primitives_count.begin(); } 123 /// deprecated 119 124 PrimitiveCountMap::iterator GetPrimitivesEnd() { return _primitives_count.end(); } 120 125 -
OpenSceneGraph/trunk/src/osgViewer/Renderer.cpp
r9385 r9552 18 18 #include <osgUtil/Optimizer> 19 19 #include <osgUtil/GLObjectsVisitor> 20 #include <osgUtil/Statistics> 20 21 21 22 #include <osgViewer/Renderer> … … 335 336 } 336 337 338 if (stats && stats->collectStats("scene")) 339 { 340 osgUtil::Statistics sceneStats; 341 sceneView->getStats(sceneStats); 342 343 stats->setAttribute(frameNumber, "Visible vertex count", static_cast<double>(sceneStats._vertexCount)); 344 stats->setAttribute(frameNumber, "Visible number of drawables", static_cast<double>(sceneStats.numDrawables)); 345 stats->setAttribute(frameNumber, "Visible number of lights", static_cast<double>(sceneStats.nlights)); 346 stats->setAttribute(frameNumber, "Visible number of render bins", static_cast<double>(sceneStats.nbins)); 347 stats->setAttribute(frameNumber, "Visible depth", static_cast<double>(sceneStats.depth)); 348 stats->setAttribute(frameNumber, "Visible number of materials", static_cast<double>(sceneStats.nummat)); 349 stats->setAttribute(frameNumber, "Visible number of impostors", static_cast<double>(sceneStats.nimpostor)); 350 351 osgUtil::Statistics::PrimitiveCountMap& pcm = sceneStats.getPrimitiveCountMap(); 352 stats->setAttribute(frameNumber, "Visible number of GL_POINTS", static_cast<double>(pcm[GL_POINTS])); 353 stats->setAttribute(frameNumber, "Visible number of GL_LINES", static_cast<double>(pcm[GL_LINES])); 354 stats->setAttribute(frameNumber, "Visible number of GL_LINE_STRIP", static_cast<double>(pcm[GL_LINE_STRIP])); 355 stats->setAttribute(frameNumber, "Visible number of GL_LINE_LOOP", static_cast<double>(pcm[GL_LINE_LOOP])); 356 stats->setAttribute(frameNumber, "Visible number of GL_TRIANGLES", static_cast<double>(pcm[GL_TRIANGLES])); 357 stats->setAttribute(frameNumber, "Visible number of GL_TRIANGLE_STRIP", static_cast<double>(pcm[GL_TRIANGLE_STRIP])); 358 stats->setAttribute(frameNumber, "Visible number of GL_TRIANGLE_FAN", static_cast<double>(pcm[GL_TRIANGLE_FAN])); 359 stats->setAttribute(frameNumber, "Visible number of GL_QUADS", static_cast<double>(pcm[GL_QUADS])); 360 stats->setAttribute(frameNumber, "Visible number of GL_QUAD_STRIP", static_cast<double>(pcm[GL_QUAD_STRIP])); 361 stats->setAttribute(frameNumber, "Visible number of GL_POLYGON", static_cast<double>(pcm[GL_POLYGON])); 362 363 } 364 337 365 _drawQueue.add(sceneView); 338 366 … … 457 485 stats->setAttribute(frameNumber, "Draw traversal time taken", osg::Timer::instance()->delta_s(beforeDrawTick, afterDrawTick)); 458 486 } 487 459 488 } 460 489 … … 518 547 519 548 osg::Timer_t afterCullTick = osg::Timer::instance()->tick(); 549 550 if (stats && stats->collectStats("scene")) 551 { 552 osgUtil::Statistics sceneStats; 553 sceneView->getStats(sceneStats); 554 555 stats->setAttribute(frameNumber, "Visible vertex count", static_cast<double>(sceneStats._vertexCount)); 556 stats->setAttribute(frameNumber, "Visible number of drawables", static_cast<double>(sceneStats.numDrawables)); 557 stats->setAttribute(frameNumber, "Visible number of lights", static_cast<double>(sceneStats.nlights)); 558 stats->setAttribute(frameNumber, "Visible number of render bins", static_cast<double>(sceneStats.nbins)); 559 stats->setAttribute(frameNumber, "Visible depth", static_cast<double>(sceneStats.depth)); 560 stats->setAttribute(frameNumber, "Visible number of materials", static_cast<double>(sceneStats.nummat)); 561 stats->setAttribute(frameNumber, "Visible number of impostors", static_cast<double>(sceneStats.nimpostor)); 562 } 520 563 521 564 #if 0 -
OpenSceneGraph/trunk/src/osgViewer/StatsHandler.cpp
r9385 r9552 98 98 ++itr) 99 99 { 100 if ((*itr)->getStats()) (*itr)->getStats()->collectStats("rendering",false); 101 if ((*itr)->getStats()) (*itr)->getStats()->collectStats("gpu",false); 100 osg::Stats* stats = (*itr)->getStats(); 101 if (stats) 102 { 103 stats->collectStats("rendering",false); 104 stats->collectStats("gpu",false); 105 stats->collectStats("scene",false); 106 } 102 107 } 103 108 109 viewer->getStats()->collectStats("scene",false); 110 104 111 _camera->setNodeMask(0x0); 105 112 _switch->setAllChildrenOff(); … … 149 156 _camera->setNodeMask(0xffffffff); 150 157 _switch->setValue(_cameraSceneChildNum, true); 158 159 for(osgViewer::ViewerBase::Cameras::iterator itr = cameras.begin(); 160 itr != cameras.end(); 161 ++itr) 162 { 163 osg::Stats* stats = (*itr)->getStats(); 164 if (stats) 165 { 166 stats->collectStats("scene",true); 167 } 168 } 169 151 170 break; 152 171 } … … 155 174 _camera->setNodeMask(0xffffffff); 156 175 _switch->setValue(_viewerSceneChildNum, true); 176 177 viewer->getStats()->collectStats("scene",true); 178 157 179 break; 158 180 } … … 321 343 _cameraNumber(cameraNumber) 322 344 { 323 324 _primitiveModeStreamMap[osg::PrimitiveSet::POINTS] = &stream[0];325 _primitiveModeStreamMap[osg::PrimitiveSet::LINES] = &stream[1];326 _primitiveModeStreamMap[osg::PrimitiveSet::LINE_STRIP] = &stream[2];327 _primitiveModeStreamMap[osg::PrimitiveSet::LINE_LOOP] = &stream[3];328 _primitiveModeStreamMap[osg::PrimitiveSet::TRIANGLES] = &stream[4];329 _primitiveModeStreamMap[osg::PrimitiveSet::TRIANGLE_STRIP] = &stream[5];330 _primitiveModeStreamMap[osg::PrimitiveSet::TRIANGLE_FAN] = &stream[6];331 _primitiveModeStreamMap[osg::PrimitiveSet::QUADS] = &stream[7];332 _primitiveModeStreamMap[osg::PrimitiveSet::QUAD_STRIP] = &stream[8];333 _primitiveModeStreamMap[osg::PrimitiveSet::POLYGON] = &stream[9];334 345 } 335 346 … … 337 348 virtual void drawImplementation(osg::RenderInfo& renderInfo,const osg::Drawable* drawable) const 338 349 { 350 if (!_camera) return; 351 339 352 osgText::Text* text = (osgText::Text*)drawable; 340 353 … … 348 361 viewStr.clear(); 349 362 350 osg Util::Statistics stats;363 osg::Stats* stats = _camera->getStats(); 351 364 osgViewer::Renderer* renderer = dynamic_cast<osgViewer::Renderer*>(_camera->getRenderer()); 352 365 353 if (renderer) 354 { 355 renderer->getSceneView(0)->getStats(stats); 356 366 if (stats && renderer) 367 { 357 368 viewStr.setf(std::ios::left,std::ios::adjustfield); 358 369 viewStr.width(14); 359 370 360 371 viewStr << std::setw(1) << _cameraNumber << ": "; 372 361 373 // Camera name 362 374 if (_camera->getName().empty()) … … 364 376 else 365 377 viewStr << _camera->getName() << std::endl; 366 367 viewStr << std::setw(7) << stats._vertexCount << std::endl; 368 viewStr << std::setw(7) << stats.numDrawables << std::endl; 369 viewStr << std::setw(7) << stats.nlights << std::endl; 370 viewStr << std::setw(7) << stats.nbins << std::endl; 371 viewStr << std::setw(7) << stats.depth << std::endl; 372 viewStr << std::setw(7) << stats.nummat << std::endl; 373 viewStr << std::setw(7) << stats.nimpostor << std::endl; 374 375 // Initialize primitive streams 376 PrimitiveModeStreamMap::const_iterator iter; 377 iter = _primitiveModeStreamMap.begin(); 378 for(iter = _primitiveModeStreamMap.begin(); iter != _primitiveModeStreamMap.end(); ++iter) 378 379 int frameNumber = renderInfo.getState()->getFrameStamp()->getFrameNumber(); 380 if (!(renderer->getGraphicsThreadDoesCull())) 379 381 { 380 iter->second->str("0"); 381 } 382 383 // Write collected primitive values 384 osgUtil::Statistics::PrimitiveCountMap::iterator primitiveItr; 385 for(primitiveItr = stats.GetPrimitivesBegin(); primitiveItr != stats.GetPrimitivesEnd(); ++primitiveItr) 386 { 387 PrimitiveModeStreamMap::const_iterator strItr = _primitiveModeStreamMap.find((*primitiveItr).first); 388 if (strItr != _primitiveModeStreamMap.end()) 389 { 390 *(strItr->second) << (*primitiveItr).second; 391 } 382 --frameNumber; 392 383 } 393 384 394 // Concatenate all streams 395 for(iter = _primitiveModeStreamMap.begin(); iter != _primitiveModeStreamMap.end(); ++iter) 396 { 397 viewStr << iter->second->str() << std::endl; 398 } 385 #define STATS_ATTRIBUTE(str) \ 386 if (stats->getAttribute(frameNumber, str, value)) \ 387 viewStr << std::setw(7) << value << std::endl; \ 388 else \ 389 viewStr << std::setw(7) << "no value" << std::endl; \ 390 391 double value = 0.0; 392 393 STATS_ATTRIBUTE("Visible vertex count") 394 STATS_ATTRIBUTE("Visible number of drawables") 395 STATS_ATTRIBUTE("Visible number of lights") 396 STATS_ATTRIBUTE("Visible number of render bins") 397 STATS_ATTRIBUTE("Visible depth") 398 STATS_ATTRIBUTE("Visible number of materials") 399 STATS_ATTRIBUTE("Visible number of impostors") 400 401 STATS_ATTRIBUTE("Visible number of GL_POINTS") 402 STATS_ATTRIBUTE("Visible number of GL_LINES") 403 STATS_ATTRIBUTE("Visible number of GL_LINE_STRIP") 404 STATS_ATTRIBUTE("Visible number of GL_LINE_LOOP") 405 STATS_ATTRIBUTE("Visible number of GL_TRIANGLES") 406 STATS_ATTRIBUTE("Visible number of GL_TRIANGLE_STRIP") 407 STATS_ATTRIBUTE("Visible number of GL_TRIANGLE_FAN") 408 STATS_ATTRIBUTE("Visible number of GL_QUADS") 409 STATS_ATTRIBUTE("Visible number of GL_QUAD_STRIP") 410 STATS_ATTRIBUTE("Visible number of GL_POLYGON") 411 399 412 400 413 text->setText(viewStr.str()); … … 404 417 } 405 418 406 std::ostringstream stream[10]; 407 typedef std::map<GLenum, std::ostringstream*> PrimitiveModeStreamMap; 408 PrimitiveModeStreamMap _primitiveModeStreamMap; 409 osg::ref_ptr<osg::Camera> _camera; 410 mutable osg::Timer_t _tickLastUpdated; 411 int _cameraNumber; 419 osg::observer_ptr<osg::Camera> _camera; 420 mutable osg::Timer_t _tickLastUpdated; 421 int _cameraNumber; 412 422 }; 413 423 … … 425 435 virtual void drawImplementation(osg::RenderInfo& renderInfo,const osg::Drawable* drawable) const 426 436 { 437 if (!_view) return; 438 427 439 osgText::Text* text = (osgText::Text*)drawable; 428 440 … … 433 445 { 434 446 _tickLastUpdated = tick; 435 osg::ref_ptr<osg::Node> sceneRoot = _view ? _view->getScene()->getSceneData() : 0;447 osg::ref_ptr<osg::Node> sceneRoot = _view.valid() ? _view->getScene()->getSceneData() : 0; 436 448 437 449 if (sceneRoot.valid()) … … 494 506 } 495 507 496 // Using a ref_ptr causes a crash during cleanup 497 //osg::ref_ptr<osgViewer::View> _view; 498 osgViewer::View* _view; 499 mutable osg::Timer_t _tickLastUpdated; 500 int _viewNumber; 508 osg::observer_ptr<osgViewer::View> _view; 509 mutable osg::Timer_t _tickLastUpdated; 510 int _viewNumber; 501 511 }; 502 512 … … 1393 1403 viewStr << "Line loops" << std::endl; 1394 1404 viewStr << "Triangles" << std::endl; 1395 viewStr << "Tri anglestrips" << std::endl;1396 viewStr << "Tri anglefans" << std::endl;1405 viewStr << "Tri. strips" << std::endl; 1406 viewStr << "Tri. fans" << std::endl; 1397 1407 viewStr << "Quads" << std::endl; 1398 1408 viewStr << "Quad strips" << std::endl;
