HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GEO_AttributeHandleList.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: GEO_AttributeHandleList.h ( GEO Library, C++)
7  *
8  * COMMENTS: A list of handles to perform operations on multiple attributes
9  */
10 
11 #ifndef __GEO_AttributeHandleList__
12 #define __GEO_AttributeHandleList__
13 
14 #include "GEO_API.h"
15 #include "GEO_Detail.h"
16 #include "GEO_WorkVertexBuffer.h"
17 
18 #include <GA/GA_AttributeRefMap.h>
19 #include <GA/GA_VertexPool.h>
20 #include <UT/UT_Matrix.h>
21 #include <UT/UT_StackBuffer.h>
22 #include <UT/UT_SymbolTable.h>
23 
24 
25 class GA_AttributeFilter;
27 
28 //
29 // Whether to include "P" in the attribute handle list defined by float
30 // attributes. In some cases, it's more useful to skip the "P" attribute since
31 // it's computed by other means.
32 //
33 #define GEO_AHANDLE_LIST_BYPASS_P 0
34 #define GEO_AHANDLE_LIST_INCLUDE_P 1
35 
37 
39 {
40 public:
41  SYS_DEPRECATED_HDK(13.0)
42  GEO_AttributeHandleList();
43  SYS_DEPRECATED_HDK(13.0)
44  virtual ~GEO_AttributeHandleList();
45 
46  SYS_DEPRECATED_HDK(13.0)
47  GEO_AttributeHandleList *clone() const;
48 
49  /// Binding a const detail pointer will create read-only handles, while
50  /// binding a non-const detail pointer will create read-write handles.
51  /// @note Binding to a populated list will clear the list if the binding
52  /// differs from the previous binding, even if only const-ness.
53  SYS_DEPRECATED_HDK(13.0)
54  void bindDetail(const GEO_Detail *gdp);
55  SYS_DEPRECATED_HDK(13.0)
56  void bindDetail(GEO_Detail *gdp);
57 
58  /// Binding a mutable copy of a const detail creates an empty writable
59  /// detail, that is automatically populated with copies of attributes
60  /// from the original detail as this handle list is populated.
61  ///
62  /// In addition, the source mapping will be automatically built from
63  /// the original detail. Consequently users of this handle list must
64  /// be careful to distinguish between destination and source elements
65  /// for an operation, exactly as if the handle list was explicitly
66  /// bound to a mutable detail with the source mapping explicitly
67  /// built from another detail. In fact, this method is simply a
68  /// conveniently wrapped shorthand for that very sequence of actions.
69  /// @note Binding to a populated list will clear the list if the binding
70  /// differs from the previous binding, even if only in const-ness.
71  SYS_DEPRECATED_HDK(13.0)
72  void bindMutableTemp(const GEO_Detail *gdp);
73 
74  /// Access to the vertex pool. Under no circumstances are you allowed
75  /// to change the detail binding. Also note that the vertex pool may
76  /// be unbound in the case of a list of read-only handles.
77  SYS_DEPRECATED_HDK(13.0)
78  GA_VertexPool &getVertexPool() { return myVertexPool; }
79  /// @{
80  /// Map from a GA_VertexPoolIndex to a GA_Offset
81  SYS_DEPRECATED_HDK(13.0)
82  GA_Offset getTempVertex(GA_VertexPoolIndex index) const
83  { return myVertexPool.getVertex(index); }
84  SYS_DEPRECATED_HDK(13.0)
85  GA_Offset getTempPoint(GA_VertexPoolIndex index) const
86  { return myVertexPool.getPoint(index); }
87  /// @}
88  /// @{
89  /// Allocate a temporary vertex/point
90  SYS_DEPRECATED_HDK(13.0)
92  { return myVertexPool.appendVertex(pt); }
93  SYS_DEPRECATED_HDK(13.0)
94  GA_VertexPoolIndex appendTempPoint()
95  { return myVertexPool.appendPoint(); }
96  /// @}
97  /// @{
98  /// Free a temporary vertex/point
99  SYS_DEPRECATED_HDK(13.0)
100  void freeTempVertex(GA_VertexPoolIndex v)
101  { myVertexPool.freeVertex(v); }
102  SYS_DEPRECATED_HDK(13.0)
103  void freeTempPoint(GA_VertexPoolIndex p)
104  { myVertexPool.freePoint(p); }
105  /// @}
106 
107 
108  /// Query whether the specified detail is the "destination" detail of this
109  /// handle list.
110  /// @warning The handle list may consist of read-only handles if bound to
111  /// a const pointer to that detail.
112  /// @sa isCommonSourceMapDetail()
113  SYS_DEPRECATED_HDK(13.0)
114  bool isBoundDetail(const GEO_Detail *gdp) const
115  { return (getBoundDetail() == gdp); }
116 
117  /// Get a pointer to the currently bound mutable detail, if any. Note
118  /// that this may be NULL for a list bound to a const detail.
119  SYS_DEPRECATED_HDK(13.0)
120  GEO_Detail *getBoundMutableDetail() { return myMutableDetail; }
121 
122  SYS_DEPRECATED_HDK(13.0)
123  void invalidate();
124 
125  SYS_DEPRECATED_HDK(13.0)
126  int entries() const { return myAttribs.entries(); }
127  SYS_DEPRECATED_HDK(13.0)
128  bool isEmpty() const { return entries() == 0; }
129 
130  SYS_DEPRECATED_HDK(13.0)
131  bool hasVectorAttributes(GA_AttributeOwner owner) const;
132 
133  //
134  // Attribute creation
135  //
136  // The following methods add attributes to the attribute list based on
137  // particular filters.
138  //
139  SYS_DEPRECATED_HDK(13.0)
140  void clearAllAttributes();
141 
142  SYS_DEPRECATED_HDK(13.0)
143  int appendAttributes(GA_AttributeOwner,
144  const GA_AttributeFilter &filter,
146  SYS_DEPRECATED_HDK(13.0)
147  int appendAllAttributes(GA_AttributeOwner owner);
148  SYS_DEPRECATED_HDK(13.0)
149  int appendFloatAttributes(GA_AttributeOwner owner,
150  int includeP = GEO_AHANDLE_LIST_INCLUDE_P);
151  SYS_DEPRECATED_HDK(13.0)
152  int appendAttributesByType(const char *type, GA_AttributeOwner o);
153  SYS_DEPRECATED_HDK(13.0)
154  int appendAttributesByTypeInfo(GA_TypeInfo i, GA_AttributeOwner o);
155  SYS_DEPRECATED_HDK(13.0)
156  bool appendAttributeByName(const char *name, GA_AttributeOwner o);
157  SYS_DEPRECATED_HDK(13.0)
158  int appendAttributesByPattern(const char *pattern,
159  GA_AttributeOwner o,
160  GA_AttributeScope s = GA_SCOPE_INVALID);
161  SYS_DEPRECATED_HDK(13.0)
162  bool appendAttribute(const GA_Attribute *attrib);
163  SYS_DEPRECATED_HDK(13.0)
164  bool appendAttribute(GA_Attribute *attrib);
165  SYS_DEPRECATED_HDK(13.0)
166  bool appendAttribute(const GA_Attribute &attrib);
167  SYS_DEPRECATED_HDK(13.0)
168  bool appendAttribute(GA_Attribute &attrib);
169 
170  // Remove any attributes from the handle list which don't exist in this
171  // "other" detail.
172  SYS_DEPRECATED_HDK(13.0)
173  int removeAttributes(const GA_AttributeFilter &filter);
174  SYS_DEPRECATED_HDK(13.0)
175  int removeMissingAttributes(const GEO_Detail *other);
176  SYS_DEPRECATED_HDK(13.0)
177  bool removeAttributeByName(const char *name);
178 
179  SYS_DEPRECATED_HDK(13.0)
180  void clearSourceMap();
181  SYS_DEPRECATED_HDK(13.0)
182  void appendSourceMap(const GEO_Detail *gdp, GA_AttributeOwner o);
183  SYS_DEPRECATED_HDK(13.0)
184  void appendSourceMap(const GEO_AttributeHandleList &hlist);
185 
186  /// Call this method whenever a child handle's source mapping is changed
187  /// outside of this list.
188  SYS_DEPRECATED_HDK(13.0)
189  void childSourceMapChanged();
190 
191  /// Query whether the specified detail is the common origin of all the
192  /// source map attributes (trivially true if no source attributes).
193  /// @note It IS possible to be bound to multiple source details, though
194  /// one needs to be EXTREMELY careful and this is not recommended.
195  SYS_DEPRECATED_HDK(13.0)
196  bool isCommonSourceMapDetail(const GEO_Detail *gdp) const;
197 
198  /// Returns a pointer to an equivalent handle list for performing all
199  /// operations using the bound mutable detail as both the destination
200  /// and source.
201  ///
202  /// More specifically, the returned handle list is bound to the same
203  /// mutable detail as this list, populated with the same attributes,
204  /// with a default source map from that same mutable detail. A NULL
205  /// will be returned from an unbound list.
206  ///
207  /// @note The returned handle list, if any, is owned by this list, and
208  /// the pointer should not be used across any changes to the original
209  /// handle list (attribute addition/removal, binding/unbinding, etc)
210  /// without obtaining it from this method again.
211  ///
212  /// @warning First call is not thread-safe.
213  SYS_DEPRECATED_HDK(13.0)
214  GEO_AttributeHandleList *getBoundClosure();
215 
216  /// Assignment with a handle list bound to a mutable copy of a const
217  /// detail will bind to that mutable copy of the detail, so h cannot
218  /// be destroyed or rebound before this handle list is destroyed or
219  /// rebound.
220  SYS_DEPRECATED_HDK(13.0)
222 
223  SYS_DEPRECATED_HDK(13.0)
224  GEO_AttributeHandle *operator[](int i)
225  { return static_cast<GEO_AttributeHandle *>(getEntry(i)); }
226  SYS_DEPRECATED_HDK(13.0)
227  const GEO_AttributeHandle *operator[](int i) const
228  { return static_cast<const GEO_AttributeHandle *>(getEntry(i)); }
229  SYS_DEPRECATED_HDK(13.0)
230  GEO_AttributeHandle *operator[](const char *name)
231  { return static_cast<GEO_AttributeHandle *>(getEntry(name)); }
232  SYS_DEPRECATED_HDK(13.0)
233  const GEO_AttributeHandle *operator[](const char *name) const
234  { return static_cast<const GEO_AttributeHandle *>(getEntry(name)); }
235 
236  /// Return the total number of floating point attributes in the list.
237  SYS_DEPRECATED_HDK(13.0)
238  int getFloatCount(bool includePw=true) const;
239  /// Move all the floating point data into a matrix column
240  SYS_DEPRECATED_HDK(13.0)
241  void floatsToMatrix(UT_MatrixF &matrix, int row,
242  bool includePw=true) const;
243  /// Extract the floats from the given row of the matrix
244  SYS_DEPRECATED_HDK(13.0)
245  void matrixToFloats(const UT_MatrixF &matrix, int row,
246  bool includePw=true);
247 
248  //
249  // Preferred methods for working on data. This allows all handles to be
250  // operated on properly.
251  //
252  SYS_DEPRECATED_HDK(13.0)
253  void setElement(GEO_Primitive *prim, GEO_Vertex *v);
254  SYS_DEPRECATED_HDK(13.0)
255  void setElement(const GEO_Primitive *prim, const GEO_Vertex *v);
256  SYS_DEPRECATED_HDK(13.0)
257  void setElement(GEO_Primitive *prim, const GEO_Vertex &v);
258  SYS_DEPRECATED_HDK(13.0)
259  void setElement(const GEO_Primitive *prim, const GEO_Vertex &v);
260 
261  SYS_DEPRECATED_HDK(13.0)
262  void add(const GEO_Primitive *p, const GEO_Vertex *v)
263  { addScale(p, v, 1.0); }
264  SYS_DEPRECATED_HDK(13.0)
266  SYS_DEPRECATED_HDK(13.0)
268  SYS_DEPRECATED_HDK(13.0)
270  SYS_DEPRECATED_HDK(13.0)
273  fpreal weight);
274  SYS_DEPRECATED_HDK(13.0)
276 
277  SYS_DEPRECATED_HDK(13.0)
279  { addScale(p, v, 1.0); }
280  SYS_DEPRECATED_HDK(13.0)
282  SYS_DEPRECATED_HDK(13.0)
283  void addHScale(const GEO_Primitive *p, const GEO_Vertex &v, fpreal s);
284  SYS_DEPRECATED_HDK(13.0)
286  SYS_DEPRECATED_HDK(13.0)
288  SYS_DEPRECATED_HDK(13.0)
291  fpreal weight);
292  SYS_DEPRECATED_HDK(13.0)
294 
295  // Unary operations on attribute data
296  SYS_DEPRECATED_HDK(13.0)
297  void setValue(fpreal value); // Usually used to zero data
298  SYS_DEPRECATED_HDK(13.0)
299  void multiply(fpreal scale); // Multiply all data by value
300 
301  // Alternative operations. In some cases, it's not possible to get the
302  // primitive/vertex, and thus, you need to work on the native element.
303  // Only appropriate attribute handles will be operated upon.
304  SYS_DEPRECATED_HDK(13.0)
305  void setElement(GEO_Vertex *vtx);
306  SYS_DEPRECATED_HDK(13.0)
307  void setElement(const GEO_Vertex *vtx);
308  SYS_DEPRECATED_HDK(13.0)
309  void setElement(GEO_Vertex vtx);
310  SYS_DEPRECATED_HDK(13.0)
311  void setElement(GEO_Primitive *prim);
312  SYS_DEPRECATED_HDK(13.0)
313  void setElement(const GEO_Primitive *prim);
314  SYS_DEPRECATED_HDK(13.0)
315  void setElement(GEO_Detail *gdp);
316  SYS_DEPRECATED_HDK(13.0)
317  void setElement(const GEO_Detail *gdp);
318 
319  SYS_DEPRECATED_HDK(13.0)
320  void setPoint(GA_Offset offset);
321  SYS_DEPRECATED_HDK(13.0)
322  void setVertex(GA_Offset offset);
323  SYS_DEPRECATED_HDK(13.0)
324  void setPrimitive(GA_Offset offset);
325  SYS_DEPRECATED_HDK(13.0)
326  void setGlobal();
327 
328  // Applied to vertex AND point attributes
329  SYS_DEPRECATED_HDK(13.0)
330  void add(const GEO_Vertex *ppt) { addScale(ppt, 1.0); }
331  SYS_DEPRECATED_HDK(13.0)
333  SYS_DEPRECATED_HDK(13.0)
334  void lerp(const GEO_Vertex *ppt, fpreal w);
335  SYS_DEPRECATED_HDK(13.0)
336  void lerp(const GEO_Vertex *p0, const GEO_Vertex *p1, fpreal w);
337  SYS_DEPRECATED_HDK(13.0)
338  void multiply(const GEO_Vertex *ppt);
339  SYS_DEPRECATED_HDK(13.0)
340  void copyDataFrom(const GEO_Vertex *ppt);
341 
342  SYS_DEPRECATED_HDK(13.0)
343  void addDest(const GEO_Vertex *ppt) { addScaleDest(ppt, 1.0); }
344  SYS_DEPRECATED_HDK(13.0)
346  SYS_DEPRECATED_HDK(13.0)
347  void multiplyDest(const GEO_Vertex *ppt);
348  SYS_DEPRECATED_HDK(13.0)
349  void copyDestData(const GEO_Vertex *ppt);
350 
351  // Applied to vertex AND point attributes
352  SYS_DEPRECATED_HDK(13.0)
353  void add(const GEO_Vertex &ppt)
354  { add(&ppt); }
355  SYS_DEPRECATED_HDK(13.0)
357  { addScale(&ppt, scale); }
358  SYS_DEPRECATED_HDK(13.0)
360  { lerp(&ppt, w); }
361  SYS_DEPRECATED_HDK(13.0)
363  { lerp(&p0, &p1, w); }
364  SYS_DEPRECATED_HDK(13.0)
366  { multiply(&ppt); }
367  SYS_DEPRECATED_HDK(13.0)
369  { copyDataFrom(&ppt); }
370 
371  SYS_DEPRECATED_HDK(13.0)
372  void addDest(const GEO_Vertex &ppt)
373  { addDest(&ppt); }
374  SYS_DEPRECATED_HDK(13.0)
376  { addScaleDest(&ppt, scale); }
377  SYS_DEPRECATED_HDK(13.0)
379  { multiplyDest(&ppt); }
380  SYS_DEPRECATED_HDK(13.0)
382  { copyDestData(&ppt); }
383 
384  // Applied to primitive AND detail attributes
385  SYS_DEPRECATED_HDK(13.0)
386  void add(const GEO_Primitive *ppt) { addScale(ppt, 1.0); }
387  SYS_DEPRECATED_HDK(13.0)
389  SYS_DEPRECATED_HDK(13.0)
390  void lerp(const GEO_Primitive *ppt, fpreal w);
391  SYS_DEPRECATED_HDK(13.0)
393  SYS_DEPRECATED_HDK(13.0)
394  void multiply(const GEO_Primitive *ppt);
395  SYS_DEPRECATED_HDK(13.0)
396  void copyDataFrom(const GEO_Primitive *ppt);
397 
398  SYS_DEPRECATED_HDK(13.0)
399  void addDest(const GEO_Primitive *ppt) { addScaleDest(ppt, 1.0); }
400  SYS_DEPRECATED_HDK(13.0)
402  SYS_DEPRECATED_HDK(13.0)
403  void multiplyDest(const GEO_Primitive *ppt);
404  SYS_DEPRECATED_HDK(13.0)
405  void copyDestData(const GEO_Primitive *ppt);
406 
407  // Applied to detail attributes only
408  SYS_DEPRECATED_HDK(13.0)
409  void add(const GEO_Detail *ppt) { addScale(ppt, 1.0); }
410  SYS_DEPRECATED_HDK(13.0)
412  SYS_DEPRECATED_HDK(13.0)
413  void lerp(const GEO_Detail *ppt, fpreal w);
414  //void lerp(const GEO_Detail *gdp0, const GEO_Detail *gdp1, fpreal w);
415  SYS_DEPRECATED_HDK(13.0)
416  void multiply(const GEO_Detail *ppt);
417  SYS_DEPRECATED_HDK(13.0)
418  void copyDataFrom(const GEO_Detail *ppt);
419 
420  SYS_DEPRECATED_HDK(13.0)
421  void addDest(const GEO_Detail *ppt) { addScaleDest(ppt, 1.0); }
422  SYS_DEPRECATED_HDK(13.0)
424  SYS_DEPRECATED_HDK(13.0)
425  void multiplyDest(const GEO_Detail *ppt);
426  //void copyDestData(const GEO_Detail *ppt);
427 
428  SYS_DEPRECATED_HDK(13.0)
429  void dump(const char *msg="") const; // For debugging
430 
431  // Add special position attribute "P"
432  SYS_DEPRECATED_HDK(13.0)
433  int appendPointP();
434 
435  /// Fill a GA_AttributeRefMap. This method can be used to adapt code
436  /// that used to work with a GEO_AttributeHandleList to use a
437  /// GA_AttributeRefMap instead.
438  SYS_DEPRECATED_HDK(13.0)
439  void fillAttributeRefMap(GA_AttributeRefMap &map) const;
440 
441  /// Fill a GA_AttributeRefMap, but only with source attributes that match
442  /// the @c source_owner. For example, consider the code: @code
443  /// GEO_AttributeHandleList alist;
444  /// alist.appendAllAttributes(GA_ATTRIB_VERTEX);
445  /// alist.appendFloatAttributes(GA_ATTRIB_POINT);
446  /// alist.appendFloatAttributes(GA_ATTRIB_PRIMITIVE);
447  /// alist.appendAllAttributes(GA_ATTRIB_DETAIL);
448  /// GA_AttributeRefMap rmap;
449  /// alist.fillAttributeRefMap(rmap, GA_ATTRIB_POINT);
450  /// alist.fillAttributeRefMap(rmap, GA_ATTRIB_VERTEX);
451  /// @endcode
452  /// With the code above, the rmap will only contain point/vertex attributes.
453  SYS_DEPRECATED_HDK(13.0)
454  void fillAttributeRefMap(GA_AttributeRefMap &map,
455  GA_AttributeOwner source_owner) const;
456 
457  /// Adapter to convert algorithms that used to operate on
458  /// GEO_WorkVertexArray to GA_Offset*
460  {
461  public:
462  SYS_DEPRECATED_HDK(13.0)
463  VertexArrayAdapter(GEO_AttributeHandleList &hlist,
464  GEO_WorkVertexArray &verts)
465  : myOffsets(verts.entries())
466  {
467  hlist.fillAttributeRefMap(myMap);
468  for (int i = 0; i < verts.entries(); i++)
469  myOffsets[i] = verts.getVertexElements()[i]->getMapOffset();
470  }
471 
472  SYS_DEPRECATED_HDK(13.0)
474  { return myMap; }
475  SYS_DEPRECATED_HDK(13.0)
476  GA_Offset *getOffsets()
477  { return (GA_Offset *)myOffsets; }
478 
479  private:
480  GA_AttributeRefMap myMap;
481  UT_StackBuffer<GA_Offset> myOffsets;
482  };
483 
484 protected:
485  void setDetail(const GEO_Detail *gdp);
486  void setDetail(GEO_Detail *gdp);
487  void setTempDetail(const GEO_Detail *gdp);
488 
489  const GEO_Detail *
491  { return (myMutableDetail ? myMutableDetail : myConstDetail); }
492 
493  void invalidateCachedLists();
494 
495  // Add an attribute to the attribute list & name map
497  bool removeAttribute(int i);
498  bool removeAttribute(const char *name);
499 
500  GEO_AttributeHandle *getEntry(int i) const { return myAttribs(i); }
501  GEO_AttributeHandle *getEntry(const char *name) const;
502 
503  /// Removes the attributes
504  void clearAttributes();
505 
506 private:
507  // When myMutableDetail is set, myConstDetail will also be set, to either
508  // the same detail, if we were bound to a mutable detail, or to the const
509  // detail from which we were bound to a mutable copy. In the latter case
510  // we also have myMutableDetail == &myVertexPool.getDetail().
511  //
512  // When bound to a const detail, only myConstDetail will be set.
513  const GEO_Detail *myConstDetail;
514  GEO_Detail *myMutableDetail;
515 
518  GA_VertexPool myVertexPool;
519  GEO_AttributeHandleList *myBoundClosureList;
520  bool myReadOnly;
521  bool myIsDefaultSourceMap;
522 };
523 
525 
526 #endif
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
Definition of a geometry attribute.
Definition: GA_Attribute.h:198
void setValue(fpreal val)
*get result *(waiting if necessary)*A common idiom is to fire a bunch of sub tasks at the and then *wait for them to all complete We provide a helper class
Definition: thread.h:623
void
Definition: png.h:1083
const GLdouble * v
Definition: glcorearb.h:837
#define SYS_DEPRECATED_PUSH_DISABLE()
#define SYS_DEPRECATED_POP_DISABLE()
void copyDataFrom(const GEO_AttributeHandle &src)
Copies the data from the src attribute to this attribute.
virtual bool lerp(GA_AttributeOperand &d, GA_AttributeOperand &a, GA_AttributeOperand &b, GA_AttributeOperand &t) const
d = SYSlerp(a, b, t);
const GEO_Detail * getBoundDetail() const
GLdouble s
Definition: glad.h:3009
GEO_AttributeHandle * clone() const
Manages allocation/deletion of temporary vertex/points for a detail.
Definition: GA_VertexPool.h:35
void copyDestData(const GEO_Primitive *p, const GEO_Vertex *v)
GA_Size GA_VertexPoolIndex
Definition: GA_VertexPool.h:20
void setPoint(GA_Offset offset)
#define GA_INVALID_OFFSET
Definition: GA_Types.h:678
void addScaleDest(const GEO_Primitive *p, const GEO_Vertex *v, fpreal s)
GA_Size GA_Offset
Definition: GA_Types.h:641
void setPrimitive(GA_Offset offset)
GA_API const UT_StringHolder scale
void appendAttribute(PointDataTreeT &tree, const Name &name, const NamePair &type, const Index strideOrTotalSize, const bool constantStride, const Metadata *defaultValue, const bool hidden, const bool transient)
Appends a new attribute to the VDB tree (this method does not require a templated AttributeType) ...
GA_AttributeScope
Definition: GA_Types.h:142
GLintptr offset
Definition: glcorearb.h:665
void addScale(const GEO_AttributeHandle &gah, fpreal w)
Performs: this = this + gah * w.
int getFloatCount(bool includePw) const
void multiplyDest(const GEO_Primitive *p, const GEO_Vertex *v)
GEO_AttributeHandle * getEntry(int i) const
void setElement(GEO_Vertex *v)
#define GEO_API
Definition: GEO_API.h:14
A handle to simplify manipulation of multiple attributes.
Data has no numeric representation.
Definition: GA_Types.h:145
GLuint const GLchar * name
Definition: glcorearb.h:786
#define SYS_DEPRECATED_HDK(__V__)
GLushort pattern
Definition: glad.h:2583
GA_TypeInfo
Definition: GA_Types.h:100
GLfloat v0
Definition: glcorearb.h:816
GLfloat GLfloat GLfloat GLfloat h
Definition: glcorearb.h:2002
GA_AttributeOwner
Definition: GA_Types.h:34
#define GEO_AHANDLE_LIST_INCLUDE_P
fpreal64 fpreal
Definition: SYS_Types.h:277
GLuint index
Definition: glcorearb.h:786
GLfloat GLfloat v1
Definition: glcorearb.h:817
void dump(const char *msg="") const
GLubyte GLubyte GLubyte GLubyte w
Definition: glcorearb.h:857
Definition: core.h:1131
GLenum GLenum GLsizei void * row
Definition: glad.h:5135
void setVertex(GA_Offset offset)
ImageBuf OIIO_API add(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
#define const
Definition: zconf.h:214
type
Definition: core.h:1059
uint64_t multiply(uint64_t lhs, uint64_t rhs)
Definition: format-inl.h:258
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glcorearb.h:1297