HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GU_Copy2.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_Copy2.h (GU Library, C++)
7  *
8  * COMMENTS: Declarations of functions and structures for copying geometry.
9  */
10 
11 #pragma once
12 
13 #ifndef __GU_Copy2_h__
14 #define __GU_Copy2_h__
15 
16 #include "GU_API.h"
17 #include <GEO/GEO_PackedTypes.h>
19 #include <GA/GA_OffsetList.h>
20 #include <GA/GA_PolyCounts.h>
21 #include <GA/GA_Types.h>
22 #include <UT/UT_Array.h>
23 #include <UT/UT_ArrayStringMap.h>
24 #include <UT/UT_Interrupt.h>
25 #include <UT/UT_SmallArray.h>
26 #include <UT/UT_UniquePtr.h>
27 #include <UT/UT_VectorTypes.h>
28 #include <SYS/SYS_StaticAssert.h>
29 #include <SYS/SYS_Types.h>
30 
31 #include <utility> // For std::pair
32 
33 class GA_PointGroup;
34 class GA_PrimitiveGroup;
35 class GA_SplittableRange;
36 class GU_Detail;
38 
40 {
42  myTargetPDataID(GA_INVALID_DATAID),
43  myTargetUsingImplicitN(false),
44  myTargetPrimListDataID(GA_INVALID_DATAID),
45  myTargetTopologyDataID(GA_INVALID_DATAID),
46  myTransformCacheSize(0)
47  {
49  {
50  myTargetTransformDataIDs[i] = GA_INVALID_DATAID;
51  }
52  }
53 
55  {
56  myTransformMatrices3F.reset();
57  myTransformMatrices3D.reset();
58  myTransformTranslates3F.reset();
59  myTransformTranslates3D.reset();
60  myTransformInverse3F.reset();
61  myTransformInverse3D.reset();
62  myTransformQuaternionsF.reset();
63  myTransformQuaternionsD.reset();
64  myTransformCacheSize = 0;
65  }
66 
67  /// This is for keeping track of whether transforms have changed since the last cook.
73 
83 };
84 
86 {
89  myPrevSourcePrimListDataID(GA_INVALID_DATAID),
90  myPrevSourceTopologyDataID(GA_INVALID_DATAID),
91  myPrevOutputDetailID(-1),
92  myPrevTargetPtCount(-1),
93  myPrevHadSourceGroup(false),
94  myPrevHadTargetGroup(false),
95  myPrevPack(false),
96  myPrevSourceGroupDataID(GA_INVALID_DATAID),
97  myPrevTargetGroupDataID(GA_INVALID_DATAID),
98  myPrevSourceUniqueID(-1),
99  myPrevSourceMetaCacheCount(-1),
100  mySourceVertexCount(-1),
101  myTargetIDAttribDataID(GA_INVALID_DATAID),
102  mySourceIDAttribOwner(GA_ATTRIB_INVALID),
103  mySourceIDAttribDataID(GA_INVALID_DATAID),
104  myPrevPivotEnum(PackedPivot::CENTROID),
105  myPrevViewportLOD(GEO_ViewportLOD::GEO_VIEWPORT_FULL)
106  {}
107 
117 
118  enum class PackedPivot
119  {
120  ORIGIN,
121  CENTROID
122  };
123 
124  /// These are only used when myPrevPack is true.
129 
131  GA_OffsetList mySourceOffsetLists[3];
133 
134  /// This is for keeping track of whether source attributes need to be re-copied.
135  /// @{
136  UT_ArrayStringMap<GA_DataId> mySourceAttribDataIDs[3];
137  UT_ArrayStringMap<GA_DataId> mySourceGroupDataIDs[3];
139  /// @}
140 
142  {
143  COPY,
144  NONE,
145  MULTIPLY,
146  ADD,
147  SUBTRACT
148  };
150  {
154 
156  : myDataID(GA_INVALID_DATAID)
157  , myCopyTo(GA_ATTRIB_POINT)
158  , myCombineMethod(AttribCombineMethod::COPY)
159  {}
160  };
162 
163  /// This is for keeping track of whether target attributes need to be re-copied.
164  /// @{
167  /// @}
168 
169  struct PieceData
170  {
171  /// This is the number of target points that reference this piece.
173 
174  GA_OffsetList mySourceOffsetLists[3];
176  "Array above depends on owners other than detail being less than 3");
177 
178  /// This maps from the index into mySourceVertex to the index into mySourcePoints.
180 
183 
185 
186  UT_SmallArray<std::pair<int,exint>, sizeof(std::pair<int,exint>)> myPrimTypeCountPairs;
188  };
189 
192  UT_Array<exint> myPieceOffsetStarts[3];
194  "Array above depends on owners other than detail being less than 3");
195 
199 };
200 
201 namespace UT {
202 template <typename T>
203 struct DefaultClearer;
204 
205 template<>
206 struct GU_API DefaultClearer<GU_CopyToPointsCache::TargetAttribInfo>
207 {
210  {
214  }
217  {
218  return
220  v.myCopyTo == GA_ATTRIB_POINT &&
222  }
225  {
226  new ((void *)p) GU_CopyToPointsCache::TargetAttribInfo();
227  }
228  static const bool clearNeedsDestruction = false;
229 };
230 }
231 
232 namespace UT {
233 template <typename T>
234 struct DefaultClearer;
235 
236 // FIXME: Move this specialization to GA_OffsetList.h and template it for all GA_ListType and GA_ListTypeRef!
237 template<>
239 {
241  static void clear(GA_OffsetList &v)
242  {
243  v.clear();
244  }
246  static bool isClear(const GA_OffsetList &v)
247  {
248  return v.size() == 0 && v.isTrivial() && v.trivialStart() == GA_Offset(0) && !v.getExtraFlag();
249  }
252  {
253  new ((void *)p) GA_OffsetList();
254  }
255  static const bool clearNeedsDestruction = false;
256 };
257 }
258 
259 namespace GU_Copy
260 {
261 
262 GU_API void
264  GU_Detail *output_geo,
265  const GU_Detail *source,
266  const GU_Detail *target,
267  GU_CopyToPointsCache *cache,
268  const GU_CopyToPointsCache::TargetAttribInfoMap *target_attrib_info,
269  const GU_CopyToPointsCache::TargetAttribInfoMap *target_group_info);
270 
271 /// NOTE: transforms_changed must be initialized in advance to the condition
272 /// of whether there are external factors that lead the transforms
273 /// to need to be recomputed, e.g. the target point list changing from
274 /// the previous cook.
275 GU_API void
277  GU_PointTransformCache *cache,
278  const GA_OffsetListRef &target_point_list,
279  const GU_Detail *target,
280  const bool transform_using_more_than_P,
281  const bool allow_implicit_N,
282  bool &transforms_changed);
283 
284 namespace NeededTransforms {
285 enum
286 {
288 };
289 }
290 
291 /// Adds to output_geo any missing attributes from source or target as needed.
292 /// Also optionally computes what transform caches are needed for source
293 /// attributes.
294 ///
295 /// If an attribute is in both source and target_attrib_info/target_group_info,
296 /// it will be taken from target if myCombineMethod is COPY, and will be taken
297 /// from source if MULTIPLY, ADD, or SUBTRACT.
298 ///
299 /// If there is only a source, e.g. if output_geo is the internal detail of a
300 /// packed geometry primitive, omit target, target_attrib_info,
301 /// target_group_info, and num_target_attribs.
302 ///
303 /// If there is only a target, pass nullptr for source, and then
304 /// num_source_attribs, has_transform_matrices, and needed_transforms will
305 /// be ignored.
306 ///
307 /// NOTE: num_source_attribs or num_target_attribs, if non-null, should be an
308 /// array long enough to support GA_ATTRIB_VERTEX, GA_ATTRIB_POINT, and
309 /// GA_ATTRIB_PRIMITIVE as indices, (3 at the moment, since they come
310 /// first in GA_AttributeOwner).
311 /// NOTE: needed_transforms, if non-null, should be an array of length
312 /// NeededTransforms::num_needed_transforms.
313 GU_API void
315  GU_Detail *output_geo,
316  const GU_Detail *source,
317  exint *num_source_attribs = nullptr,
318  bool has_transform_matrices = false,
319  bool *needed_transforms = nullptr,
320  const GU_Detail *target = nullptr,
321  GU_CopyToPointsCache::TargetAttribInfoMap *target_attrib_info = nullptr,
322  GU_CopyToPointsCache::TargetAttribInfoMap *target_group_info = nullptr,
323  exint *num_target_attribs = nullptr);
324 
325 GU_API void
327  GU_PointTransformCache *cache,
328  exint num_target_points,
329  bool transforms_changed,
330  const bool needed_transforms[NeededTransforms::num_needed_transforms]);
331 
332 /// NOTE: This does not clear output_geo.
333 GU_API void
335  GU_Detail *output_geo,
336  const GU_Detail *const source,
337  const GA_OffsetList &source_point_list_cache,
338  const GA_OffsetList &source_vertex_list_cache,
339  const GA_OffsetList &source_prim_list_cache,
340  const exint ncopies);
341 
342 GU_API void
344  GA_OffsetList &offset_list,
345  const GU_Detail *const detail,
346  const GA_ElementGroup *const group,
347  const GA_AttributeOwner owner);
348 
349 /// NOTE: This does not clear output_geo.
350 /// NOTE: The point and primitive lists must be created with GUcreatePointOrPrimList.
351 GU_API void
353  GU_Detail *output_geo,
354  const GU_Detail *const source,
355  const exint source_point_count,
356  const exint source_vertex_count,
357  const exint source_prim_count,
358  const GA_OffsetList &source_point_list_cache,
359  GA_OffsetList &source_vertex_list_cache,
360  const GA_OffsetList &source_prim_list_cache,
361  const GA_PointGroup *const source_pointgroup,
362  const GA_PrimitiveGroup *const source_primgroup,
363  const exint ncopies);
364 
365 GU_API void
367  GU_Detail *const output_geo,
368  const exint num_packed_prims);
369 
370 GU_API void
372  GU_Detail *const output_geo,
373  const GA_SplittableRange *const output_splittable_ranges,
374  const GU_Detail *const source,
375  const exint num_target_points,
376  GU_CopyToPointsCache *const cache,
377  const GA_OffsetList *const source_offset_lists,
378  const exint *const num_source_attribs,
379  const bool no_transforms,
380  const bool had_transform_matrices,
381  const bool has_transform_matrices,
382  const bool topology_changed,
383  const bool transforms_changed,
384  const GU_Detail *const target = nullptr,
385  const GU_CopyToPointsCache::TargetAttribInfoMap *const target_attrib_info = nullptr,
386  const GU_CopyToPointsCache::TargetAttribInfoMap *const target_group_info = nullptr,
387  const exint *const target_to_piecei = nullptr,
388  const UT_Array<exint> *const owner_piece_offset_starts = nullptr,
389  const GU_CopyToPointsCache::PieceData *const piece_data = nullptr,
390  UT_Interrupt *boss = nullptr);
391 
392 GU_API void
394  GU_Detail *const output_geo,
395  const GA_SplittableRange *const output_splittable_ranges,
396  const exint ncopies,
397  GU_CopyToPointsCache *const cache,
398  const exint source_point_count,
399  const exint source_vertex_count,
400  const exint source_prim_count,
401  const exint *const num_target_attribs,
402  const GA_OffsetListRef &target_point_list,
403  const GU_Detail *const target,
404  GU_CopyToPointsCache::TargetAttribInfoMap &target_attrib_info,
406  const bool topology_changed,
407  const exint *const target_to_piecei = nullptr,
408  const UT_Array<exint> *const owner_piece_offset_starts = nullptr,
409  const GU_CopyToPointsCache::PieceData *const piece_data = nullptr,
410  UT_Interrupt *boss = nullptr);
411 
412 /// This sets the packed primitive local transforms,
413 /// and sets P based on the translations and pivots.
414 GU_API void
416  GU_Detail *output_geo,
417  GU_CopyToPointsCache *cache,
418  const bool had_transform_matrices,
419  const exint num_packed_prims,
420  const UT_Vector3 *const constant_pivot,
421  UT_Interrupt *boss = nullptr);
422 
423 /// This sets the packed primitive local transforms,
424 /// sets P based on the translations and pivots,
425 /// (i.e. it first calls GUupdatePackedPrimTransforms),
426 /// then removes unnecessary attributes, adds needed attributes from target,
427 /// and copies target attribute values.
428 ///
429 /// NOTE: constant_pivot being null means to get pivots from the primitives.
430 GU_API void
432  GU_Detail *output_geo,
433  GU_CopyToPointsCache *cache,
434  const bool topology_changed,
435  const bool had_transform_matrices,
436  const GU_Detail *const target,
437  const GA_OffsetListRef &target_point_list,
438  GU_CopyToPointsCache::TargetAttribInfoMap &target_attrib_info,
440  const UT_Vector3 *const constant_pivot);
441 
442 /// Uses the transforms in cache and geometry from source
443 /// to create num_packed_prims packed geometry primitives referencing
444 /// the same geometry. If the source groups are null, source_handle
445 /// will be used to create the packed geometry primitives.
446 ///
447 /// If target and the later parameters are non-null, target attributes
448 /// in target_attrib_info and target_group_info will be copied from
449 /// the points in target_point_list.
450 ///
451 /// NOTE: This will clear output_geo if the topology has changed since
452 /// the previous cook.
453 GU_API void
455  GU_Detail *output_geo,
456  const GEO_ViewportLOD lod,
457  const GU_CopyToPointsCache::PackedPivot pivot_type,
458  GU_CopyToPointsCache *cache,
459  const GU_ConstDetailHandle source_handle,
460  const GU_Detail *source,
461  const GA_PointGroup *source_pointgroup,
462  const GA_PrimitiveGroup *source_primgroup,
463  bool source_topology_changed,
464  bool had_transform_matrices,
465  bool transforms_changed,
466  const exint num_packed_prims,
467  const GU_Detail *target = nullptr,
468  const GA_OffsetListRef *target_point_list = nullptr,
469  GU_CopyToPointsCache::TargetAttribInfoMap *target_attrib_info = nullptr,
470  GU_CopyToPointsCache::TargetAttribInfoMap *target_group_info = nullptr);
471 
472 
473 } // namespace GU_Copy
474 
475 #endif
SYS_FORCE_INLINE void clear()
clear removes all of the entries
GEO_ViewportLOD myPrevViewportLOD
Definition: GU_Copy2.h:128
UT_UniquePtr< UT_Matrix3F[]> myTransformMatrices3F
Definition: GU_Copy2.h:74
GA_DataId myTargetIDAttribDataID
Definition: GU_Copy2.h:196
GU_API void GUcreatePointOrPrimList(GA_OffsetList &offset_list, const GU_Detail *const detail, const GA_ElementGroup *const group, const GA_AttributeOwner owner)
Definition: GU_Copy2.C:1897
UT_ArrayStringMap< GA_DataId > mySourceEdgeGroupDataIDs
Definition: GU_Copy2.h:138
UT_UniquePtr< UT_Vector3F[]> myTransformTranslates3F
Definition: GU_Copy2.h:76
exint mySourceVertexCount
Definition: GU_Copy2.h:130
#define SYS_STATIC_ASSERT_MSG(expr, msg)
int64 GA_DataId
Definition: GA_Types.h:696
const GLdouble * v
Definition: glcorearb.h:837
GA_OffsetListType< GA_Size > GA_OffsetList
GA_OffsetList is a map from index to offset.
exint myTransformCacheSize
Definition: GU_Copy2.h:82
UT_UniquePtr< UT_Matrix3D[]> myTransformInverse3D
Definition: GU_Copy2.h:79
SYS_FORCE_INLINE bool getExtraFlag() const
Synonym for isClosed()
GA_DataId mySourceIDAttribOwner
Definition: GU_Copy2.h:197
GA_ListType< exint, exint > myRelVtxToPt
This maps from the index into mySourceVertex to the index into mySourcePoints.
Definition: GU_Copy2.h:179
int64 exint
Definition: SYS_Types.h:125
static SYS_FORCE_INLINE void clear(GU_CopyToPointsCache::TargetAttribInfo &v)
Definition: GU_Copy2.h:209
UT_Array< PieceData > myPieceData
Definition: GU_Copy2.h:190
GA_DataId myTargetPDataID
Definition: GU_Copy2.h:69
UT_SmallArray< exint, 2 *sizeof(exint)> myClosedSpanLengths
Definition: GU_Copy2.h:187
GA_DataId myPrevSourcePrimListDataID
Definition: GU_Copy2.h:109
exint myPrevSourceMetaCacheCount
Definition: GU_Copy2.h:126
exint myPrevSourceUniqueID
These are only used when myPrevPack is true.
Definition: GU_Copy2.h:125
static SYS_FORCE_INLINE void clearConstruct(GU_CopyToPointsCache::TargetAttribInfo *p)
Definition: GU_Copy2.h:224
GU_API void GUcreateVertexListAndGeometryFromSource(GU_Detail *output_geo, const GU_Detail *const source, const exint source_point_count, const exint source_vertex_count, const exint source_prim_count, const GA_OffsetList &source_point_list_cache, GA_OffsetList &source_vertex_list_cache, const GA_OffsetList &source_prim_list_cache, const GA_PointGroup *const source_pointgroup, const GA_PrimitiveGroup *const source_primgroup, const exint ncopies)
Definition: GU_Copy2.C:1921
#define GA_INVALID_DATAID
Definition: GA_Types.h:697
static SYS_FORCE_INLINE void clear(GA_OffsetList &v)
Definition: GU_Copy2.h:241
UT_UniquePtr< UT_QuaternionF[]> myTransformQuaternionsF
Definition: GU_Copy2.h:80
GU_API void GUsetupPointTransforms(GU_PointTransformCache *cache, const GA_OffsetListRef &target_point_list, const GU_Detail *target, const bool transform_using_more_than_P, const bool allow_implicit_N, bool &transforms_changed)
exint GA_Size
Defines the bit width for index and offset types in GA.
Definition: GA_Types.h:236
AttribCombineMethod myCombineMethod
Definition: GU_Copy2.h:153
UT_UniquePtr< UT_Matrix3D[]> myTransformMatrices3D
Definition: GU_Copy2.h:75
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
Definition: UT_UniquePtr.h:39
GA_DataId mySourceIDAttribDataID
Definition: GU_Copy2.h:198
GA_Size GA_Offset
Definition: GA_Types.h:646
GU_API void GUcreateEmptyPackedGeometryPrims(GU_Detail *const output_geo, const exint num_packed_prims)
Definition: GU_Copy2.C:1978
SYS_FORCE_INLINE bool isTrivial() const
UT_Array< exint > myTargetToPiece
Definition: GU_Copy2.h:191
GU_API void GUcreateGeometryFromSource(GU_Detail *output_geo, const GU_Detail *const source, const GA_OffsetList &source_point_list_cache, const GA_OffsetList &source_vertex_list_cache, const GA_OffsetList &source_prim_list_cache, const exint ncopies)
NOTE: This does not clear output_geo.
Definition: GU_Copy2.C:1689
GA_PolyCounts myVertexListSizeList
Definition: GU_Copy2.h:184
GA_Size myPrevTargetPtCount
Definition: GU_Copy2.h:111
exint myRefCount
This is the number of target points that reference this piece.
Definition: GU_Copy2.h:172
UT_UniquePtr< UT_QuaternionD[]> myTransformQuaternionsD
Definition: GU_Copy2.h:81
UT_UniquePtr< UT_Vector3D[]> myTransformTranslates3D
Definition: GU_Copy2.h:77
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
GLsizei GLsizei GLchar * source
Definition: glcorearb.h:803
GU_API void GUaddAttributesFromSourceOrTarget(GU_Detail *output_geo, const GU_Detail *source, exint *num_source_attribs=nullptr, bool has_transform_matrices=false, bool *needed_transforms=nullptr, const GU_Detail *target=nullptr, GU_CopyToPointsCache::TargetAttribInfoMap *target_attrib_info=nullptr, GU_CopyToPointsCache::TargetAttribInfoMap *target_group_info=nullptr, exint *num_target_attribs=nullptr)
Definition: GU_Copy2.C:457
GLenum target
Definition: glcorearb.h:1667
GA_DataId myPrevTargetGroupDataID
Definition: GU_Copy2.h:116
static SYS_FORCE_INLINE bool isClear(const GU_CopyToPointsCache::TargetAttribInfo &v)
Definition: GU_Copy2.h:216
#define GU_API
Definition: GU_API.h:14
GA_DataId myPrevSourceGroupDataID
Definition: GU_Copy2.h:115
TargetAttribInfoMap myTargetAttribInfo
Definition: GU_Copy2.h:165
GU_API void GUupdatePackedPrimTransforms(GU_Detail *output_geo, GU_CopyToPointsCache *cache, const bool had_transform_matrices, const exint num_packed_prims, const UT_Vector3 *const constant_pivot, UT_Interrupt *boss=nullptr)
GU_API void GUcomputeTransformTypeCaches(GU_PointTransformCache *cache, exint num_target_points, bool transforms_changed, const bool needed_transforms[NeededTransforms::num_needed_transforms])
GU_API void GUremoveUnnecessaryAttribs(GU_Detail *output_geo, const GU_Detail *source, const GU_Detail *target, GU_CopyToPointsCache *cache, const GU_CopyToPointsCache::TargetAttribInfoMap *target_attrib_info, const GU_CopyToPointsCache::TargetAttribInfoMap *target_group_info)
PackedPivot myPrevPivotEnum
Definition: GU_Copy2.h:127
GA_AttributeOwner
Definition: GA_Types.h:35
GA_OffsetList myTargetOffsetList
Definition: GU_Copy2.h:132
GU_API void GUcopyAttributesFromSource(GU_Detail *const output_geo, const GA_SplittableRange *const output_splittable_ranges, const GU_Detail *const source, const exint num_target_points, GU_CopyToPointsCache *const cache, const GA_OffsetList *const source_offset_lists, const exint *const num_source_attribs, const bool no_transforms, const bool had_transform_matrices, const bool has_transform_matrices, const bool topology_changed, const bool transforms_changed, const GU_Detail *const target=nullptr, const GU_CopyToPointsCache::TargetAttribInfoMap *const target_attrib_info=nullptr, const GU_CopyToPointsCache::TargetAttribInfoMap *const target_group_info=nullptr, const exint *const target_to_piecei=nullptr, const UT_Array< exint > *const owner_piece_offset_starts=nullptr, const GU_CopyToPointsCache::PieceData *const piece_data=nullptr, UT_Interrupt *boss=nullptr)
GEO_ViewportLOD
GA_DataId myTargetTopologyDataID
Definition: GU_Copy2.h:72
GU_API void GUcopyPackAllSame(GU_Detail *output_geo, const GEO_ViewportLOD lod, const GU_CopyToPointsCache::PackedPivot pivot_type, GU_CopyToPointsCache *cache, const GU_ConstDetailHandle source_handle, const GU_Detail *source, const GA_PointGroup *source_pointgroup, const GA_PrimitiveGroup *source_primgroup, bool source_topology_changed, bool had_transform_matrices, bool transforms_changed, const exint num_packed_prims, const GU_Detail *target=nullptr, const GA_OffsetListRef *target_point_list=nullptr, GU_CopyToPointsCache::TargetAttribInfoMap *target_attrib_info=nullptr, GU_CopyToPointsCache::TargetAttribInfoMap *target_group_info=nullptr)
static SYS_FORCE_INLINE bool isClear(const GA_OffsetList &v)
Definition: GU_Copy2.h:246
GA_DataId myTargetPrimListDataID
Definition: GU_Copy2.h:71
UT_UniquePtr< UT_Matrix3F[]> myTransformInverse3F
Definition: GU_Copy2.h:78
exint myPrevOutputDetailID
Definition: GU_Copy2.h:108
GU_API void GUhandleTargetAttribsForPackedPrims(GU_Detail *output_geo, GU_CopyToPointsCache *cache, const bool topology_changed, const bool had_transform_matrices, const GU_Detail *const target, const GA_OffsetListRef &target_point_list, GU_CopyToPointsCache::TargetAttribInfoMap &target_attrib_info, GU_CopyToPointsCache::TargetAttribInfoMap &target_group_info, const UT_Vector3 *const constant_pivot)
TargetAttribInfoMap myTargetGroupInfo
Definition: GU_Copy2.h:166
SYS_FORCE_INLINE ToType trivialStart() const
Returns the start, assuming this list is trivial.
GLint lod
Definition: glcorearb.h:2765
GU_API void GUcopyAttributesFromTarget(GU_Detail *const output_geo, const GA_SplittableRange *const output_splittable_ranges, const exint ncopies, GU_CopyToPointsCache *const cache, const exint source_point_count, const exint source_vertex_count, const exint source_prim_count, const exint *const num_target_attribs, const GA_OffsetListRef &target_point_list, const GU_Detail *const target, GU_CopyToPointsCache::TargetAttribInfoMap &target_attrib_info, GU_CopyToPointsCache::TargetAttribInfoMap &target_group_info, const bool topology_changed, const exint *const target_to_piecei=nullptr, const UT_Array< exint > *const owner_piece_offset_starts=nullptr, const GU_CopyToPointsCache::PieceData *const piece_data=nullptr, UT_Interrupt *boss=nullptr)
void clearTransformArrays()
Definition: GU_Copy2.h:54
GA_DataId myPrevSourceTopologyDataID
Definition: GU_Copy2.h:110
SYS_FORCE_INLINE FromType size() const
Returns the number of used elements in the list (always <= capacity())
static SYS_FORCE_INLINE void clearConstruct(GA_OffsetList *p)
Definition: GU_Copy2.h:251