diff --git a/VisualStudio/osgPlugins/osg/dot_osg.dsp b/VisualStudio/osgPlugins/osg/dot_osg.dsp index d3d2b614c..5a11b468d 100755 --- a/VisualStudio/osgPlugins/osg/dot_osg.dsp +++ b/VisualStudio/osgPlugins/osg/dot_osg.dsp @@ -306,6 +306,10 @@ SOURCE=..\..\..\src\osgPlugins\osg\Texture3D.cpp # End Source File # Begin Source File +SOURCE=..\..\..\src\osgPlugins\osg\TextureRectangle.cpp +# End Source File +# Begin Source File + SOURCE=..\..\..\src\osgPlugins\osg\TextureCubeMap.cpp # End Source File # Begin Source File diff --git a/src/osg/StateSet.cpp b/src/osg/StateSet.cpp index 3dfb35b0e..c1445f621 100644 --- a/src/osg/StateSet.cpp +++ b/src/osg/StateSet.cpp @@ -45,6 +45,7 @@ class TextureGLModeSet _textureModeSet.insert(GL_TEXTURE_3D); _textureModeSet.insert(GL_TEXTURE_CUBE_MAP); + _textureModeSet.insert(GL_TEXTURE_RECTANGLE_NV); _textureModeSet.insert(GL_TEXTURE_GEN_Q); _textureModeSet.insert(GL_TEXTURE_GEN_R); diff --git a/src/osgPlugins/osg/GNUmakefile b/src/osgPlugins/osg/GNUmakefile index 573d9148d..5c3c4b8f3 100644 --- a/src/osgPlugins/osg/GNUmakefile +++ b/src/osgPlugins/osg/GNUmakefile @@ -56,6 +56,7 @@ CXXFILES =\ Texture1D.cpp\ Texture2D.cpp\ Texture3D.cpp\ + TextureRectangle.cpp\ TextureCubeMap.cpp\ Transform.cpp\ diff --git a/src/osgPlugins/osg/StateSet.cpp b/src/osgPlugins/osg/StateSet.cpp index aba507f9c..c77073271 100644 --- a/src/osgPlugins/osg/StateSet.cpp +++ b/src/osgPlugins/osg/StateSet.cpp @@ -83,6 +83,7 @@ void initGLNames() ADD_NAME("GL_TEXTURE_3D",GL_TEXTURE_3D) ADD_NAME("GL_TEXTURE_CUBE_MAP",GL_TEXTURE_CUBE_MAP); + ADD_NAME("GL_TEXTURE_RECTANGLE",GL_TEXTURE_RECTANGLE_NV); ADD_NAME("GL_TEXTURE_GEN_Q",GL_TEXTURE_GEN_Q) ADD_NAME("GL_TEXTURE_GEN_R",GL_TEXTURE_GEN_R) @@ -113,6 +114,7 @@ void initGLNames() s_TextureGLModeSet.insert(GL_TEXTURE_3D); s_TextureGLModeSet.insert(GL_TEXTURE_CUBE_MAP); + s_TextureGLModeSet.insert(GL_TEXTURE_RECTANGLE_NV); s_TextureGLModeSet.insert(GL_TEXTURE_GEN_Q); s_TextureGLModeSet.insert(GL_TEXTURE_GEN_R); diff --git a/src/osgPlugins/osg/TextureRectangle.cpp b/src/osgPlugins/osg/TextureRectangle.cpp new file mode 100644 index 000000000..0b79f7967 --- /dev/null +++ b/src/osgPlugins/osg/TextureRectangle.cpp @@ -0,0 +1,70 @@ +#include "osg/TextureRectangle" + +#include "osgDB/Registry" +#include "osgDB/Input" +#include "osgDB/Output" + +using namespace osg; +using namespace osgDB; + +// forward declare functions to use later. +bool TextureRectangle_readLocalData(Object& obj, Input& fr); +bool TextureRectangle_writeLocalData(const Object& obj, Output& fw); + +bool TextureRectangle_matchWrapStr(const char* str,TextureRectangle::WrapMode& wrap); +const char* TextureRectangle_getWrapStr(TextureRectangle::WrapMode wrap); +bool TextureRectangle_matchFilterStr(const char* str,TextureRectangle::FilterMode& filter); +const char* TextureRectangle_getFilterStr(TextureRectangle::FilterMode filter); +bool TextureRectangle_matchInternalFormatModeStr(const char* str,TextureRectangle::InternalFormatMode& mode); +const char* TextureRectangle_getInternalFormatModeStr(TextureRectangle::InternalFormatMode mode); +bool TextureRectangle_matchInternalFormatStr(const char* str,int& value); +const char* TextureRectangle_getInternalFormatStr(int value); + +// register the read and write functions with the osgDB::Registry. +RegisterDotOsgWrapperProxy g_TextureRectangleProxy +( + new osg::TextureRectangle, + "TextureRectangle", + "Object StateAttribute TextureRectangle TextureBase", + &TextureRectangle_readLocalData, + &TextureRectangle_writeLocalData +); + +bool TextureRectangle_readLocalData(Object& obj, Input& fr) +{ + bool iteratorAdvanced = false; + + TextureRectangle& texture = static_cast(obj); + + if (fr[0].matchWord("file") && fr[1].isString()) + { + std::string filename = fr[1].getStr(); + Image* image = fr.readImage(filename.c_str()); + if (image) + { + // name will have already been set by the image plugin, + // but it will have absolute path, so will override it + // here to keep the original name intact. + //image->setFileName(filename); + texture.setImage(image); + } + + fr += 2; + iteratorAdvanced = true; + } + + return iteratorAdvanced; +} + + +bool TextureRectangle_writeLocalData(const Object& obj, Output& fw) +{ + const TextureRectangle& texture = static_cast(obj); + + if (texture.getImage() && !(texture.getImage()->getFileName().empty())) + { + fw.indent() << "file "<getFileName()))<< std::endl; + } + + return true; +}