00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include <OSGConfig.h>
00042
00043 OSG_BEGIN_NAMESPACE
00044
00045 template<class ParameterType, class ValueType> inline
00046 bool ShaderParameterAccess::setParameter(const char *name, const ValueType &value)
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
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
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 }
00085
00086 template<class ParameterType, class ValueType> inline
00087 bool ShaderParameterAccess::setMParameter(const char *name, const ValueType &value)
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
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
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 }
00126
00127 template<class ParameterType, class ValueType> inline
00128 bool ShaderParameterAccess::getParameter(const char *name, ValueType &value)
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
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 }
00155
00156 OSG_END_NAMESPACE
00157
00158 #define OSGSHADERPARAMETERACCESS_INLINE_CVSID "@(#)$Id: OSGShaderParameterAccess.inl,v 1.11 2007/03/09 18:11:48 a-m-z Exp $"