Added ImageSequence IO support in Texture classes
This commit is contained in:
@@ -21,25 +21,91 @@ RegisterDotOsgWrapperProxy g_ImageSequenceProxy
|
||||
&ImageSequence_writeLocalData
|
||||
);
|
||||
|
||||
bool ImageSequence_readLocalData(Object& /*obj*/, Input& /*fr*/)
|
||||
bool ImageSequence_readLocalData(Object& obj, Input& fr)
|
||||
{
|
||||
bool iteratorAdvanced = false;
|
||||
|
||||
// Image& image = static_cast<ImageSequence&>(obj);
|
||||
ImageSequence& is = static_cast<ImageSequence&>(obj);
|
||||
|
||||
// no current image reading code
|
||||
// as it is all handled by osg::Registry::readImage() via plugins.
|
||||
if (fr.matchSequence("FileNames {"))
|
||||
{
|
||||
fr += 2;
|
||||
iteratorAdvanced = true;
|
||||
int entry = fr[0].getNoNestedBrackets();
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets() >= entry)
|
||||
{
|
||||
if (fr[0].getStr())
|
||||
{
|
||||
#if 1
|
||||
is.addImageFile(fr[0].getStr());
|
||||
#else
|
||||
osg::ref_ptr<osg::Image> image = fr.readImage(fr[0].getStr());
|
||||
if (image.valid()) is.addImage(image.get());
|
||||
#endif
|
||||
}
|
||||
++fr;
|
||||
}
|
||||
}
|
||||
|
||||
if (fr.matchSequence("Images {"))
|
||||
{
|
||||
fr += 2;
|
||||
iteratorAdvanced = true;
|
||||
int entry = fr[0].getNoNestedBrackets();
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets() >= entry)
|
||||
{
|
||||
if (fr[0].getStr())
|
||||
{
|
||||
osg::ref_ptr<osg::Image> image = fr.readImage(fr[0].getStr());
|
||||
if (image.valid()) is.addImage(image.get());
|
||||
}
|
||||
++fr;
|
||||
}
|
||||
}
|
||||
|
||||
return iteratorAdvanced;
|
||||
}
|
||||
|
||||
|
||||
bool ImageSequence_writeLocalData(const Object& /*obj*/, Output& /*fw*/)
|
||||
bool ImageSequence_writeLocalData(const Object& obj, Output& fw)
|
||||
{
|
||||
// const ImageSequence& image = static_cast<const ImageSequence&>(obj);
|
||||
const ImageSequence& is = static_cast<const ImageSequence&>(obj);
|
||||
|
||||
// no current image writing code here
|
||||
// as it is all handled by osg::Registry::writeImage() via plugins.
|
||||
|
||||
if (!is.getFileNames().empty())
|
||||
{
|
||||
fw.indent()<<"FileNames {"<<std::endl;
|
||||
fw.moveIn();
|
||||
|
||||
const osg::ImageSequence::FileNames& names = is.getFileNames();
|
||||
for(osg::ImageSequence::FileNames::const_iterator itr = names.begin();
|
||||
itr != names.end();
|
||||
++itr)
|
||||
{
|
||||
fw.indent()<<*itr<<std::endl;
|
||||
}
|
||||
|
||||
fw.moveOut();
|
||||
fw.indent()<<"}"<<std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
fw.indent()<<"Images {"<<std::endl;
|
||||
fw.moveIn();
|
||||
|
||||
const osg::ImageSequence::Images& images = is.getImages();
|
||||
for(osg::ImageSequence::Images::const_iterator itr = images.begin();
|
||||
itr != images.end();
|
||||
++itr)
|
||||
{
|
||||
if (!(*itr)->getFileName().empty()) fw.indent()<<(*itr)->getFileName()<<std::endl;
|
||||
}
|
||||
|
||||
fw.moveOut();
|
||||
fw.indent()<<"}"<<std::endl;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "osg/Texture1D"
|
||||
#include "osg/ImageSequence"
|
||||
|
||||
#include "osgDB/Registry"
|
||||
#include "osgDB/Input"
|
||||
@@ -54,6 +55,12 @@ bool Texture1D_readLocalData(Object& obj, Input& fr)
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr[0].matchWord("ImageSequence") || fr[0].matchWord("Image"))
|
||||
{
|
||||
osg::Image* image = fr.readImage();
|
||||
if (image) texture.setImage(image);
|
||||
}
|
||||
|
||||
return iteratorAdvanced;
|
||||
}
|
||||
|
||||
@@ -64,19 +71,27 @@ bool Texture1D_writeLocalData(const Object& obj, Output& fw)
|
||||
|
||||
if (texture.getImage())
|
||||
{
|
||||
std::string fileName = texture.getImage()->getFileName();
|
||||
if (fw.getOutputTextureFiles())
|
||||
const osg::ImageSequence* is = dynamic_cast<const osg::ImageSequence*>(texture.getImage());
|
||||
if (is)
|
||||
{
|
||||
if (fileName.empty())
|
||||
{
|
||||
fileName = fw.getTextureFileNameForOutput();
|
||||
}
|
||||
osgDB::writeImageFile(*texture.getImage(), fileName);
|
||||
fw.writeObject(*is);
|
||||
}
|
||||
|
||||
if (!fileName.empty())
|
||||
{
|
||||
fw.indent() << "file "<<fw.wrapString(fw.getFileNameForOutput(fileName))<< std::endl;
|
||||
else
|
||||
{
|
||||
std::string fileName = texture.getImage()->getFileName();
|
||||
if (fw.getOutputTextureFiles())
|
||||
{
|
||||
if (fileName.empty())
|
||||
{
|
||||
fileName = fw.getTextureFileNameForOutput();
|
||||
}
|
||||
osgDB::writeImageFile(*texture.getImage(), fileName);
|
||||
}
|
||||
|
||||
if (!fileName.empty())
|
||||
{
|
||||
fw.indent() << "file "<<fw.wrapString(fw.getFileNameForOutput(fileName))<< std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "osg/Texture2D"
|
||||
#include "osg/ImageSequence"
|
||||
|
||||
#include "osgDB/Registry"
|
||||
#include "osgDB/Input"
|
||||
@@ -62,6 +63,12 @@ bool Texture2D_readLocalData(Object& obj, Input& fr)
|
||||
fr += 2;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr[0].matchWord("ImageSequence") || fr[0].matchWord("Image"))
|
||||
{
|
||||
osg::Image* image = fr.readImage();
|
||||
if (image) texture.setImage(image);
|
||||
}
|
||||
|
||||
return iteratorAdvanced;
|
||||
}
|
||||
@@ -72,19 +79,27 @@ bool Texture2D_writeLocalData(const Object& obj, Output& fw)
|
||||
|
||||
if (texture.getImage())
|
||||
{
|
||||
std::string fileName = texture.getImage()->getFileName();
|
||||
if (fw.getOutputTextureFiles())
|
||||
const osg::ImageSequence* is = dynamic_cast<const osg::ImageSequence*>(texture.getImage());
|
||||
if (is)
|
||||
{
|
||||
if (fileName.empty())
|
||||
{
|
||||
fileName = fw.getTextureFileNameForOutput();
|
||||
}
|
||||
osgDB::writeImageFile(*texture.getImage(), fileName);
|
||||
fw.writeObject(*is);
|
||||
}
|
||||
|
||||
if (!fileName.empty())
|
||||
{
|
||||
fw.indent() << "file "<<fw.wrapString(fw.getFileNameForOutput(fileName))<< std::endl;
|
||||
else
|
||||
{
|
||||
std::string fileName = texture.getImage()->getFileName();
|
||||
if (fw.getOutputTextureFiles())
|
||||
{
|
||||
if (fileName.empty())
|
||||
{
|
||||
fileName = fw.getTextureFileNameForOutput();
|
||||
}
|
||||
osgDB::writeImageFile(*texture.getImage(), fileName);
|
||||
}
|
||||
|
||||
if (!fileName.empty())
|
||||
{
|
||||
fw.indent() << "file "<<fw.wrapString(fw.getFileNameForOutput(fileName))<< std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "osg/Texture3D"
|
||||
#include "osg/ImageSequence"
|
||||
|
||||
#include "osgDB/Registry"
|
||||
#include "osgDB/Input"
|
||||
@@ -53,6 +54,12 @@ bool Texture3D_readLocalData(Object& obj, Input& fr)
|
||||
fr += 2;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr[0].matchWord("ImageSequence") || fr[0].matchWord("Image"))
|
||||
{
|
||||
osg::Image* image = fr.readImage();
|
||||
if (image) texture.setImage(image);
|
||||
}
|
||||
|
||||
return iteratorAdvanced;
|
||||
}
|
||||
@@ -63,19 +70,27 @@ bool Texture3D_writeLocalData(const Object& obj, Output& fw)
|
||||
|
||||
if (texture.getImage())
|
||||
{
|
||||
std::string fileName = texture.getImage()->getFileName();
|
||||
if (fw.getOutputTextureFiles())
|
||||
const osg::ImageSequence* is = dynamic_cast<const osg::ImageSequence*>(texture.getImage());
|
||||
if (is)
|
||||
{
|
||||
if (fileName.empty())
|
||||
{
|
||||
fileName = fw.getTextureFileNameForOutput();
|
||||
}
|
||||
osgDB::writeImageFile(*texture.getImage(), fileName);
|
||||
fw.writeObject(*is);
|
||||
}
|
||||
|
||||
if (!fileName.empty())
|
||||
{
|
||||
fw.indent() << "file "<<fw.wrapString(fw.getFileNameForOutput(fileName))<< std::endl;
|
||||
else
|
||||
{
|
||||
std::string fileName = texture.getImage()->getFileName();
|
||||
if (fw.getOutputTextureFiles())
|
||||
{
|
||||
if (fileName.empty())
|
||||
{
|
||||
fileName = fw.getTextureFileNameForOutput();
|
||||
}
|
||||
osgDB::writeImageFile(*texture.getImage(), fileName);
|
||||
}
|
||||
|
||||
if (!fileName.empty())
|
||||
{
|
||||
fw.indent() << "file "<<fw.wrapString(fw.getFileNameForOutput(fileName))<< std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "osg/TextureCubeMap"
|
||||
#include "osg/ImageSequence"
|
||||
|
||||
#include "osgDB/Registry"
|
||||
#include "osgDB/Input"
|
||||
@@ -27,7 +28,13 @@ RegisterDotOsgWrapperProxy g_TextureCubeMapProxy
|
||||
matched = false;\
|
||||
if (fr[1].matchWord(#FACE)) \
|
||||
{\
|
||||
if (fr[2].isString())\
|
||||
if (fr[2].matchWord("ImageSequence") || fr[2].matchWord("Image")) \
|
||||
{ \
|
||||
osg::Image* image = fr.readImage(); \
|
||||
if (image) texture.setImage(osg::TextureCubeMap::FACE,image); \
|
||||
\
|
||||
} \
|
||||
else if (fr[2].isString())\
|
||||
{ \
|
||||
Image* image = fr.readImage(fr[2].getStr());\
|
||||
if (image) texture.setImage(osg::TextureCubeMap::FACE,image);\
|
||||
@@ -63,20 +70,28 @@ bool TextureCubeMap_readLocalData(Object& obj, Input& fr)
|
||||
const osg::Image* image = texture.getImage(osg::TextureCubeMap::FACE);\
|
||||
if (image)\
|
||||
{\
|
||||
std::string fileName = image->getFileName();\
|
||||
if (fw.getOutputTextureFiles())\
|
||||
{\
|
||||
if (fileName.empty())\
|
||||
const osg::ImageSequence* is = dynamic_cast<const osg::ImageSequence*>(image); \
|
||||
if (is) \
|
||||
{ \
|
||||
fw.writeObject(*is); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
std::string fileName = image->getFileName();\
|
||||
if (fw.getOutputTextureFiles())\
|
||||
{\
|
||||
fileName = fw.getTextureFileNameForOutput();\
|
||||
if (fileName.empty())\
|
||||
{\
|
||||
fileName = fw.getTextureFileNameForOutput();\
|
||||
}\
|
||||
osgDB::writeImageFile(*image, fileName);\
|
||||
}\
|
||||
if (!fileName.empty())\
|
||||
{\
|
||||
fw.indent() << "image "<<#FACE<<" "<<fw.wrapString(fw.getFileNameForOutput(fileName))<< std::endl;\
|
||||
}\
|
||||
osgDB::writeImageFile(*image, fileName);\
|
||||
}\
|
||||
if (!fileName.empty())\
|
||||
{\
|
||||
fw.indent() << "image "<<#FACE<<" "<<fw.wrapString(fw.getFileNameForOutput(fileName))<< std::endl;\
|
||||
}\
|
||||
}\
|
||||
} \
|
||||
}
|
||||
|
||||
bool TextureCubeMap_writeLocalData(const Object& obj, Output& fw)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "osg/TextureRectangle"
|
||||
#include "osg/ImageSequence"
|
||||
|
||||
#include "osgDB/Registry"
|
||||
#include "osgDB/Input"
|
||||
@@ -53,6 +54,12 @@ bool TextureRectangle_readLocalData(Object& obj, Input& fr)
|
||||
fr += 2;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr[0].matchWord("ImageSequence") || fr[0].matchWord("Image"))
|
||||
{
|
||||
osg::Image* image = fr.readImage();
|
||||
if (image) texture.setImage(image);
|
||||
}
|
||||
|
||||
return iteratorAdvanced;
|
||||
}
|
||||
@@ -64,19 +71,27 @@ bool TextureRectangle_writeLocalData(const Object& obj, Output& fw)
|
||||
|
||||
if (texture.getImage())
|
||||
{
|
||||
std::string fileName = texture.getImage()->getFileName();
|
||||
if (fw.getOutputTextureFiles())
|
||||
const osg::ImageSequence* is = dynamic_cast<const osg::ImageSequence*>(texture.getImage());
|
||||
if (is)
|
||||
{
|
||||
if (fileName.empty())
|
||||
{
|
||||
fileName = fw.getTextureFileNameForOutput();
|
||||
}
|
||||
osgDB::writeImageFile(*texture.getImage(), fileName);
|
||||
fw.writeObject(*is);
|
||||
}
|
||||
|
||||
if (!fileName.empty())
|
||||
{
|
||||
fw.indent() << "file "<<fw.wrapString(fw.getFileNameForOutput(fileName))<< std::endl;
|
||||
else
|
||||
{
|
||||
std::string fileName = texture.getImage()->getFileName();
|
||||
if (fw.getOutputTextureFiles())
|
||||
{
|
||||
if (fileName.empty())
|
||||
{
|
||||
fileName = fw.getTextureFileNameForOutput();
|
||||
}
|
||||
osgDB::writeImageFile(*texture.getImage(), fileName);
|
||||
}
|
||||
|
||||
if (!fileName.empty())
|
||||
{
|
||||
fw.indent() << "file "<<fw.wrapString(fw.getFileNameForOutput(fileName))<< std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user