1 #ifndef RixShadingParam_h
2 #define RixShadingParam_h
40 #include "RixShading.h"
41 #include "RixPattern.h"
76 #ifndef RIX_SHADING_PARAM_MEMCATEGORY
77 #error RIX_SHADING_PARAM_MEMCATEGORY must be defined prior to inclusion
85 type = k_RixSCInvalidType;
86 detail = k_RixSCInvalidDetail;
101 bool IsValid()
const {
return detail != k_RixSCInvalidDetail; }
110 detail = sctx->
EvalParam(pid, -1, (RtFloat
const **) &
data.f1, dflt,
114 detail = k_RixSCVarying;
119 type = k_RixSCFloat3;
120 detail = sctx->
EvalParam(pid, -1, (RtFloat3
const **) &
data.f3, dflt,
122 if(detail != k_RixSCVarying)
123 detail = k_RixSCInvalidDetail;
129 detail = sctx->
EvalParam(pid, -1, (RtColorRGB
const **)&
data.rgb, dflt,
133 detail = k_RixSCVarying;
138 type = k_RixSCInteger;
139 detail = sctx->
EvalParam(pid, -1, (RtInt
const **) &
data.i1, dflt,
143 detail = k_RixSCVarying;
152 detail = k_RixSCInvalidDetail;
154 detail = k_RixSCUniform;
155 data.f1 =
const_cast<RtFloat *
>(dflt);
157 void InitEmptyI(RtInt
const *dflt=NULL)
159 type = k_RixSCInteger;
161 detail = k_RixSCInvalidDetail;
163 detail = k_RixSCUniform;
164 data.i1 =
const_cast<RtInt *
>(dflt);
166 void InitEmptyV(RtFloat3 *dflt=NULL)
168 type = k_RixSCFloat3;
170 detail = k_RixSCInvalidDetail;
172 detail = k_RixSCUniform;
173 data.f3 =
const_cast<RtFloat3 *
>(dflt);
175 void InitEmptyC(RtColorRGB
const *dflt=NULL)
179 detail = k_RixSCInvalidDetail;
181 detail = k_RixSCUniform;
182 data.rgb =
const_cast<RtColorRGB *
>(dflt);
191 RixShadingContext::MemCategory memcat = RIX_SHADING_PARAM_MEMCATEGORY;
194 detail = k_RixSCUniform;
195 data.f1 = pool.AllocFor<RtFloat>(memcat, npts);
202 RixShadingContext::MemCategory memcat = RIX_SHADING_PARAM_MEMCATEGORY;
204 type = k_RixSCInteger;
205 detail = k_RixSCUniform;
206 data.i1 = pool.AllocFor<RtInt>(memcat, npts);
211 RtColorRGB
const &dflt)
213 RixShadingContext::MemCategory memcat = RIX_SHADING_PARAM_MEMCATEGORY;
216 detail = k_RixSCUniform;
217 data.rgb = pool.AllocFor<RtColorRGB>(memcat, npts);
223 RixShadingContext::MemCategory memcat = RIX_SHADING_PARAM_MEMCATEGORY;
225 type = k_RixSCFloat3;
226 detail = k_RixSCInvalidDetail;
227 data.f3 = pool.AllocFor<RtFloat3>(memcat, npts);
234 assert(type == k_RixSCInteger && detail == k_RixSCUniform);
239 if(detail == k_RixSCUniform)
242 if(detail == k_RixSCVarying)
247 RtFloat GetValueF()
const
249 assert(type == k_RixSCFloat && detail == k_RixSCUniform);
252 RtFloat GetValueF(
int i)
const
254 if(detail == k_RixSCUniform)
257 if(detail == k_RixSCVarying)
262 RtFloat3
const&GetValueV()
const
264 assert(type == k_RixSCFloat3 && detail == k_RixSCUniform);
267 RtFloat3
const &GetValueV(
int i)
const
269 if(detail == k_RixSCUniform)
272 if(detail == k_RixSCVarying)
275 return RixConstants::k_ZeroF3;
277 RtColorRGB
const &GetValueC()
const
279 assert(type == k_RixSCColor && detail == k_RixSCUniform);
282 RtColorRGB
const &GetValueC(
int i)
const
284 if(detail == k_RixSCUniform)
287 if(detail == k_RixSCVarying)
290 return RixConstants::k_ZeroRGB;
296 if(detail == k_RixSCUniform)
297 if(i==0)
data.f1[0] = v;
299 if(detail == k_RixSCVarying)
316 if(this->detail != k_RixSCUniform)
324 this->detail = k_RixSCVarying;
325 for(
int i=1;i<npts;i++)
329 this->detail = k_RixSCVarying;
330 for(
int i=1;i<npts;i++)
337 for(
int i=1;i<npts;i++)