Added ImageSequence IO support in Texture classes

This commit is contained in:
Robert Osfield
2008-07-22 12:40:02 +00:00
parent 5ab73e9f80
commit 14771d3a4d
6 changed files with 203 additions and 62 deletions

View File

@@ -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;
}

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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)

View File

@@ -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;
}
}
}