diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..e83555e --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 2.8.9) + +project(osgTestBed) +# automatically add CMAKE_CURRENT_SOURCE_DIR and CMAKE_CURRENT_BINARY_DIR to the include directories in every directory +SET(CMAKE_INCLUDE_CURRENT_DIR yes) + + +find_package(OpenSceneGraph REQUIRED) + +subdirs( +stressVAOpolicy +) + +SET(RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin) +SET(MODULE_OUTPUT_PATH ${CMAKE_HOME_DIRECTORY}/bin) +SET(RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib) +SET(LIBRARY_OUTPUT_PATH ${CMAKE_HOME_DIRECTORY}/lib) + +SET(EXECUTABLE_OUTPUT_PATH_DEBUG ${CMAKE_HOME_DIRECTORY}/ar ) +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_HOME_DIRECTORY}/bin) +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_HOME_DIRECTORY}/bin) +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib) + +SET(CMAKE_DEBUG_POSTFIX "d") diff --git a/stressVAOpolicy/CMakeLists.txt b/stressVAOpolicy/CMakeLists.txt new file mode 100644 index 0000000..f485fce --- /dev/null +++ b/stressVAOpolicy/CMakeLists.txt @@ -0,0 +1,29 @@ +PROJECT(stressVAOpolicy) + +set(DYNAMIC_OPENSCENEGRAPH True) +if(DYNAMIC_OPENSCENEGRAPH) + add_definitions(-DOSG_DYNAMIC_LIBRARY) +else() + add_definitions(-DOSG_LIBRARY_STATIC) +endif() + +find_package(OpenSceneGraph 3.6.0 REQUIRED + osg + osgDB + osgGA + osgUtil + osgViewer + osgText +) + +INCLUDE_directories(${OSG_INCLUDE_DIR}) +SET(PROJECT_SOURCES + stressVAOpolicy.cpp +) + +ADD_EXECUTABLE(stressVAOpolicy ${PROJECT_SOURCES} ) + +TARGET_LINK_LIBRARIES(stressVAOpolicy ${OPENTHREADS_LIBRARIES} ${OPENSCENEGRAPH_LIBRARIES} ) + +SET_TARGET_PROPERTIES(stressVAOpolicy PROPERTIES PROJECT_LABEL "BenchTest stressVAOpolicy" DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) + diff --git a/stressVAOpolicy/stressVAOpolicy.cpp b/stressVAOpolicy/stressVAOpolicy.cpp new file mode 100644 index 0000000..e213aae --- /dev/null +++ b/stressVAOpolicy/stressVAOpolicy.cpp @@ -0,0 +1,91 @@ + +/// This program test robustness of VAS path +/// it collects geometries given in arg then add and remove them at runtime +/// stressing osg vas policy as well as driver vao policy + +#include +#include +#include + +#include +#include + +#include + +class GeomLoaderCB : public osg::NodeCallback +{ + int _thresremoval; int _nbaddedatatime; + std::list > _geoms; +public: + GeomLoaderCB(int thresremoval=1, int nbaddedatatime=1):_nbaddedatatime(nbaddedatatime), _thresremoval(thresremoval) {} + + void setGeometryList(const osgUtil::GeometryCollector::GeometryList& geomlist) { + for(auto geom : geomlist) _geoms.push_back(geom); + } + + virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) { + osg::Group* gr = node->asGroup(); + if(!gr || _geoms.empty() ) return; + + if(gr->getNumChildren()>_thresremoval) + { + osg::Geometry* removedgeom = gr->getChild(0)->asGeometry(); + if(removedgeom) { + OSG_WARN<<"removing "<< removedgeom <removeChildren(0,1); + } + return; + } + + std::list > ::iterator it= _geoms.begin(); + int cpt=0; + while(it!=_geoms.end() && cpt++<_nbaddedatatime ) { + osg::Geometry *addedgeom = static_cast((*it)->clone(osg::CopyOp::DEEP_COPY_ALL)); + addedgeom->setUseDisplayList(false); + addedgeom->setUseVertexBufferObjects(true); + addedgeom->setUseVertexArrayObject(true); + gr->addChild(addedgeom); + OSG_WARN<<"add "<< addedgeom < loaded = osgDB::readNodeFiles(args); + if(!loaded.valid()) loaded = osgDB::readNodeFile("testdata/BIGCITY.ive"); + if(loaded.valid()) + { + loaded->accept(geomcollector); + + osg::Group * root=new osg::Group; + root->setDataVariance(osg::Object::DYNAMIC); + GeomLoaderCB * loader=new GeomLoaderCB(geomcountabovewichweremove,geomcountaddedatatime); + loader->setGeometryList( geomcollector.getGeometryList() ); + loaded=0; + root->setUpdateCallback(loader); + + osgViewer::Viewer viewer; + viewer.setThreadingModel(osgViewer::ViewerBase::SingleThreaded); + viewer.addEventHandler(new osgViewer::StatsHandler); + viewer.addEventHandler(new osgViewer::WindowSizeHandler); + viewer.addEventHandler(new osgViewer::ThreadingHandler); + viewer.setRunFrameScheme(osgViewer::ViewerBase::CONTINUOUS); + + viewer.setSceneData(root); + + viewer.realize(); + viewer.run(); + } + +} diff --git a/testdata/BIGCITY.ive.gz b/testdata/BIGCITY.ive.gz new file mode 100644 index 0000000..769c43a Binary files /dev/null and b/testdata/BIGCITY.ive.gz differ