#include <OSGShaderParameterAccess.h>
Public Member Functions | |
Constructors | |
| ShaderParameterAccess (MFShaderParameterPtr ¶meters) | |
| ~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 |
Definition at line 58 of file OSGShaderParameterAccess.h.
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.
| 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 | ) |
| 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 }
| 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 }
| 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] |
| 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 }
Definition at line 96 of file OSGShaderParameterAccess.h.
Referenced by getParameter(), setMParameter(), setParameter(), subParameter(), and updateMap().
Definition at line 100 of file OSGShaderParameterAccess.h.
Referenced by getParameter(), setMParameter(), setParameter(), subParameter(), and updateMap().
UInt32 osg::ShaderParameterAccess::_mapsize [private] |
Definition at line 101 of file OSGShaderParameterAccess.h.
Referenced by setMParameter(), setParameter(), and updateMap().
1.5.5