osg::ShaderParameterAccess Class Reference

ShaderParameterAccess class. See PageSystemShaderParameterAccess for a description.

#include <OSGShaderParameterAccess.h>

List of all members.

Public Member Functions

Constructors


 ShaderParameterAccess (MFShaderParameterPtr &parameters)
 ~ShaderParameterAccess (void)
Access


template<class ParameterType, class ValueType>
bool setParameter (const char *name, const ValueType &value)
template<class ParameterType, class ValueType>
bool setMParameter (const char *name, const ValueType &value)
template<class ParameterType, class ValueType>
bool getParameter (const char *name, ValueType &value)
bool subParameter (const char *name)

Private Types

typedef std::map< std::string,
UInt32
parameterMap
typedef parameterMap::iterator parameterIt

Private Member Functions

void operator= (const ShaderParameterAccess &source)
void updateMap (void)

Private Attributes

MFShaderParameterPtr_parameters
parameterMap _parametermap
UInt32 _mapsize


Detailed Description

Definition at line 58 of file OSGShaderParameterAccess.h.


Member Typedef Documentation

typedef std::map<std::string, UInt32> osg::ShaderParameterAccess::parameterMap [private]

Definition at line 98 of file OSGShaderParameterAccess.h.

typedef parameterMap::iterator osg::ShaderParameterAccess::parameterIt [private]

Definition at line 99 of file OSGShaderParameterAccess.h.


Constructor & Destructor Documentation

ShaderParameterAccess::ShaderParameterAccess ( MFShaderParameterPtr parameters  ) 

Definition at line 62 of file OSGShaderParameterAccess.cpp.

00062                                                                              :
00063     _parameters(parameters),
00064     _parametermap(),
00065     _mapsize(0)
00066 {
00067 }

ShaderParameterAccess::~ShaderParameterAccess ( void   ) 

Definition at line 69 of file OSGShaderParameterAccess.cpp.

00070 {
00071 }


Member Function Documentation

template<class ParameterType, class ValueType>
bool osg::ShaderParameterAccess::setParameter ( const char *  name,
const ValueType &  value 
) [inline]

Definition at line 46 of file OSGShaderParameterAccess.inl.

References _mapsize, _parametermap, _parameters, osg::beginEditCP(), osg::endEditCP(), FWARNING, osg::NullFC, p, osg::MField< FieldTypeT, fieldNameSpace >::push_back(), osg::MField< FieldTypeT, fieldNameSpace >::size(), and updateMap().

Referenced by osg::ShaderParameterChunk::setUniformParameter().

00047 {
00048     if(name == NULL)
00049         return false;
00050 
00051     updateMap();
00052 
00053     parameterIt it = _parametermap.find(name);
00054     
00055     if(it != _parametermap.end())
00056     {
00057         //ParameterType::Ptr p = ParameterType::Ptr::dcast(_parameters[(*it).second]);
00058         FCPtr<ShaderParameterPtr, ParameterType> p = FCPtr<ShaderParameterPtr, ParameterType>::dcast(_parameters[(*it).second]);
00059         if(p == NullFC)
00060         {
00061             FWARNING(("ShaderParameterAccess::setParameter : Parameter '%s' has wrong type!\n", name));
00062             return false;
00063         }
00064         beginEditCP(p, ParameterType::ValueFieldMask);
00065             p->setValue(value);
00066         endEditCP(p, ParameterType::ValueFieldMask);
00067     }
00068     else
00069     {
00070         //ParameterType::Ptr p = ParameterType::create();
00071         FCPtr<ShaderParameterPtr, ParameterType> p = ParameterType::create();
00072         if(p != NullFC)
00073         {
00074             beginEditCP(p);
00075                 p->setName(name);
00076                 p->setValue(value);
00077             endEditCP(p);
00078             _parameters.push_back(p);
00079             _parametermap.insert(std::pair<std::string, UInt32>(name, _parameters.size()-1));
00080             _mapsize = _parameters.size();
00081         }
00082     }
00083     return true;
00084 }

template<class ParameterType, class ValueType>
bool osg::ShaderParameterAccess::setMParameter ( const char *  name,
const ValueType &  value 
) [inline]

Definition at line 87 of file OSGShaderParameterAccess.inl.

References _mapsize, _parametermap, _parameters, osg::beginEditCP(), osg::endEditCP(), FWARNING, osg::NullFC, p, osg::MField< FieldTypeT, fieldNameSpace >::push_back(), osg::MField< FieldTypeT, fieldNameSpace >::size(), and updateMap().

Referenced by osg::ShaderParameterChunk::setUniformParameter().

00088 {
00089     if(name == NULL)
00090         return false;
00091 
00092     updateMap();
00093 
00094     parameterIt it = _parametermap.find(name);
00095     
00096     if(it != _parametermap.end())
00097     {
00098         //ParameterType::Ptr p = ParameterType::Ptr::dcast(_parameters[(*it).second]);
00099         FCPtr<ShaderParameterPtr, ParameterType> p = FCPtr<ShaderParameterPtr, ParameterType>::dcast(_parameters[(*it).second]);
00100         if(p == NullFC)
00101         {
00102             FWARNING(("ShaderParameterAccess::setMParameter : Parameter '%s' has wrong type!\n", name));
00103             return false;
00104         }
00105         beginEditCP(p, ParameterType::ValueFieldMask);
00106             p->getValue() = value;
00107         endEditCP(p, ParameterType::ValueFieldMask);
00108     }
00109     else
00110     {
00111         //ParameterType::Ptr p = ParameterType::create();
00112         FCPtr<ShaderParameterPtr, ParameterType> p = ParameterType::create();
00113         if(p != NullFC)
00114         {
00115             beginEditCP(p);
00116                 p->setName(name);
00117                 p->getValue() = value;
00118             endEditCP(p);
00119             _parameters.push_back(p);
00120             _parametermap.insert(std::pair<std::string, UInt32>(name, _parameters.size()-1));
00121             _mapsize = _parameters.size();
00122         }
00123     }
00124     return true;
00125 }

template<class ParameterType, class ValueType>
bool osg::ShaderParameterAccess::getParameter ( const char *  name,
ValueType &  value 
) [inline]

Definition at line 128 of file OSGShaderParameterAccess.inl.

References _parametermap, _parameters, FINFO, FWARNING, osg::NullFC, p, and updateMap().

Referenced by osg::ShaderParameterChunk::getUniformParameter().

00129 {
00130     if(name == NULL)
00131         return false;
00132 
00133     updateMap();
00134 
00135     parameterIt it = _parametermap.find(name);
00136     
00137     if(it != _parametermap.end())
00138     {
00139         //ParameterType::Ptr p = ParameterType::Ptr::dcast(_parameters[(*it).second]);
00140         FCPtr<ShaderParameterPtr, ParameterType> p = FCPtr<ShaderParameterPtr, ParameterType>::dcast(_parameters[(*it).second]);
00141         if(p == NullFC)
00142         {
00143             FWARNING(("ShaderParameterAccess::getParameter : Parameter '%s' has wrong type!\n", name));
00144             return false;
00145         }
00146         value = p->getValue();
00147     }
00148     else
00149     {
00150         FINFO(("ShaderParameterAccess::getParameter : Parameter '%s' doesn't exist!\n", name));
00151         return false;
00152     }
00153     return true;
00154 }

bool ShaderParameterAccess::subParameter ( const char *  name  ) 

Definition at line 77 of file OSGShaderParameterAccess.cpp.

References _parametermap, _parameters, osg::MField< FieldTypeT, fieldNameSpace >::begin(), osg::MField< FieldTypeT, fieldNameSpace >::erase(), and updateMap().

Referenced by osg::ShaderParameterChunk::subUniformParameter().

00078 {
00079     if(name == NULL)
00080         return false;
00081 
00082     updateMap();
00083     parameterIt it = _parametermap.find(name);
00084     
00085     if(it == _parametermap.end())
00086         return false;
00087 
00088     _parameters.erase(_parameters.begin() + (*it).second);
00089     _parametermap.erase(it);
00090     updateMap();
00091 
00092     return true;
00093 }

void ShaderParameterAccess::operator= ( const ShaderParameterAccess source  )  [private]

Definition at line 73 of file OSGShaderParameterAccess.cpp.

00074 {
00075 }

void ShaderParameterAccess::updateMap ( void   )  [private]

Definition at line 95 of file OSGShaderParameterAccess.cpp.

References _mapsize, _parametermap, _parameters, and osg::MField< FieldTypeT, fieldNameSpace >::size().

Referenced by getParameter(), setMParameter(), setParameter(), and subParameter().

00096 {
00097     if(_mapsize == _parameters.size())
00098         return;
00099     
00100     UInt32 size = _parameters.size();
00101     _parametermap.clear();
00102     for(UInt32 i=0;i<size;++i)
00103         _parametermap.insert(std::pair<std::string, UInt32>(_parameters[i]->getName(), i));
00104     _mapsize = size;
00105 }


Member Data Documentation

Definition at line 101 of file OSGShaderParameterAccess.h.

Referenced by setMParameter(), setParameter(), and updateMap().


The documentation for this class was generated from the following files:

Generated on Mon Mar 17 12:22:02 2008 for OpenSG by  doxygen 1.5.5