diff --git a/src/osgWrappers/deprecated-dotosg/osg/LibraryWrapper.cpp b/src/osgWrappers/deprecated-dotosg/osg/LibraryWrapper.cpp index 9d44d1084..8e49fec93 100644 --- a/src/osgWrappers/deprecated-dotosg/osg/LibraryWrapper.cpp +++ b/src/osgWrappers/deprecated-dotosg/osg/LibraryWrapper.cpp @@ -87,6 +87,7 @@ USE_DOTOSGWRAPPER(OldTexture) USE_DOTOSGWRAPPER(Texture2D) USE_DOTOSGWRAPPER(Texture3D) USE_DOTOSGWRAPPER(TextureCubeMap) +USE_DOTOSGWRAPPER(Texture2DArray) USE_DOTOSGWRAPPER(TextureRectangle) USE_DOTOSGWRAPPER(TransferFunction1D_Proxy) USE_DOTOSGWRAPPER(Transform) diff --git a/src/osgWrappers/deprecated-dotosg/osg/Texture2DArray.cpp b/src/osgWrappers/deprecated-dotosg/osg/Texture2DArray.cpp new file mode 100644 index 000000000..82d85f313 --- /dev/null +++ b/src/osgWrappers/deprecated-dotosg/osg/Texture2DArray.cpp @@ -0,0 +1,111 @@ +#include "osg/Texture2DArray" +#include "osg/ImageSequence" + +#include "osgDB/Registry" +#include "osgDB/Input" +#include "osgDB/Output" +#include "osgDB/WriteFile" + +using namespace osg; +using namespace osgDB; + +// forward declare functions to use later. +bool Texture2DArray_readLocalData(Object& obj, Input& fr); +bool Texture2DArray_writeLocalData(const Object& obj, Output& fw); + +// register the read and write functions with the osgDB::Registry. +REGISTER_DOTOSGWRAPPER(Texture2DArray) + ( + new osg::Texture2DArray, + "Texture2DArray", + "Object StateAttribute Texture2DArray TextureBase", + &Texture2DArray_readLocalData, + &Texture2DArray_writeLocalData + ); + +bool Texture2DArray_readLocalData(Object& obj, Input& fr) +{ + bool iteratorAdvanced = false; + int index = 0; + GLint textureW = 0; + GLint textureH = 0; + bool matched=true; + + Texture2DArray& texture = static_cast(obj); + + while (fr[0].matchWord("file") || + fr[0].matchWord("ImageSequence") || + fr[0].matchWord("Image") && matched) + { + matched = false; + Image* image = NULL; + if (fr[0].matchWord("file") && fr[1].isString()) + { + std::string filename = fr[1].getStr(); + image = fr.readImage(filename.c_str()); + fr += 2; + iteratorAdvanced = true; + matched = true; + } + else if (fr[0].matchWord("ImageSequence") || fr[0].matchWord("Image")) + { + image = fr.readImage(); + fr += 1; + iteratorAdvanced = true; + matched = true; + } + + if(image) + { + if(textureW == 0) //if first image,save size + { + textureW = image->s(); + textureH = image->t(); + } + else if(textureW != image->s() || + textureH != image->t()) + { + //scale to match size of first image. + image->scaleImage(textureW,textureH,1); + } + texture.setImage(index,image); + } + index++; + } + return iteratorAdvanced; +} + +bool Texture2DArray_writeLocalData(const Object& obj, Output& fw) +{ + const Texture2DArray& ta = static_cast(obj); + + for(size_t i = 0; i < ta.getNumImages();i++) + { + const Image* image = ta.getImage(i); + if(image) + { + const osg::ImageSequence* is = dynamic_cast(image); + if (is) + { + fw.writeObject(*is); + } + else + { + std::string fileName = image->getFileName(); + if (fw.getOutputTextureFiles()) + { + if (fileName.empty()) + { + fileName = fw.getTextureFileNameForOutput(); + } + osgDB::writeImageFile(*image, fileName); + } + if (!fileName.empty()) + { + fw.indent() << "file "<