diff --git a/include/osg/CullSettings b/include/osg/CullSettings index 528fe6d52..46d0f327b 100644 --- a/include/osg/CullSettings +++ b/include/osg/CullSettings @@ -1,4 +1,4 @@ -/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2003 Robert Osfield +/* -*-c++-*- OpenSceneGraph - setCullSettingsright (C) 1998-2003 Robert Osfield * * This library is open source and may be redistributed and/or modified under * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or @@ -19,13 +19,29 @@ namespace osg { +// forward declare +class ArgumentParser; +class ApplicationUsage; + class SG_EXPORT CullSettings { public: - CullSettings() { setDefaults(); } + CullSettings() + { + setDefaults(); + readEnvironmentalVariables(); + } + + CullSettings(ArgumentParser& arguments) + { + setDefaults(); + readEnvironmentalVariables(); + readCommandLine(arguments); + } + + CullSettings(const CullSettings& cs); - CullSettings(const CullSettings& cs) { setCullSettings(cs); } ~CullSettings() {} CullSettings& operator = (const CullSettings& settings) @@ -35,9 +51,16 @@ class SG_EXPORT CullSettings return *this; } - void setDefaults(); - void setCullSettings(const CullSettings& settings); + + void setDefaults(); + + /** read the environmental variables.*/ + void readEnvironmentalVariables(); + + /** read the commandline arguments.*/ + void readCommandLine(ArgumentParser& arguments); + /** Switch the creation of Impostors on or off. * Setting active to false forces the CullVisitor to use the Impostor diff --git a/include/osg/DisplaySettings b/include/osg/DisplaySettings index 92f4a8a6c..ec62ffa33 100644 --- a/include/osg/DisplaySettings +++ b/include/osg/DisplaySettings @@ -54,11 +54,13 @@ class SG_EXPORT DisplaySettings : public osg::Referenced DisplaySettings& operator = (const DisplaySettings& vs); + void setDisplaySettings(const DisplaySettings& vs); void merge(const DisplaySettings& vs); void setDefaults(); + /** read the environmental variables.*/ void readEnvironmentalVariables(); /** read the commandline arguments.*/ @@ -166,7 +168,6 @@ class SG_EXPORT DisplaySettings : public osg::Referenced virtual ~DisplaySettings(); - void copy(const DisplaySettings& vs); DisplayType _displayType; bool _stereo; diff --git a/src/osg/CullSettings.cpp b/src/osg/CullSettings.cpp index 645302a64..daecf4b5d 100644 --- a/src/osg/CullSettings.cpp +++ b/src/osg/CullSettings.cpp @@ -12,9 +12,18 @@ */ #include +#include +#include + +#include using namespace osg; +CullSettings::CullSettings(const CullSettings& cs) +{ + setCullSettings(cs); +} + void CullSettings::setDefaults() { _cullingMode = DEFAULT_CULLING; @@ -51,3 +60,60 @@ void CullSettings::setCullSettings(const CullSettings& settings) _LODScale = settings._LODScale; _smallFeatureCullingPixelSize = settings._smallFeatureCullingPixelSize; } + +static ApplicationUsageProxy ApplicationUsageProxyCullSettings_e0(ApplicationUsage::ENVIRONMENTAL_VARIABLE,"OSG_COMPUTE_NEAR_FAR_MODE ","DO_NOT_COMPUTE_NEAR_FAR | COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES | COMPUTE_NEAR_FAR_USING_PRIMITIVES"); +static ApplicationUsageProxy ApplicationUsageProxyCullSettings_e1(ApplicationUsage::ENVIRONMENTAL_VARIABLE,"OSG_NEAR_FAR_RATIO ","Set the ratio between near and far planes - must greater than 0.0 but less than 1.0."); + +void CullSettings::readEnvironmentalVariables() +{ + osg::notify(osg::INFO)<<"CullSettings::readEnvironmentalVariables()"<addCommandLineOption("--COMPUTE_NEAR_FAR_MODE ","DO_NOT_COMPUTE_NEAR_FAR | COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES | COMPUTE_NEAR_FAR_USING_PRIMITIVES"); + arguments.getApplicationUsage()->addCommandLineOption("--NEAR_FAR_RATIO ","Set the ratio between near and far planes - must greater than 0.0 but less than 1.0."); + } + + std::string str; + while(arguments.read("--COMPUTE_NEAR_FAR_MODE",str)) + { + if (str=="DO_NOT_COMPUTE_NEAR_FAR") _computeNearFar = DO_NOT_COMPUTE_NEAR_FAR; + else if (str=="COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES") _computeNearFar = COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES; + else if (str=="COMPUTE_NEAR_FAR_USING_PRIMITIVES") _computeNearFar = COMPUTE_NEAR_FAR_USING_PRIMITIVES; + + osg::notify(osg::INFO)<<"Set compute near far mode to "<<_computeNearFar<