| | 643 | if (getViewerStats() && getViewerStats()->collectStats("scene")) |
| | 644 | { |
| | 645 | int frameNumber = frameStamp ? frameStamp->getFrameNumber() : 0; |
| | 646 | |
| | 647 | Views views; |
| | 648 | getViews(views); |
| | 649 | for(Views::iterator vitr = views.begin(); |
| | 650 | vitr != views.end(); |
| | 651 | ++vitr) |
| | 652 | { |
| | 653 | View* view = *vitr; |
| | 654 | osg::Stats* stats = view->getStats(); |
| | 655 | osg::Node* sceneRoot = view->getSceneData(); |
| | 656 | if (sceneRoot) |
| | 657 | { |
| | 658 | osgUtil::StatsVisitor statsVisitor; |
| | 659 | sceneRoot->accept(statsVisitor); |
| | 660 | |
| | 661 | unsigned int unique_primitives = 0; |
| | 662 | osgUtil::Statistics::PrimitiveCountMap::iterator pcmitr; |
| | 663 | for(pcmitr = statsVisitor._uniqueStats.GetPrimitivesBegin(); |
| | 664 | pcmitr != statsVisitor._uniqueStats.GetPrimitivesEnd(); |
| | 665 | ++pcmitr) |
| | 666 | { |
| | 667 | unique_primitives += pcmitr->second; |
| | 668 | } |
| | 669 | |
| | 670 | stats->setAttribute(frameNumber, "Number of unique StateSet", static_cast<double>(statsVisitor._statesetSet.size())); |
| | 671 | stats->setAttribute(frameNumber, "Number of unique Group", static_cast<double>(statsVisitor._groupSet.size())); |
| | 672 | stats->setAttribute(frameNumber, "Number of unique Transform", static_cast<double>(statsVisitor._transformSet.size())); |
| | 673 | stats->setAttribute(frameNumber, "Number of unique LOD", static_cast<double>(statsVisitor._lodSet.size())); |
| | 674 | stats->setAttribute(frameNumber, "Number of unique Switch", static_cast<double>(statsVisitor._switchSet.size())); |
| | 675 | stats->setAttribute(frameNumber, "Number of unique Geode", static_cast<double>(statsVisitor._geodeSet.size())); |
| | 676 | stats->setAttribute(frameNumber, "Number of unique Drawable", static_cast<double>(statsVisitor._drawableSet.size())); |
| | 677 | stats->setAttribute(frameNumber, "Number of unique Geometry", static_cast<double>(statsVisitor._geometrySet.size())); |
| | 678 | stats->setAttribute(frameNumber, "Number of unique Vertices", static_cast<double>(statsVisitor._uniqueStats._vertexCount)); |
| | 679 | stats->setAttribute(frameNumber, "Number of unique Primitives", static_cast<double>(unique_primitives)); |
| | 680 | |
| | 681 | unsigned int instanced_primitives = 0; |
| | 682 | for(pcmitr = statsVisitor._instancedStats.GetPrimitivesBegin(); |
| | 683 | pcmitr != statsVisitor._instancedStats.GetPrimitivesEnd(); |
| | 684 | ++pcmitr) |
| | 685 | { |
| | 686 | instanced_primitives += pcmitr->second; |
| | 687 | } |
| | 688 | |
| | 689 | stats->setAttribute(frameNumber, "Number of instanced Stateset", static_cast<double>(statsVisitor._numInstancedStateSet)); |
| | 690 | stats->setAttribute(frameNumber, "Number of instanced Group", static_cast<double>(statsVisitor._numInstancedGroup)); |
| | 691 | stats->setAttribute(frameNumber, "Number of instanced Transform", static_cast<double>(statsVisitor._numInstancedTransform)); |
| | 692 | stats->setAttribute(frameNumber, "Number of instanced LOD", static_cast<double>(statsVisitor._numInstancedLOD)); |
| | 693 | stats->setAttribute(frameNumber, "Number of instanced Switch", static_cast<double>(statsVisitor._numInstancedSwitch)); |
| | 694 | stats->setAttribute(frameNumber, "Number of instanced Geode", static_cast<double>(statsVisitor._numInstancedGeode)); |
| | 695 | stats->setAttribute(frameNumber, "Number of instanced Drawable", static_cast<double>(statsVisitor._numInstancedDrawable)); |
| | 696 | stats->setAttribute(frameNumber, "Number of instanced Geometry", static_cast<double>(statsVisitor._numInstancedGeometry)); |
| | 697 | stats->setAttribute(frameNumber, "Number of instanced Vertices", static_cast<double>(statsVisitor._instancedStats._vertexCount)); |
| | 698 | stats->setAttribute(frameNumber, "Number of instanced Primitives", static_cast<double>(instanced_primitives)); |
| | 699 | } |
| | 700 | } |
| | 701 | } |
| | 702 | |
| 764 | | getStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals begin time ", beginRenderingTraversals); |
| 765 | | getStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals end time ", endRenderingTraversals); |
| 766 | | getStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals time taken", endRenderingTraversals-beginRenderingTraversals); |
| 767 | | } |
| 768 | | } |
| 769 | | |
| | 825 | getViewerStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals begin time ", beginRenderingTraversals); |
| | 826 | getViewerStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals end time ", endRenderingTraversals); |
| | 827 | getViewerStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals time taken", endRenderingTraversals-beginRenderingTraversals); |
| | 828 | } |
| | 829 | } |
| | 830 | |