12 #ifndef __GA_ElementWrangler__
13 #define __GA_ElementWrangler__
45 { myCache = UTmakeUnique<GA_AttributeRefMap::Cache>(); }
51 myMap.copyValue(myOwner, dest, myOwner, src,
57 myMap.multiply(myOwner, dest, scale);
62 myMap.addValue(myOwner, dest, myOwner, src,
scale);
67 myMap.lerpValue(myOwner, dest, myOwner, src0, src1, bias);
72 return myMap.getDestDetail() == &dest &&
73 myMap.getSourceDetail() == &dest;
77 return myMap.getDestDetail() == &dest &&
78 myMap.getSourceDetail() == &
src;
81 {
return myMap.entries(); }
84 myMap.bumpAllDestDataIds();
103 GA_AttributeRefMap::Cache *
cache() {
return myCache.get(); }
130 delete myAlternateMap;
133 bool includesP()
const {
return myBaseIncludeP == INCLUDE_P; }
143 if (copy_p == myBaseIncludeP)
147 initAlternateHandle();
148 myAlternateMap->copyValue(
157 if (scale_p == myBaseIncludeP)
161 initAlternateHandle();
162 myAlternateMap->multiply(
169 if (add_p == myBaseIncludeP)
173 initAlternateHandle();
174 myAlternateMap->addValue(
183 if (lerp_p == myBaseIncludeP)
187 initAlternateHandle();
188 myAlternateMap->lerpValue(
194 void initAlternateHandle()
197 allocAlternateHandle();
199 void allocAlternateHandle();
204 IncludeP myBaseIncludeP;
262 : myDestGdp(&dest), mySrcGdp(&dest), myPrimitiveWrangler(0),
263 myVertexWrangler(0), myPointWrangler(0), myIncludeP(include_p) {}
266 : myDestGdp(&dest), mySrcGdp(&src), myPrimitiveWrangler(0),
267 myVertexWrangler(0), myPointWrangler(0), myIncludeP(include_p) {}
271 : myDestGdp(&dest), mySrcGdp(&dest), myPrimitiveWrangler(0),
272 myVertexWrangler(0), myPointWrangler(0), myFilter(filter) {}
275 : myDestGdp(&dest), mySrcGdp(&src), myPrimitiveWrangler(0),
276 myVertexWrangler(0), myPointWrangler(0), myFilter(filter) {}
280 if (myPrimitiveWrangler)
281 delete myPrimitiveWrangler;
282 if (myVertexWrangler)
283 delete myVertexWrangler;
285 delete myPointWrangler;
290 if (myPrimitiveWrangler)
292 delete myPrimitiveWrangler;
293 myPrimitiveWrangler = 0;
295 if (myVertexWrangler)
297 delete myVertexWrangler;
298 myVertexWrangler = 0;
302 delete myPointWrangler;
321 return myDestGdp == &dest &&
327 return myDestGdp == &dest &&
333 if (!myPrimitiveWrangler)
335 if (myFilter.isValid())
343 return *myPrimitiveWrangler;
347 if (!myVertexWrangler)
349 if (myFilter.isValid())
357 return *myVertexWrangler;
361 if (!myPointWrangler)
363 if (myFilter.isValid())
370 return *myPointWrangler;
GA_DetailWrangler(GA_Detail &dest, const GA_Detail &src, const GA_AttributeFilter &filter)
void scaleAttributeValues(GA_Offset dest, fpreal scale)
GA_VertexWrangler & getVertex()
void addAttributeValues(GA_Offset dest, GA_Offset src, fpreal scale, IncludeP add_p)
Definition of a geometry attribute.
void copyAttributeValues(GA_Offset dest, GA_Offset src)
GA_PrimitiveWrangler(GA_Detail &dest, const GA_Detail &src, const GA_AttributeFilter &filter)
GA_DetailWrangler(GA_Detail &dest)
GLenum GLenum GLenum GLenum GLenum scale
void addAttributeValues(GA_Offset dest, GA_Offset src, fpreal scale=1)
GA_ElementWranglerCache(GA_Detail &dest, const GA_AttributeFilter &filter)
bool isValid(GA_Detail &dest, const GA_Detail &src) const
~GA_ElementWrangler()
Protected destructor as we don't support polymorphic destruction.
bool isValid(GA_Detail &dest) const
A utility class to amortize overhead from GA_GBElement attribute handling methods.
GA_ElementWranglerCache(GA_Detail &dest, const GA_Detail &src, const GA_AttributeFilter &filter)
GA_VertexWrangler(GA_Detail &dest)
void reset(GA_Detail &dest)
A range of elements in an index-map.
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
GA_DetailWrangler(GA_Detail &dest, const GA_AttributeFilter &filter)
GA_DetailWrangler(GA_Detail &dest, const GA_Detail &src)
GA_AttributeRefMap::Cache * cache()
void lerpAttributeValues(GA_Offset dest, GA_Offset src0, GA_Offset src1, fpreal bias, IncludeP lerp_p)
void reset(GA_Detail &dest, const GA_Detail &src)
GA_ElementWranglerCache(GA_Detail &dest, GA_PointWrangler::IncludeP include_p)
A handle to simplify manipulation of multiple attributes.
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
bool isValid(const GA_Detail &dest, const GA_Detail &src) const
GA_VertexWrangler(GA_Detail &dest, const GA_Detail &src)
GA_PointWrangler & getPoint()
GA_PrimitiveWrangler(GA_Detail &dest, const GA_Detail &src)
GA_VertexWrangler(GA_Detail &dest, const GA_Detail &src, const GA_AttributeFilter &filter)
GA_ElementWranglerCache(GA_Detail &dest, const GA_Detail &src, GA_PointWrangler::IncludeP include_p)
GA_AttributeRefMap & getMap()
void scaleAttributeValues(GA_Offset dest, fpreal scale, IncludeP scale_p)
GA_PrimitiveWrangler(GA_Detail &dest)
void lerpAttributeValues(GA_Offset dest, GA_Offset src0, GA_Offset src1, fpreal bias)
~GA_ElementWranglerCache()
void bumpAllDestDataIds()
GA_VertexWrangler(GA_Detail &dest, const GA_AttributeFilter &filter)
Container class for all geometry.
void copyAttributeValues(GA_Offset dest, GA_Offset src, IncludeP copy_p)
GA_PrimitiveWrangler(GA_Detail &dest, const GA_AttributeFilter &filter)
GA_PrimitiveWrangler & getPrimitive()
int getNumAttributes() const
bool isValid(const GA_Detail &dest) const