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

@@ -40,6 +40,7 @@
#include "LightModel.h"
#include "ProxyNode.h"
#include "FrontFace.h"
#include "Program.h"
#include "Group.h"
#include "MatrixTransform.h"
@@ -58,6 +59,7 @@
#include "OccluderNode.h"
#include "Impostor.h"
#include "CoordinateSystemNode.h"
#include "Uniform.h"
#include "LightPointNode.h"
#include "MultiSwitch.h"
@@ -775,6 +777,10 @@ osg::StateAttribute* DataInputStream::readStateAttribute()
attribute = new osg::FrontFace();
((ive::FrontFace*)(attribute))->read(this);
}
else if(attributeID == IVEPROGRAM){
attribute = new osg::Program();
((ive::Program*)(attribute))->read(this);
}
else{
throw Exception("Unknown StateAttribute in StateSet::read()");
}
@@ -788,6 +794,30 @@ osg::StateAttribute* DataInputStream::readStateAttribute()
return attribute;
}
osg::Uniform* DataInputStream::readUniform()
{
// Read uniforms unique ID.
int id = readInt();
// See if uniform is already in the list.
UniformMap::iterator itr= _uniformMap.find(id);
if (itr!=_uniformMap.end()) return itr->second.get();
// Uniform is not in list.
// Create a new uniform,
osg::Uniform* uniform = new osg::Uniform();
// read its properties from stream
((ive::Uniform*)(uniform))->read(this);
// and add it to the uniform map,
_uniformMap[id] = uniform;
if (_verboseOutput) std::cout<<"read/writeUniform() ["<<id<<"]"<<std::endl;
return uniform;
}
osg::Drawable* DataInputStream::readDrawable()
{
// Read stateattributes unique ID.