}
// 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);
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;
SGMaterialLib* matlib,
float building_density,
bool use_random_objects,
- bool use_random_buildings)
+ bool use_random_buildings,
+ bool useVBOs)
{
SGMaterialTriangleMap::iterator i;
SGBuildingBin* bin = NULL;
if (building_coverage > 0) {
- bin = new SGBuildingBin(mat);
+ bin = new SGBuildingBin(mat, useVBOs);
randomBuildings.push_back(bin);
}
bool use_random_buildings = false;
float vegetation_density = 1.0f;
float building_density = 1.0f;
-
+ bool useVBOs = false;
+
osg::ref_ptr<osg::Group> randomObjects;
osg::ref_ptr<osg::Group> forestNode;
osg::ref_ptr<osg::Group> buildingNode;
= propertyNode->getFloatValue("/sim/rendering/building-density",
building_density);
}
+
+ useVBOs = (_options->getPluginStringData("SimGear::USE_VBOS") == "ON");
}
_tileGeometryBin->computeRandomObjectsAndBuildings(matlib,
building_density,
use_random_objects,
- use_random_buildings);
+ use_random_buildings,
+ useVBOs);
}