Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

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 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 94 of file OSGShaderParameterAccess.h.

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

Definition at line 95 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::getParameter const char *  name,
ValueType &  value
[inline]
 

Definition at line 87 of file OSGShaderParameterAccess.inl.

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

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

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::getParameter : Parameter '%s' has wrong type!\n", name));
00103             return false;
00104         }
00105         value = p->getValue();
00106     }
00107     else
00108     {
00109         FINFO(("ShaderParameterAccess::getParameter : Parameter '%s' doesn't exist!\n", name));
00110         return false;
00111     }
00112     return true;
00113 }

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, osg::getName(), and osg::MField< FieldTypeT, fieldNameSpace >::size().

Referenced by getParameter(), 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

MFShaderParameterPtr& osg::ShaderParameterAccess::_parameters [private]
 

Definition at line 92 of file OSGShaderParameterAccess.h.

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

parameterMap osg::ShaderParameterAccess::_parametermap [private]
 

Definition at line 96 of file OSGShaderParameterAccess.h.

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

UInt32 osg::ShaderParameterAccess::_mapsize [private]
 

Definition at line 97 of file OSGShaderParameterAccess.h.

Referenced by setParameter(), and updateMap().


The documentation for this class was generated from the following files:
Generated on Thu Aug 25 04:28:34 2005 for OpenSG by  doxygen 1.4.3