From d2b8468bf4a11a07e18f9636933227f71fb96364 Mon Sep 17 00:00:00 2001 From: Julien Valentin Date: Sat, 13 Jan 2018 21:16:16 +0100 Subject: [PATCH 1/3] add MinLOD MaxLOD and LODBias to Texture --- include/osg/Texture | 21 +++++++++++++++++++++ src/osg/Texture.cpp | 44 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/include/osg/Texture b/include/osg/Texture index 5fc6977b5..a4f744f68 100644 --- a/include/osg/Texture +++ b/include/osg/Texture @@ -521,6 +521,24 @@ class OSG_EXPORT Texture : public osg::StateAttribute /** Gets the maximum anisotropy value. */ inline float getMaxAnisotropy() const { return _maxAnisotropy; } + /** Sets the minimum level of detail value. */ + void setMinLOD(float minlod); + + /** Gets the minimum level of detail value. */ + inline float getMinLOD() const { return _minlod; } + + /** Sets the maximum level of detail value. */ + void setMaxLOD(float maxlod); + + /** Gets the maximum level of detail value. */ + inline float getMaxLOD() const { return _maxlod; } + + /** Gets the level of detail bias value. */ + void setLODBias(float lodbias); + + /** Sets the level of detail bias value. */ + inline float getLODBias() const { return _lodbias; } + /** Configure the source of texture swizzling for all channels */ inline void setSwizzle(const Vec4i& swizzle) { _swizzle = swizzle; dirtyTextureParameters(); }; @@ -839,6 +857,9 @@ class OSG_EXPORT Texture : public osg::StateAttribute FilterMode _min_filter; FilterMode _mag_filter; float _maxAnisotropy; + float _minlod; + float _maxlod; + float _lodbias; Vec4i _swizzle; bool _useHardwareMipMapGeneration; bool _unrefImageDataAfterApply; diff --git a/src/osg/Texture.cpp b/src/osg/Texture.cpp index b665c7aa5..786b688cb 100644 --- a/src/osg/Texture.cpp +++ b/src/osg/Texture.cpp @@ -1228,6 +1228,9 @@ Texture::Texture(): _min_filter(LINEAR_MIPMAP_LINEAR), // trilinear _mag_filter(LINEAR), _maxAnisotropy(1.0f), + _minlod(0.0f), + _maxlod(-1.0f), + _lodbias(0.0f), _swizzle(GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA), _useHardwareMipMapGeneration(true), _unrefImageDataAfterApply(false), @@ -1255,6 +1258,9 @@ Texture::Texture(const Texture& text,const CopyOp& copyop): _min_filter(text._min_filter), _mag_filter(text._mag_filter), _maxAnisotropy(text._maxAnisotropy), + _minlod(text._minlod), + _maxlod(text._maxlod), + _lodbias(text._lodbias), _swizzle(text._swizzle), _useHardwareMipMapGeneration(text._useHardwareMipMapGeneration), _unrefImageDataAfterApply(text._unrefImageDataAfterApply), @@ -1288,6 +1294,9 @@ int Texture::compareTexture(const Texture& rhs) const COMPARE_StateAttribute_Parameter(_min_filter) COMPARE_StateAttribute_Parameter(_mag_filter) COMPARE_StateAttribute_Parameter(_maxAnisotropy) + COMPARE_StateAttribute_Parameter(_minlod) + COMPARE_StateAttribute_Parameter(_maxlod) + COMPARE_StateAttribute_Parameter(_lodbias) COMPARE_StateAttribute_Parameter(_swizzle) COMPARE_StateAttribute_Parameter(_useHardwareMipMapGeneration) COMPARE_StateAttribute_Parameter(_internalFormatMode) @@ -1336,7 +1345,6 @@ void Texture::setWrap(WrapParameter which, WrapMode wrap) case WRAP_R : _wrap_r = wrap; dirtyTextureParameters(); break; default : OSG_WARN<<"Error: invalid 'which' passed Texture::setWrap("<<(unsigned int)which<<","<<(unsigned int)wrap<<")"<= 0) + { + glTexParameterf(target, GL_TEXTURE_MIN_LOD, _minlod); + glTexParameterf(target, GL_TEXTURE_MAX_LOD, _maxlod); + } + + glTexParameterf(target, GL_TEXTURE_LOD_BIAS, _lodbias); getTextureParameterDirty(state.getContextID()) = false; From 020bff3ab1095171fe2ace82d4b635ae3eb9bc7b Mon Sep 17 00:00:00 2001 From: Julien Valentin Date: Sat, 13 Jan 2018 21:19:25 +0100 Subject: [PATCH 2/3] increment SO version --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cde1104e..43d409031 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ SET(OPENSCENEGRAPH_MAJOR_VERSION 3) SET(OPENSCENEGRAPH_MINOR_VERSION 5) SET(OPENSCENEGRAPH_PATCH_VERSION 10) -SET(OPENSCENEGRAPH_SOVERSION 154) +SET(OPENSCENEGRAPH_SOVERSION 155) # set to 0 when not a release candidate, non zero means that any generated From 8894939577f1782b630039100746a361bba37242 Mon Sep 17 00:00:00 2001 From: Julien Valentin Date: Sat, 13 Jan 2018 21:20:32 +0100 Subject: [PATCH 3/3] add MinLOD MaxLOD and LODBias to Texture and its serializer as well as ShadowTextureMode None enum --- src/osgWrappers/serializers/osg/Texture.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/osgWrappers/serializers/osg/Texture.cpp b/src/osgWrappers/serializers/osg/Texture.cpp index 64bec3eeb..05c3bf8df 100644 --- a/src/osgWrappers/serializers/osg/Texture.cpp +++ b/src/osgWrappers/serializers/osg/Texture.cpp @@ -249,6 +249,7 @@ REGISTER_OBJECT_WRAPPER( Texture, ADD_ENUM_VALUE( LUMINANCE ); ADD_ENUM_VALUE( INTENSITY ); ADD_ENUM_VALUE( ALPHA ); + ADD_ENUM_VALUE( NONE ); END_ENUM_SERIALIZER(); // _shadow_texture_mode ADD_FLOAT_SERIALIZER( ShadowAmbient, 0.0f ); // _shadow_ambient @@ -265,4 +266,10 @@ REGISTER_OBJECT_WRAPPER( Texture, UPDATE_TO_VERSION_SCOPED( 98 ) ADD_USER_SERIALIZER( Swizzle ); // _swizzle } + { + UPDATE_TO_VERSION_SCOPED( 155 ) + ADD_FLOAT_SERIALIZER( MinLOD, 0.0f ); + ADD_FLOAT_SERIALIZER( MaxLOD, -1.0f ); + ADD_FLOAT_SERIALIZER( LODBias, 0.0f ); + } }