From Michael Platings with tweaks from Robert Osfield, added Options::s/getPrecisionHint(..) to allow apps to hint to plugins about how to handle double precision geometry data.
This commit is contained in:
parent
51924431cd
commit
88f1b8f19a
@ -60,6 +60,30 @@ class OSGDB_EXPORT Options : public osg::Object
|
|||||||
CACHE_SHADERS
|
CACHE_SHADERS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Bit mask for which geometry attributes should be imported with double precision where source data is held in double precision
|
||||||
|
/// This is useful for data that will be pre-processed before rendering.
|
||||||
|
/// In general the geometry should be converted to floating point before rendering to ensure good performance.
|
||||||
|
enum PrecisionHint
|
||||||
|
{
|
||||||
|
FLOAT_PRECISION_ALL = 0,
|
||||||
|
|
||||||
|
DOUBLE_PRECISION_VERTEX = 1<<0,
|
||||||
|
DOUBLE_PRECISION_NORMAL = 1<<1,
|
||||||
|
DOUBLE_PRECISION_COLOR = 1<<2,
|
||||||
|
DOUBLE_PRECISION_SECONDARY_COLOR = 1<<3,
|
||||||
|
DOUBLE_PRECISION_FOG_COORD = 1<<4,
|
||||||
|
DOUBLE_PRECISION_TEX_COORD = 1<<5,
|
||||||
|
DOUBLE_PRECISION_VERTEX_ATTRIB = 1<<6,
|
||||||
|
|
||||||
|
DOUBLE_PRECISION_ALL = DOUBLE_PRECISION_VERTEX |
|
||||||
|
DOUBLE_PRECISION_NORMAL |
|
||||||
|
DOUBLE_PRECISION_COLOR |
|
||||||
|
DOUBLE_PRECISION_SECONDARY_COLOR |
|
||||||
|
DOUBLE_PRECISION_FOG_COORD |
|
||||||
|
DOUBLE_PRECISION_TEX_COORD |
|
||||||
|
DOUBLE_PRECISION_VERTEX_ATTRIB
|
||||||
|
};
|
||||||
|
|
||||||
/// range of options of whether to build kdtrees automatically on loading
|
/// range of options of whether to build kdtrees automatically on loading
|
||||||
enum BuildKdTreesHint
|
enum BuildKdTreesHint
|
||||||
{
|
{
|
||||||
@ -72,12 +96,14 @@ class OSGDB_EXPORT Options : public osg::Object
|
|||||||
Options():
|
Options():
|
||||||
osg::Object(true),
|
osg::Object(true),
|
||||||
_objectCacheHint(CACHE_ARCHIVES),
|
_objectCacheHint(CACHE_ARCHIVES),
|
||||||
|
_precisionHint(FLOAT_PRECISION_ALL),
|
||||||
_buildKdTreesHint(NO_PREFERENCE) {}
|
_buildKdTreesHint(NO_PREFERENCE) {}
|
||||||
|
|
||||||
Options(const std::string& str):
|
Options(const std::string& str):
|
||||||
osg::Object(true),
|
osg::Object(true),
|
||||||
_str(str),
|
_str(str),
|
||||||
_objectCacheHint(CACHE_ARCHIVES),
|
_objectCacheHint(CACHE_ARCHIVES),
|
||||||
|
_precisionHint(FLOAT_PRECISION_ALL),
|
||||||
_buildKdTreesHint(NO_PREFERENCE) {}
|
_buildKdTreesHint(NO_PREFERENCE) {}
|
||||||
|
|
||||||
Options(const Options& options,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
|
Options(const Options& options,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
|
||||||
@ -108,6 +134,11 @@ class OSGDB_EXPORT Options : public osg::Object
|
|||||||
/** Get whether the Registry::ObjectCache should be used by default.*/
|
/** Get whether the Registry::ObjectCache should be used by default.*/
|
||||||
CacheHintOptions getObjectCacheHint() const { return _objectCacheHint; }
|
CacheHintOptions getObjectCacheHint() const { return _objectCacheHint; }
|
||||||
|
|
||||||
|
/** Set which geometry attributes plugins should import at double precision. */
|
||||||
|
void setPrecisionHint(PrecisionHint hint) { _precisionHint = hint; }
|
||||||
|
|
||||||
|
/** Get which geometry attributes plugins should import at double precision. */
|
||||||
|
PrecisionHint getPrecisionHint() const { return _precisionHint; }
|
||||||
|
|
||||||
/** Set whether the KdTrees should be built for geometry in the loader model. */
|
/** Set whether the KdTrees should be built for geometry in the loader model. */
|
||||||
void setBuildKdTreesHint(BuildKdTreesHint hint) { _buildKdTreesHint = hint; }
|
void setBuildKdTreesHint(BuildKdTreesHint hint) { _buildKdTreesHint = hint; }
|
||||||
@ -200,6 +231,7 @@ class OSGDB_EXPORT Options : public osg::Object
|
|||||||
std::string _str;
|
std::string _str;
|
||||||
FilePathList _databasePaths;
|
FilePathList _databasePaths;
|
||||||
CacheHintOptions _objectCacheHint;
|
CacheHintOptions _objectCacheHint;
|
||||||
|
PrecisionHint _precisionHint;
|
||||||
BuildKdTreesHint _buildKdTreesHint;
|
BuildKdTreesHint _buildKdTreesHint;
|
||||||
osg::ref_ptr<AuthenticationMap> _authenticationMap;
|
osg::ref_ptr<AuthenticationMap> _authenticationMap;
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ Options::Options(const Options& options,const osg::CopyOp& copyop):
|
|||||||
_str(options._str),
|
_str(options._str),
|
||||||
_databasePaths(options._databasePaths),
|
_databasePaths(options._databasePaths),
|
||||||
_objectCacheHint(options._objectCacheHint),
|
_objectCacheHint(options._objectCacheHint),
|
||||||
|
_precisionHint(options._precisionHint),
|
||||||
_buildKdTreesHint(options._buildKdTreesHint),
|
_buildKdTreesHint(options._buildKdTreesHint),
|
||||||
_pluginData(options._pluginData),
|
_pluginData(options._pluginData),
|
||||||
_pluginStringData(options._pluginStringData),
|
_pluginStringData(options._pluginStringData),
|
||||||
|
Loading…
Reference in New Issue
Block a user