HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GU_PackedFactory.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: GU_PackedFactory.h (GU Library, C++)
7  *
8  * COMMENTS:
9  */
10 
11 #ifndef __GU_PackedFactory__
12 #define __GU_PackedFactory__
13 
14 #include "GU_API.h"
15 #include <UT/UT_Options.h>
16 #include <UT/UT_String.h>
17 #include <UT/UT_StringHolder.h>
19 #include <GA/GA_IntrinsicDef.h>
20 #include "GU_PackedImpl.h"
21 
22 namespace GU_PackedFactoryPrivate
23 {
24  class IntrinsicDef;
25 }
26 
28 {
29 public:
30  /// @{
31  /// Typedefs
33  typedef GU_PackedFactoryPrivate::IntrinsicDef IntrinsicDef;
34  /// @}
35 
36  /// <b> Intrinsics in Packed Primitives </b>
37  ///
38  /// Convenience methods for casting a subclass of GU_PackedImpl accessor
39  /// methods to the methods used by registerIntrinsic or
40  /// registerTupleIntrinsic. for example, the factory constructor might
41  /// look like: @code
42  /// class MyImpl : public GU_PackedImpl {
43  /// const std::string &filename() const { return myFilename; }
44  /// void setFilename(const std::string &f) { myFilename = f; }
45  /// fpreal frame() const { return myFrame; }
46  /// void setFrame(fpreal f) { myFrame = f; }
47  /// bool isAnimated() const { return myAnimated; }
48  /// };
49  /// class MyFactory : public GU_PackedFactory {
50  /// MyFactory()
51  /// {
52  /// registerIntrinsic("filename"_sh,
53  /// StdStringGetterCast(&MyImpl::filename),
54  /// StdStringSetterCast(&MyImpl::setFilename));
55  /// registerIntrinsic("frame"_sh,
56  /// FloatGetterCast(&MyImpl::frame),
57  /// FloatSetterCast(&MyImpl::setFrame));
58  /// registerIntrinsic("animated"_sh,
59  /// BoolGetterCast(&MyImpl::isAnimated));
60  /// }
61  /// };
62  /// @endcode
63 
64 #define DECL_GET_CAST(TYPE, METHOD, METHODCAST) \
65  template <typename CLASS> inline GU_PackedImpl::METHOD \
66  METHODCAST(TYPE (CLASS::*method)(const GU_PrimPacked *)const) \
67  { return (GU_PackedImpl::METHOD)(method); }
68 #define DECL_SET_CAST(TYPE, METHOD, METHODCAST) \
69  template <typename CLASS> inline GU_PackedImpl::METHOD \
70  METHODCAST(void (CLASS::*method)(GU_PrimPacked *, TYPE)) \
71  { return (GU_PackedImpl::METHOD)(method); }
72 
73 #define DECL_TGET_CAST(TYPE, METHOD, METHODCAST) \
74  template <typename CLASS> inline GU_PackedImpl::METHOD \
75  METHODCAST(TYPE (CLASS::*method)(const GU_PrimPacked *,exint)const) \
76  { return (GU_PackedImpl::METHOD)(method); }
77 #define DECL_TSET_CAST(TYPE, METHOD, METHODCAST) \
78  template <typename CLASS> inline GU_PackedImpl::METHOD \
79  METHODCAST(void (CLASS::*method)(GU_PrimPacked *, exint, TYPE)) \
80  { return (GU_PackedImpl::METHOD)(method); }
81 
82 #define DECL_VGET_CAST(TYPE, METHOD, METHODCAST) \
83  template <typename CLASS> inline GU_PackedImpl::METHOD \
84  METHODCAST(void (CLASS::*method)(const GU_PrimPacked *, TYPE *, exint) const) \
85  { return (GU_PackedImpl::METHOD)(method); }
86 #define DECL_VSET_CAST(TYPE, METHOD, METHODCAST) \
87  template <typename CLASS> inline GU_PackedImpl::METHOD \
88  METHODCAST(void (CLASS::*method)(GU_PrimPacked *, const TYPE *, exint)) \
89  { return (GU_PackedImpl::METHOD)(method); }
90 
91 
92  DECL_GET_CAST(fpreal, FloatGetter, FloatGetterCast)
93  DECL_SET_CAST(fpreal, FloatSetter, FloatSetterCast)
94  DECL_GET_CAST(exint, IntGetter, IntGetterCast)
95  DECL_SET_CAST(exint, IntSetter, IntSetterCast)
96  DECL_GET_CAST(bool, BoolGetter, BoolGetterCast)
97  DECL_SET_CAST(bool, BoolSetter, BoolSetterCast)
98  DECL_GET_CAST(const char *, StringGetter, StringGetterCast)
99  DECL_SET_CAST(const char *, StringSetter, StringSetterCast)
100  DECL_GET_CAST(std::string, StdStringGetter, StdStringGetterCast)
101  DECL_SET_CAST(const std::string &, StdStringSetter, StdStringSetterCast)
102  DECL_GET_CAST(UT_StringHolder, StringHolderGetter, StringHolderGetterCast)
103  DECL_SET_CAST(const UT_StringHolder &, StringHolderSetter, StringHolderSetterCast)
104  DECL_GET_CAST(UT_OptionsHolder, DictGetter, DictGetterCast)
105  DECL_SET_CAST(const UT_OptionsHolder &, DictSetter, DictSetterCast)
106 
107  DECL_TGET_CAST(fpreal, FloatTupleGetter, FloatTupleGetterCast)
108  DECL_TSET_CAST(fpreal, FloatTupleSetter, FloatTupleSetterCast)
109  DECL_TGET_CAST(exint, IntTupleGetter, IntTupleGetterCast)
110  DECL_TSET_CAST(exint, IntTupleSetter, IntTupleSetterCast)
111  DECL_TGET_CAST(bool, BoolTupleGetter, BoolTupleGetterCast)
112  DECL_TSET_CAST(bool, BoolTupleSetter, BoolTupleSetterCast)
113  DECL_TGET_CAST(const char *, StringTupleGetter, StringTupleGetterCast)
114  DECL_TSET_CAST(const char *, StringTupleSetter, StringTupleSetterCast)
115  DECL_TGET_CAST(const std::string &, StdStringTupleGetter, StdStringTupleGetterCast)
116  DECL_TSET_CAST(const std::string &, StdStringTupleSetter, StdStringTupleSetterCast)
117  DECL_TGET_CAST(const UT_StringHolder &, StringHolderTupleGetter, StringHolderTupleGetterCast)
118  DECL_TSET_CAST(const UT_StringHolder &, StringHolderTupleSetter, StringHolderTupleSetterCast)
119  DECL_TGET_CAST(const UT_OptionsHolder &, DictTupleGetter, DictTupleGetterCast)
120  DECL_TSET_CAST(const UT_OptionsHolder &, DictTupleSetter, DictTupleSetterCast)
121 
122  DECL_VGET_CAST(fpreal32, F32VectorGetter, F32VectorGetterCast)
123  DECL_VSET_CAST(fpreal32, F32VectorSetter, F32VectorSetterCast)
124  DECL_VGET_CAST(fpreal64, F64VectorGetter, F64VectorGetterCast)
125  DECL_VSET_CAST(fpreal64, F64VectorSetter, F64VectorSetterCast)
126  DECL_VGET_CAST(int32, I32VectorGetter, I32VectorGetterCast)
127  DECL_VSET_CAST(int32, I32VectorSetter, I32VectorSetterCast)
128  DECL_VGET_CAST(int64, I64VectorGetter, I64VectorGetterCast)
129  DECL_VSET_CAST(int64, I64VectorSetter, I64VectorSetterCast)
130  DECL_VGET_CAST(bool, BVectorGetter, BVectorGetterCast)
131  DECL_VSET_CAST(bool, BVectorSetter, BVectorSetterCast)
132 
133  template <typename CLASS>
134  inline GU_PackedImpl::StringArrayGetter
135  StringArrayGetterCast(void (CLASS::*method)(const GU_PrimPacked *,UT_StringArray &) const)
136  {
137  return (GU_PackedImpl::StringArrayGetter)(method);
138  }
139 
140  DECL_SET_CAST(const UT_StringArray &, StringArraySetter,
141  StringArraySetterCast)
142 
143  template <typename CLASS>
144  inline GU_PackedImpl::DictArrayGetter
145  DictArrayGetterCast(void (CLASS::*method)(const GU_PrimPacked *,UT_Array<UT_OptionsHolder> &) const)
146  {
147  return (GU_PackedImpl::DictArrayGetter)(method);
148  }
149 
150  DECL_SET_CAST(const UT_Array<UT_OptionsHolder> &, DictArraySetter,
151  DictArraySetterCast)
152 
153 #undef DECL_GET_METHOD_CAST
154 #undef DECL_SET_METHOD_CAST
155 #undef DECL_TGET_METHOD_CAST
156 #undef DECL_TSET_METHOD_CAST
157 #undef DECL_VGET_METHOD_CAST
158 #undef DECL_VSET_METHOD_CAST
159 
160  /// Factory constructor
164  /// Factory destructor
165  virtual ~GU_PackedFactory();
166 
167  bool isRegistered() const { return myTypeDef != 0; }
168 
169  /// @{
170  /// Member data accessors
171  const UT_StringHolder &name() const { return myName; }
172  const UT_StringHolder &label() const { return myLabel; }
173  const UT_StringHolder &icon() const { return myIcon; }
174  const GA_PrimitiveDefinition &typeDef() const { return *myTypeDef; }
175  /// @}
176 
177  /// Return an intrusive pointer to a default-constructed packed primitive
178  /// implementation of the correct type. Use this instead of create(), to avoid
179  /// redundantly allocating a new GU_PackedImpl that may just be replaced.
180  virtual const UT_IntrusivePtr<GU_PackedImpl> &defaultImpl() const = 0;
181 
182  /// Create new instance of a packed primitive implementation.
183  virtual GU_PackedImpl *create() const = 0;
184 
185  /// Load shared data for the specific implementation. Shared data must be
186  /// saved in an array containing: @code
187  /// [ "string type", "string key", object ]
188  /// @endcode
189  /// The @c type is used to differentiate between different types of shared
190  /// primitive data, while the @c key is used to uniquely identify blocks of
191  /// shared data.
192  ///
193  /// When loading a geometry file, the type and key will be loaded and
194  /// passed to this method to resolve the shared data. The code should look
195  /// something like: @code
196  /// if (!strcmp(type, "typename1"))
197  /// {
198  /// Typename1Container data;
199  /// if (!Typename1Container::load(p, data.myObject))
200  /// return false;
201  /// loadmap.resolveSharedData(key, data);
202  /// }
203  /// @endcode
204  /// This assumes that Typename1Container is a sub-class of
205  /// GA_SharedLoadData and where Typename1Container::myObject is the object
206  /// which is shared between multiple primitives.
207  ///
208  /// Note that the base class should be called if the type can't be handled
209  /// by the subclass.
210  virtual GA_SharedLoadData* loadSharedData(UT_JSONParser &p,
211  const char *type,
212  const char *key,
213  bool isDelayedLoad) const;
214 
215  virtual GA_SharedLoadDataStat* statSharedData(UT_JSONParser& parser) const;
216 
217  /// Query how many intrinsic attributes are supported by this primitive type
218  /// Default: return 0
219  int getIntrinsicCount() const
220  { return myIntrinsics.entries(); }
222  /// Get information about the definition of the Nth intrinsic
223  /// Default: assert
225  void getIntrinsicDefinition(int idx,
226  UT_String &name,
228  bool &read_only,
229  CollapseSingletons &collapse_singletons) const;
230  void getIntrinsicDefinition(int idx,
231  UT_StringHolder &name,
232  GA_StorageClass &storage,
233  bool &read_only,
234  CollapseSingletons &collapse_singletons) const;
235  /// Get the intrinsic tuple size (which might be varying)
236  /// Default: return 0
237  GA_Size getIntrinsicTupleSize(const GU_PrimPacked *proc,
238  int idx) const;
239  /// @{
240  /// Get/Set intrinsic attribute values for a primitive
241  /// Default: return 0
242  GA_Size getIntrinsicValue(const GU_PrimPacked *proc,
243  int idx, fpreal64 *val, GA_Size vsize) const;
244  GA_Size getIntrinsicValue(const GU_PrimPacked *proc,
245  int idx, int64 *val, GA_Size vsize) const;
246  GA_Size getIntrinsicValue(const GU_PrimPacked *proc,
247  int idx, UT_String &str) const;
248  GA_Size getIntrinsicValue(const GU_PrimPacked *proc,
249  int idx, UT_StringHolder &str) const;
250  GA_Size getIntrinsicValue(const GU_PrimPacked *proc,
251  int idx, UT_StringArray &strings) const;
252  GA_Size getIntrinsicValue(const GU_PrimPacked *proc,
253  int idx, UT_OptionsHolder &str) const;
254  GA_Size getIntrinsicValue(const GU_PrimPacked *proc,
255  int idx, UT_Array<UT_OptionsHolder> &str) const;
256  GA_Size setIntrinsicValue(GU_PrimPacked *proc,
257  int idx, const fpreal64 *val, GA_Size vsize) const;
258  GA_Size setIntrinsicValue(GU_PrimPacked *proc,
259  int idx, const int64 *val, GA_Size vsize) const;
260  GA_Size setIntrinsicValue(GU_PrimPacked *proc,
261  int idx, const UT_StringArray &values) const;
262  GA_Size setIntrinsicValue(GU_PrimPacked *proc,
263  int idx, const char **values, GA_Size size) const;
264  GA_Size setIntrinsicValue(GU_PrimPacked *proc,
265  int idx, const UT_Array<UT_OptionsHolder> &values) const;
266  GA_Size setIntrinsicValue(GU_PrimPacked *proc,
267  int idx, const UT_OptionsHolder *values, GA_Size size) const;
268  /// @}
269 
270  /// Register a scalar floating point intrinsic
271  void registerIntrinsic(const UT_StringHolder &name,
272  GU_PackedImpl::FloatGetter getter,
273  GU_PackedImpl::FloatSetter setter=NULL);
274  /// Register a scalar integer intrinsic
275  void registerIntrinsic(const UT_StringHolder &name,
276  GU_PackedImpl::IntGetter getter,
277  GU_PackedImpl::IntSetter setter=NULL);
278  /// Register a scalar boolean intrinsic
279  void registerIntrinsic(const UT_StringHolder &name,
280  GU_PackedImpl::BoolGetter getter,
281  GU_PackedImpl::BoolSetter setter=NULL);
282  /// Register a scalar string (const UT_StringHolder &) intrinsic
283  void registerIntrinsic(const UT_StringHolder &name,
284  GU_PackedImpl::StringGetter getter,
285  GU_PackedImpl::StringSetter setter=NULL);
286  /// Register a scalar string (const std::string &) intrinsic
287  void registerIntrinsic(const UT_StringHolder &name,
288  GU_PackedImpl::StdStringGetter getter,
289  GU_PackedImpl::StdStringSetter setter=NULL);
290  /// Register a scalar string (const UT_StringHolder &) intrinsic
291  void registerIntrinsic(const UT_StringHolder &name,
292  GU_PackedImpl::StringHolderGetter getter,
293  GU_PackedImpl::StringHolderSetter setter=NULL);
294  /// Register a scalar dictionary (const UT_OptionsHolder &) intrinsic
295  void registerIntrinsic(const UT_StringHolder &name,
296  GU_PackedImpl::DictGetter getter,
297  GU_PackedImpl::DictSetter setter=NULL);
298 
299  /// Register an intrinsic for a floating point array
300  void registerTupleIntrinsic(const UT_StringHolder &name,
301  GU_PackedImpl::IntGetter get_tuple_size,
302  GU_PackedImpl::FloatTupleGetter getter,
303  GU_PackedImpl::FloatTupleSetter setter=NULL,
304  GU_PackedImpl::IntSetter set_tuple_size=NULL,
305  CollapseSingletons collapse = CollapseSingletons::YES);
306  /// Register an intrinsic for an integer array
307  void registerTupleIntrinsic(const UT_StringHolder &name,
308  GU_PackedImpl::IntGetter get_tuple_size,
309  GU_PackedImpl::IntTupleGetter getter,
310  GU_PackedImpl::IntTupleSetter setter=NULL,
311  GU_PackedImpl::IntSetter set_tuple_size=NULL,
312  CollapseSingletons collapse = CollapseSingletons::YES);
313  /// Register an intrinsic for a boolean array
314  void registerTupleIntrinsic(const UT_StringHolder &name,
315  GU_PackedImpl::IntGetter get_tuple_size,
316  GU_PackedImpl::BoolTupleGetter getter,
317  GU_PackedImpl::BoolTupleSetter setter=NULL,
318  GU_PackedImpl::IntSetter set_tuple_size=NULL,
319  CollapseSingletons collapse = CollapseSingletons::YES);
320  /// Register an intrinsic for a string (const char *) array
321  void registerTupleIntrinsic(const UT_StringHolder &name,
322  GU_PackedImpl::IntGetter get_tuple_size,
323  GU_PackedImpl::StringTupleGetter getter,
324  GU_PackedImpl::StringTupleSetter setter=NULL,
325  GU_PackedImpl::IntSetter set_tuple_size=NULL,
326  CollapseSingletons collapse = CollapseSingletons::YES);
327  /// Register an intrinsic for a string (const std::string &) array
328  void registerTupleIntrinsic(const UT_StringHolder &name,
329  GU_PackedImpl::IntGetter get_tuple_size,
330  GU_PackedImpl::StdStringTupleGetter getter,
331  GU_PackedImpl::StdStringTupleSetter setter=NULL,
332  GU_PackedImpl::IntSetter set_tuple_size=NULL,
333  CollapseSingletons collapse = CollapseSingletons::YES);
334  /// Register an intrinsic for a string (const StringHolder &) array
335  void registerTupleIntrinsic(const UT_StringHolder &name,
336  GU_PackedImpl::IntGetter get_tuple_size,
337  GU_PackedImpl::StringHolderTupleGetter getter,
338  GU_PackedImpl::StringHolderTupleSetter setter=NULL,
339  GU_PackedImpl::IntSetter set_tuple_size=NULL,
340  CollapseSingletons collapse = CollapseSingletons::YES);
341  /// Register an intrinsic for a dict (const UT_OptionsHolder &) array
342  void registerTupleIntrinsic(const UT_StringHolder &name,
343  GU_PackedImpl::IntGetter get_tuple_size,
344  GU_PackedImpl::DictTupleGetter getter,
345  GU_PackedImpl::DictTupleSetter setter=NULL,
346  GU_PackedImpl::IntSetter set_tuple_size=NULL,
347  CollapseSingletons collapse = CollapseSingletons::YES);
348 
349  /// Register an intrinsic for a floating point array
350  void registerTupleIntrinsic(const UT_StringHolder &name,
351  GU_PackedImpl::IntGetter get_tuple_size,
352  GU_PackedImpl::F32VectorGetter getter,
353  GU_PackedImpl::F32VectorSetter setter=NULL,
354  GU_PackedImpl::IntSetter set_tuple_size=NULL,
355  CollapseSingletons collapse = CollapseSingletons::YES);
356  /// Register an intrinsic for a floating point array
357  void registerTupleIntrinsic(const UT_StringHolder &name,
358  GU_PackedImpl::IntGetter get_tuple_size,
359  GU_PackedImpl::F64VectorGetter getter,
360  GU_PackedImpl::F64VectorSetter setter=NULL,
361  GU_PackedImpl::IntSetter set_tuple_size=NULL,
362  CollapseSingletons collapse = CollapseSingletons::YES);
363  /// Register an intrinsic for an integer array
364  void registerTupleIntrinsic(const UT_StringHolder &name,
365  GU_PackedImpl::IntGetter get_tuple_size,
366  GU_PackedImpl::I32VectorGetter getter,
367  GU_PackedImpl::I32VectorSetter setter=NULL,
368  GU_PackedImpl::IntSetter set_tuple_size=NULL,
369  CollapseSingletons collapse = CollapseSingletons::YES);
370  /// Register an intrinsic for an integer array
371  void registerTupleIntrinsic(const UT_StringHolder &name,
372  GU_PackedImpl::IntGetter get_tuple_size,
373  GU_PackedImpl::I64VectorGetter getter,
374  GU_PackedImpl::I64VectorSetter setter=NULL,
375  GU_PackedImpl::IntSetter set_tuple_size=NULL,
376  CollapseSingletons collapse = CollapseSingletons::YES);
377  /// Register an intrinsic for a boolean array
378  void registerTupleIntrinsic(const UT_StringHolder &name,
379  GU_PackedImpl::IntGetter get_tuple_size,
380  GU_PackedImpl::BVectorGetter getter,
381  GU_PackedImpl::BVectorSetter setter=NULL,
382  GU_PackedImpl::IntSetter set_tuple_size=NULL,
383  CollapseSingletons collapse = CollapseSingletons::YES);
384  /// Register a string array intrinsic.
385  void registerTupleIntrinsic(const UT_StringHolder &name,
386  GU_PackedImpl::IntGetter get_tuple_size,
387  GU_PackedImpl::StringArrayGetter getter,
388  GU_PackedImpl::StringArraySetter setter = nullptr,
389  GU_PackedImpl::IntSetter set_tuple_size = nullptr,
390  CollapseSingletons collapse = CollapseSingletons::YES);
391  /// Register a dict array intrinsic.
392  void registerTupleIntrinsic(const UT_StringHolder &name,
393  GU_PackedImpl::IntGetter get_tuple_size,
394  GU_PackedImpl::DictArrayGetter getter,
395  GU_PackedImpl::DictArraySetter setter = nullptr,
396  GU_PackedImpl::IntSetter set_tuple_size = nullptr,
397  CollapseSingletons collapse = CollapseSingletons::YES);
398 
399  /// Clear any cached geometry. The method should return the number of
400  /// items cleared, and the default method just returns 0.
401  virtual exint clearCachedGeometry();
402 
403 private:
404  UT_StringHolder myName;
405  UT_StringHolder myLabel;
406  UT_StringHolder myIcon;
407  const GA_PrimitiveDefinition *myTypeDef;
408  UT_Array<IntrinsicDef *> myIntrinsics;
409  GA_IntrinsicDef myGAIntrinsics;
410 
411  friend class GU_PrimPacked; // To set the type definition.
412 };
413 
414 #endif
int int32
Definition: SYS_Types.h:39
GLuint GLsizei const GLchar * label
Definition: glcorearb.h:2545
*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
GA_StorageClass
Definition: GA_Types.h:73
getFileOption("OpenEXR:storage") storage
Definition: HDK_Image.dox:276
#define DECL_SET_CAST(TYPE, METHOD, METHODCAST)
void(GU_PackedImpl::* DictArrayGetter)(const GU_PrimPacked *, UT_Array< UT_OptionsHolder > &) const
const UT_StringHolder & icon() const
int64 exint
Definition: SYS_Types.h:125
JSON reader class which handles parsing of JSON or bJSON files.
Definition: UT_JSONParser.h:87
Stores information about intrinsic attributes for classes.
float fpreal32
Definition: SYS_Types.h:200
exint GA_Size
Defines the bit width for index and offset types in GA.
Definition: GA_Types.h:236
#define DECL_VSET_CAST(TYPE, METHOD, METHODCAST)
double fpreal64
Definition: SYS_Types.h:201
#define SYS_DEPRECATED_REPLACE(__V__, __R__)
#define DECL_TGET_CAST(TYPE, METHOD, METHODCAST)
DECL_SET_CAST(const UT_StringArray &, StringArraySetter, StringArraySetterCast) template< typename CLASS > inline GU_PackedImpl
Wrapper around hboost::intrusive_ptr.
long long int64
Definition: SYS_Types.h:116
#define GU_API
Definition: GU_API.h:14
GLuint const GLchar * name
Definition: glcorearb.h:786
GLsizei const GLchar *const * strings
Definition: glcorearb.h:1933
void(GU_PackedImpl::* StringArrayGetter)(const GU_PrimPacked *, UT_StringArray &) const
GLsizeiptr size
Definition: glcorearb.h:664
const UT_StringHolder & label() const
GLenum GLsizei GLsizei GLint * values
Definition: glcorearb.h:1602
fpreal64 fpreal
Definition: SYS_Types.h:277
bool isRegistered() const
#define DECL_TSET_CAST(TYPE, METHOD, METHODCAST)
#define DECL_VGET_CAST(TYPE, METHOD, METHODCAST)
int getIntrinsicCount() const
GLuint GLfloat * val
Definition: glcorearb.h:1608
GU_PackedFactoryPrivate::IntrinsicDef IntrinsicDef
GA_PrimitiveDefinition::SharedDataLoader SharedDataLoader
Definition of a geometric primitive.
type
Definition: core.h:1059
const GA_PrimitiveDefinition & typeDef() const
#define DECL_GET_CAST(TYPE, METHOD, METHODCAST)
const UT_StringHolder & name() const