Files
OpenSceneGraph/src/osgPlugins/ive/Texture.cpp
2012-03-21 17:36:20 +00:00

135 lines
3.9 KiB
C++

/**********************************************************************
*
* FILE: Texture.cpp
*
* DESCRIPTION: Read/Write osg::Texture in binary format to disk.
*
* CREATED BY: Auto generated by iveGenerated
* and later modified by Rune Schmidt Jensen.
*
* HISTORY: Created 20.3.2003
*
* Copyright 2003 VR-C
**********************************************************************/
#include "Exception.h"
#include "Texture.h"
#include "Object.h"
using namespace ive;
void Texture::write(DataOutputStream* out){
// Write Texture's identification.
out->writeInt(IVETEXTURE);
// If the osg class is inherited by any other class we should also write this to file.
osg::Object* obj = dynamic_cast<osg::Object*>(this);
if(obj)
{
((ive::Object*)(obj))->write(out);
}
else
out_THROW_EXCEPTION("Texture::write(): Could not cast this osg::Texture to an osg::Object.");
// Write Texture's properties.
out->writeInt(_wrap_s);
out->writeInt(_wrap_t);
out->writeInt(_wrap_r);
out->writeInt(_min_filter);
out->writeInt(_mag_filter);
out->writeFloat(_maxAnisotropy);
out->writeVec4(_borderColor);
out->writeInt(_internalFormatMode);
if ( out->getVersion() >= VERSION_0008 )
{
out->writeInt(_internalFormat);
}
if ( out->getVersion() >= VERSION_0009 )
{
out->writeInt(_borderWidth);
out->writeBool(_useHardwareMipMapGeneration);
out->writeBool(_unrefImageDataAfterApply);
out->writeBool(_clientStorageHint);
out->writeBool(_resizeNonPowerOfTwoHint);
}
if ( out->getVersion() >= VERSION_0014 )
{
out->writeInt(_sourceFormat);
out->writeInt(_sourceType);
}
if( out->getVersion() >= VERSION_0043 )
{
out->writeBool( _use_shadow_comparison );
out->writeInt( _shadow_compare_func );
out->writeInt( _shadow_texture_mode );
}
}
void Texture::read(DataInputStream* in)
{
// Read Texture's identification.
int id = in->peekInt();
if(id == IVETEXTURE)
{
// Read Texture's identification.
id = in->readInt();
// If the osg class is inherited by any other class we should also read this from file.
osg::Object* obj = dynamic_cast<osg::Object*>(this);
if(obj)
{
((ive::Object*)(obj))->read(in);
}
else
in_THROW_EXCEPTION("Texture::read(): Could not cast this osg::Texture to an osg::Object.");
// Read properties
_wrap_s = (osg::Texture::WrapMode)in->readInt();
_wrap_t = (osg::Texture::WrapMode)in->readInt();
_wrap_r = (osg::Texture::WrapMode)in->readInt();
_min_filter = (osg::Texture::FilterMode)in->readInt();
_mag_filter = (osg::Texture::FilterMode)in->readInt();
_maxAnisotropy = in->readFloat();
_borderColor = in->readVec4();
_internalFormatMode = (osg::Texture::InternalFormatMode)in->readInt();
if ( in->getVersion() >= VERSION_0008 )
{
_internalFormat = in->readInt();
}
if ( in->getVersion() >= VERSION_0009 )
{
_borderWidth = in->readInt();
_useHardwareMipMapGeneration = in->readBool();
_unrefImageDataAfterApply = in->readBool();
_clientStorageHint = in->readBool();
_resizeNonPowerOfTwoHint = in->readBool();
}
if ( in->getVersion() >= VERSION_0014 )
{
_sourceFormat = in->readInt();
_sourceType = in->readInt();
}
if( in->getVersion() >= VERSION_0043 )
{
_use_shadow_comparison = in->readBool();
_shadow_compare_func = (osg::Texture::ShadowCompareFunc)in->readInt();
_shadow_texture_mode = (osg::Texture::ShadowTextureMode)in->readInt();
}
}
else
{
in_THROW_EXCEPTION("Texture::read(): Expected Texture identification.");
}
}