From Mike Weiblen, added support for samplers and mat4 to .osg
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
|
||||
/* file: src/osg/Uniform.cpp
|
||||
* author: Mike Weiblen 2005-04-07
|
||||
* author: Mike Weiblen 2005-04-21
|
||||
*/
|
||||
|
||||
#include <osg/Notify>
|
||||
@@ -110,7 +110,7 @@ int Uniform::compareData(const Uniform& rhs) const
|
||||
{
|
||||
// caller must ensure that _type==rhs._type
|
||||
|
||||
switch( repType(getType()) )
|
||||
switch( getGlApiType(getType()) )
|
||||
{
|
||||
case FLOAT:
|
||||
if( _data.f1 < rhs._data.f1 ) return -1;
|
||||
@@ -194,7 +194,7 @@ void Uniform::copyData(const Uniform& rhs)
|
||||
// caller must ensure that _type==rhs._type
|
||||
|
||||
int i;
|
||||
switch( repType(getType()) )
|
||||
switch( getGlApiType(getType()) )
|
||||
{
|
||||
case FLOAT:
|
||||
_data.f1 = rhs._data.f1;
|
||||
@@ -259,7 +259,7 @@ bool Uniform::isCompatibleType( Type t ) const
|
||||
{
|
||||
if( (t==UNDEFINED) || (getType()==UNDEFINED) ) return false;
|
||||
if( t == getType() ) return true;
|
||||
if( repType(t) == repType(getType()) ) return true;
|
||||
if( getGlApiType(t) == getGlApiType(getType()) ) return true;
|
||||
|
||||
osg::notify(osg::WARN)
|
||||
<< "Cannot assign between Uniform types " << getTypename(t)
|
||||
@@ -325,7 +325,7 @@ Uniform::Type Uniform::getTypeId( const std::string& tname )
|
||||
return UNDEFINED;
|
||||
}
|
||||
|
||||
Uniform::Type Uniform::repType( Type t )
|
||||
Uniform::Type Uniform::getGlApiType( Type t )
|
||||
{
|
||||
switch( t )
|
||||
{
|
||||
@@ -686,7 +686,7 @@ bool Uniform::get( bool& b0, bool& b1, bool& b2, bool& b3 ) const
|
||||
|
||||
void Uniform::apply(const GL2Extensions* ext, GLint location) const
|
||||
{
|
||||
switch( _type )
|
||||
switch( getGlApiType(getType()) )
|
||||
{
|
||||
case FLOAT:
|
||||
ext->glUniform1f( location, _data.f1 );
|
||||
@@ -733,7 +733,7 @@ void Uniform::apply(const GL2Extensions* ext, GLint location) const
|
||||
break;
|
||||
|
||||
default:
|
||||
osg::notify(osg::FATAL) << "how got here?" << std::endl;
|
||||
osg::notify(osg::FATAL) << "how got here? " __FILE__ ":" << __LINE__ << std::endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
#include "osgDB/Input"
|
||||
#include "osgDB/Output"
|
||||
|
||||
#include "Matrix.h"
|
||||
|
||||
using namespace osg;
|
||||
using namespace osgDB;
|
||||
using namespace std;
|
||||
@@ -39,16 +41,14 @@ bool Uniform_readLocalData(Object& obj, Input& fr)
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
|
||||
// TODO read uniform value based on type
|
||||
|
||||
if (fr[0].isWord())
|
||||
{
|
||||
uniform.setType( Uniform::getTypeId(fr[0].getStr()) );
|
||||
fr+=1;
|
||||
iteratorAdvanced = true;
|
||||
uniform.setType( Uniform::getTypeId(fr[0].getStr()) );
|
||||
fr+=1;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
|
||||
switch(uniform.getType())
|
||||
switch( Uniform::getGlApiType(uniform.getType()) )
|
||||
{
|
||||
case(osg::Uniform::FLOAT):
|
||||
{
|
||||
@@ -56,8 +56,8 @@ bool Uniform_readLocalData(Object& obj, Input& fr)
|
||||
if (fr[0].getFloat(value))
|
||||
{
|
||||
uniform.set(value);
|
||||
fr+=1;
|
||||
iteratorAdvanced = true;
|
||||
fr+=1;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -67,8 +67,8 @@ bool Uniform_readLocalData(Object& obj, Input& fr)
|
||||
if (fr[0].getFloat(value[0]) && fr[1].getFloat(value[1]))
|
||||
{
|
||||
uniform.set(value);
|
||||
fr+=2;
|
||||
iteratorAdvanced = true;
|
||||
fr+=2;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -78,8 +78,8 @@ bool Uniform_readLocalData(Object& obj, Input& fr)
|
||||
if (fr[0].getFloat(value[0]) && fr[1].getFloat(value[1]) && fr[2].getFloat(value[2]))
|
||||
{
|
||||
uniform.set(value);
|
||||
fr+=3;
|
||||
iteratorAdvanced = true;
|
||||
fr+=3;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -89,8 +89,8 @@ bool Uniform_readLocalData(Object& obj, Input& fr)
|
||||
if (fr[0].getFloat(value[0]) && fr[1].getFloat(value[1]) && fr[2].getFloat(value[2]) && fr[3].getFloat(value[3]))
|
||||
{
|
||||
uniform.set(value);
|
||||
fr+=4;
|
||||
iteratorAdvanced = true;
|
||||
fr+=4;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -100,8 +100,8 @@ bool Uniform_readLocalData(Object& obj, Input& fr)
|
||||
if (fr[0].getInt(value))
|
||||
{
|
||||
uniform.set(value);
|
||||
fr+=1;
|
||||
iteratorAdvanced = true;
|
||||
fr+=1;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -111,8 +111,8 @@ bool Uniform_readLocalData(Object& obj, Input& fr)
|
||||
if (fr[0].getInt(value[0]) && fr[1].getInt(value[1]))
|
||||
{
|
||||
uniform.set(value[0],value[1]);
|
||||
fr+=2;
|
||||
iteratorAdvanced = true;
|
||||
fr+=2;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -122,8 +122,8 @@ bool Uniform_readLocalData(Object& obj, Input& fr)
|
||||
if (fr[0].getInt(value[0]) && fr[1].getInt(value[1]) && fr[2].getInt(value[2]))
|
||||
{
|
||||
uniform.set(value[0],value[1],value[2]);
|
||||
fr+=3;
|
||||
iteratorAdvanced = true;
|
||||
fr+=3;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -133,98 +133,29 @@ bool Uniform_readLocalData(Object& obj, Input& fr)
|
||||
if (fr[0].getInt(value[0]) && fr[1].getInt(value[1]) && fr[2].getInt(value[2]) && fr[3].getInt(value[3]))
|
||||
{
|
||||
uniform.set(value[0],value[1],value[2],value[3]);
|
||||
fr+=4;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::BOOL):
|
||||
{
|
||||
int value;
|
||||
if (fr[0].getInt(value))
|
||||
{
|
||||
uniform.set(value!=0 ? true:false);
|
||||
fr+=1;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::BOOL_VEC2):
|
||||
{
|
||||
int value[2];
|
||||
if (fr[0].getInt(value[0]) && fr[1].getInt(value[1]))
|
||||
{
|
||||
uniform.set(value[0]!=0 ? true:false, value[1]!=0 ? true:false);
|
||||
fr+=2;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::BOOL_VEC3):
|
||||
{
|
||||
int value[3];
|
||||
if (fr[0].getInt(value[0]) && fr[1].getInt(value[1]) && fr[2].getInt(value[2]))
|
||||
{
|
||||
uniform.set(value[0]!=0 ? true:false, value[1]!=0 ? true:false, value[2]!=0 ? true:false);
|
||||
fr+=3;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::BOOL_VEC4):
|
||||
{
|
||||
int value[4];
|
||||
if (fr[0].getInt(value[0]) && fr[1].getInt(value[1]) && fr[2].getInt(value[2]) && fr[3].getInt(value[3]))
|
||||
{
|
||||
uniform.set(value[0]!=0 ? true:false, value[1]!=0 ? true:false, value[2]!=0 ? true:false, value[3]!=0 ? true:false);
|
||||
fr+=4;
|
||||
iteratorAdvanced = true;
|
||||
fr+=4;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::FLOAT_MAT2):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for reading."<<std::endl;
|
||||
osg::notify(osg::WARN)<<"Warning : type mat2 not supported for reading."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::FLOAT_MAT3):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for reading."<<std::endl;
|
||||
osg::notify(osg::WARN)<<"Warning : type mat3 not supported for reading."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::FLOAT_MAT4):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for reading."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_1D):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for reading."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_2D):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for reading."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_3D):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for reading."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_CUBE):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for reading."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_1D_SHADOW):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for reading."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_2D_SHADOW):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for reading."<<std::endl;
|
||||
Matrix value;
|
||||
if( readMatrix(value,fr) )
|
||||
{
|
||||
uniform.set(value);
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::UNDEFINED):
|
||||
@@ -246,7 +177,7 @@ bool Uniform_writeLocalData(const Object& obj,Output& fw)
|
||||
|
||||
fw.indent() << Uniform::getTypename( uniform.getType() ) << " ";
|
||||
|
||||
switch(uniform.getType())
|
||||
switch( Uniform::getGlApiType(uniform.getType()) )
|
||||
{
|
||||
case(osg::Uniform::FLOAT):
|
||||
{
|
||||
@@ -304,77 +235,21 @@ bool Uniform_writeLocalData(const Object& obj,Output& fw)
|
||||
fw << value[0]<<" "<<value[1]<<" "<<value[2]<<" "<<value[3];
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::BOOL):
|
||||
{
|
||||
bool value = 0;
|
||||
uniform.get(value);
|
||||
fw << value;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::BOOL_VEC2):
|
||||
{
|
||||
bool value[2];
|
||||
uniform.get(value[0],value[1]);
|
||||
fw << value[0]<<" "<<value[1];
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::BOOL_VEC3):
|
||||
{
|
||||
bool value[3];
|
||||
uniform.get(value[0],value[1],value[2]);
|
||||
fw << value[0]<<" "<<value[1]<<" "<<value[2];
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::BOOL_VEC4):
|
||||
{
|
||||
bool value[4];
|
||||
uniform.get(value[0],value[1],value[2],value[3]);
|
||||
fw << value[0]<<" "<<value[1]<<" "<<value[2]<<" "<<value[3];
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::FLOAT_MAT2):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for writing."<<std::endl;
|
||||
osg::notify(osg::WARN)<<"Warning : type mat2 not supported for writing."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::FLOAT_MAT3):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for writing."<<std::endl;
|
||||
osg::notify(osg::WARN)<<"Warning : type mat3 not supported for writing."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::FLOAT_MAT4):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for writing."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_1D):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for writing."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_2D):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for writing."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_3D):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for writing."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_CUBE):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for writing."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_1D_SHADOW):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for writing."<<std::endl;
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::SAMPLER_2D_SHADOW):
|
||||
{
|
||||
osg::notify(osg::WARN)<<"Warning : type not supported for writing."<<std::endl;
|
||||
Matrix value;
|
||||
uniform.get(value);
|
||||
writeMatrix(value,fw);
|
||||
break;
|
||||
}
|
||||
case(osg::Uniform::UNDEFINED):
|
||||
|
||||
Reference in New Issue
Block a user