Put in place the class to implement GLSL support in .ive

This commit is contained in:
Robert Osfield
2005-05-10 20:20:20 +00:00
parent d681d47c72
commit d9c50ee7c4
15 changed files with 349 additions and 9 deletions

View File

@@ -87,6 +87,17 @@ void StateSet::write(DataOutputStream* out){
out->writeInt(aitr->second.second);
}
}
if ( out->getVersion() >= VERSION_0010 )
{
// Write stateset attributes, this could for instance be alphafunctions, materials, etc.
StateSet::UniformList ul = getUniformList();
out->writeInt(ul.size());
for(StateSet::UniformList::iterator uitr=ul.begin(); uitr!=ul.end(); ++uitr){
out->writeUniform(uitr->second.first.get());
out->writeInt(uitr->second.second);
}
}
}
void StateSet::read(DataInputStream* in){
@@ -126,7 +137,7 @@ void StateSet::read(DataInputStream* in){
// Read stateset modes.
int size = in->readInt();
int i;
int i;
for(i=0;i<size;i++){
int mode = in->readInt();
int value = in->readInt();
@@ -142,7 +153,7 @@ void StateSet::read(DataInputStream* in){
// Read texture stateset mode.
int nUnits = in->readInt();
int unit;
int unit;
for(unit=0;unit<nUnits;unit++){
size = in->readInt();
for(i=0;i<size;i++){
@@ -161,6 +172,16 @@ void StateSet::read(DataInputStream* in){
setTextureAttribute(unit, attribute, (osg::StateAttribute::OverrideValue)in->readInt());
}
}
if ( in->getVersion() >= VERSION_0010 )
{
// Read uniforms
size = in->readInt();
for(i=0;i<size;i++){
osg::Uniform* uniform = in->readUniform();
addUniform(uniform, (osg::StateAttribute::OverrideValue)in->readInt());
}
}
}
else{
throw Exception("StateSet::read(): Expected StateSet identification");