From 18ff03acdf790fcf87127e43f83d0242a1010673 Mon Sep 17 00:00:00 2001 From: James Turner Date: Wed, 5 Mar 2014 10:20:48 +0000 Subject: [PATCH] VBO switch also controls random-buildings. --- simgear/scene/tgdb/SGBuildingBin.cxx | 8 ++++++-- simgear/scene/tgdb/SGBuildingBin.hxx | 2 +- simgear/scene/tgdb/obj.cxx | 13 +++++++++---- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/simgear/scene/tgdb/SGBuildingBin.cxx b/simgear/scene/tgdb/SGBuildingBin.cxx index 30fc34a9..bafb9c38 100644 --- a/simgear/scene/tgdb/SGBuildingBin.cxx +++ b/simgear/scene/tgdb/SGBuildingBin.cxx @@ -108,7 +108,7 @@ BuildingBoundingBoxCallback::computeBound(const Drawable& drawable) const } // Set up the building set based on the material definitions - SGBuildingBin::SGBuildingBin(const SGMaterial *mat) { + SGBuildingBin::SGBuildingBin(const SGMaterial *mat, bool useVBOs) { material_name = new std::string(mat->get_names()[0]); SG_LOG(SG_TERRAIN, SG_DEBUG, "Building material " << material_name); @@ -161,7 +161,11 @@ BuildingBoundingBoxCallback::computeBound(const Drawable& drawable) const sharedGeometry->setFogCoordBinding(osg::Geometry::BIND_PER_VERTEX); sharedGeometry->setComputeBoundingBoxCallback(new BuildingBoundingBoxCallback); sharedGeometry->setUseDisplayList(false); - + sharedGeometry->setDataVariance(osg::Object::STATIC); + if (useVBOs) { + sharedGeometry->setUseVertexBufferObjects(true); + } + for (unsigned int j = 0; j < BUILDING_SET_SIZE; j++) { float width; float depth; diff --git a/simgear/scene/tgdb/SGBuildingBin.hxx b/simgear/scene/tgdb/SGBuildingBin.hxx index 890dff98..f64599db 100644 --- a/simgear/scene/tgdb/SGBuildingBin.hxx +++ b/simgear/scene/tgdb/SGBuildingBin.hxx @@ -168,7 +168,7 @@ private: public: - SGBuildingBin(const SGMaterial *mat); + SGBuildingBin(const SGMaterial *mat, bool useVBOs); ~SGBuildingBin() { smallBuildings.clear(); diff --git a/simgear/scene/tgdb/obj.cxx b/simgear/scene/tgdb/obj.cxx index 82b97e9b..8885e405 100644 --- a/simgear/scene/tgdb/obj.cxx +++ b/simgear/scene/tgdb/obj.cxx @@ -480,7 +480,8 @@ public: SGMaterialLib* matlib, float building_density, bool use_random_objects, - bool use_random_buildings) + bool use_random_buildings, + bool useVBOs) { SGMaterialTriangleMap::iterator i; @@ -508,7 +509,7 @@ public: SGBuildingBin* bin = NULL; if (building_coverage > 0) { - bin = new SGBuildingBin(mat); + bin = new SGBuildingBin(mat, useVBOs); randomBuildings.push_back(bin); } @@ -1121,7 +1122,8 @@ public: bool use_random_buildings = false; float vegetation_density = 1.0f; float building_density = 1.0f; - + bool useVBOs = false; + osg::ref_ptr randomObjects; osg::ref_ptr forestNode; osg::ref_ptr buildingNode; @@ -1146,6 +1148,8 @@ public: = propertyNode->getFloatValue("/sim/rendering/building-density", building_density); } + + useVBOs = (_options->getPluginStringData("SimGear::USE_VBOS") == "ON"); } @@ -1154,7 +1158,8 @@ public: _tileGeometryBin->computeRandomObjectsAndBuildings(matlib, building_density, use_random_objects, - use_random_buildings); + use_random_buildings, + useVBOs); } -- 2.39.5