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