Added osg::Image::set/getWriteHint() that allows images themselves to control how

they are written to disk, either inline or as an external file.  Added support for
this in the .ive plugin.  Default of WriteHint is NO_PREFERNCE, in which case it's
up to the reader/writer to decide.
This commit is contained in:
Robert Osfield
2008-09-10 11:26:30 +00:00
parent c478ad08fc
commit 45ccf11161
9 changed files with 56 additions and 10 deletions

View File

@@ -1125,8 +1125,27 @@ void DataOutputStream::writeNode(const osg::Node* node)
}
}
IncludeImageMode DataOutputStream::getIncludeImageMode(const osg::Image* image) const
{
if (image)
{
if (image->getWriteHint()==osg::Image::STORE_INLINE)
{
return IMAGE_INCLUDE_DATA;
}
else if (image->getWriteHint()==osg::Image::EXTERNAL_FILE)
{
return IMAGE_REFERENCE_FILE;
}
}
return getIncludeImageMode();
}
void DataOutputStream::writeImage(osg::Image *image)
{
IncludeImageMode mode = getIncludeImageMode(image);
if ( getVersion() >= VERSION_0029)
{
osg::ImageSequence* is = dynamic_cast<osg::ImageSequence*>(image);
@@ -1137,19 +1156,20 @@ void DataOutputStream::writeImage(osg::Image *image)
else
{
writeInt(IVEIMAGE);
writeChar(getIncludeImageMode());
writeImage(getIncludeImageMode(),image);
writeChar(mode);
writeImage(mode,image);
}
}
else
{
writeChar(getIncludeImageMode());
writeImage(getIncludeImageMode(),image);
writeChar(mode);
writeImage(mode,image);
}
}
void DataOutputStream::writeImage(IncludeImageMode mode, osg::Image *image)
{
osg::notify(osg::NOTICE)<<"DataOutputStream::writeImage("<<mode<<" image->getFileName()="<<image->getFileName()<<std::endl;
switch(mode) {
case IMAGE_INCLUDE_DATA:
// Include image data in stream