HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GR_UpdateParms.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: GR_UpdateParms.h ( GR Library, C++)
7  *
8  * COMMENTS:
9  * Parameter class containing all parameters for GR_Primitive::update()
10  * and GR_GeoRender::update().
11  * GR_ViewUpdateParms is a subset of these parameters sent to viewUpdate().
12  * Don't cache these structures.
13  */
14 #ifndef GR_UpdateParms_h
15 #define GR_UpdateParms_h
16 
17 #include "GR_API.h"
18 #include "GR_Defines.h"
19 #include "GR_DisplayOption.h"
20 
21 #include <GU/GU_SelectType.h>
22 #include <GT/GT_RefineParms.h>
23 #include <GU/GU_DetailHandle.h>
24 #include <RE/RE_Material.h>
25 #include <RE/RE_CachedObject.h>
26 
27 #include <UT/UT_Matrix4.h>
28 #include <UT/UT_StringHolder.h>
29 #include <UT/UT_Map.h>
30 
31 class OP_Node;
32 class UT_BitArray;
33 
34 /// set of parameters sent to GR_Primitive::update()
36 {
37 public:
38  GR_UpdateReason reason; // reason(s) for update
39  OP_Node *op_node; // node detail belongs to
40  GU_ConstDetailHandle geometry; // detail prim is processed for
41  const UT_IntArray &geo_indices; // DOP geometry indices selection
42  const GT_RefineParms &refine_parms; // GT refinement parms
43  const GR_DisplayOption &dopts; // current display options
44  const RE_MaterialAtlas &material_atlas; // new material list
45  const char *view_name; // full pathname of the viewer
46  int poly_mesh_limit; // max #polys in poly mesh
47  GU_SelectionHandle sel_override; // override selection
48 
49  GR_RenderVersion gl_version; // GL Renderer version (GL1,2,3)
50  RE_CacheVersion geo_version; // geometry serial version
51  RE_CacheVersion select_version; // selection serial version
52  RE_CacheVersion instance_version; // instanced geo serial verison
53  RE_CacheVersion view_version; // view frustum serial version
54  RE_CacheVersion inst_select_version; // Instance selection version
55  int instance_group; // Instancing group
56  const UT_Matrix4DArray *instances; // per-point instance transforms
57  // May be NULL if no instancing
58  const UT_BitArray *inst_select; // instance selection
59  const GR_FrustumList &visible_frustums; // frustums for visible viewports
60  bool object_selected; // true if selected at object lvl
61  GR_DecorationOverride required_dec; // decor required above user
62  // dispopt setting
63  unsigned force_wire:1, // must be wireframe
64  force_shaded:1, // must be smooth shaded
65  force_smooth:1, // ignore flat shading
66  refine_for_lops:1,// LOPs viewport
67  build_bone_weights:2, // bone weight arrays for (0,1,2,3) -> (0,4,8,12) bones
68  build_selection:1,// allow selection to be built
69  build_prim_selection:1, // finer control of
70  build_point_selection:1, // selections to build
71  build_vertex_selection:1,// by type; build_selection
72  build_edge_selection:1, // must be true as well
73  build_bpoint_selection:1,
74  build_ids:1; // allow prim/vert ids to be built
75 
77  OP_Node *node,
78  const GU_ConstDetailHandle &dtl,
79  const UT_IntArray &geoi,
80  const RE_MaterialAtlas &material_atlas,
81  UT_Map<UT_StringRef,int> *attribs,
82  const char *view_name,
83  int max_poly_mesh_size,
84  const GT_RefineParms &ref,
85  const GR_DisplayOption &d,
87  bool objselect,
88  GR_DecorationOverride req_dec,
89  RE_CacheVersion viewv,
90  const GR_FrustumList &view_frustums,
91  const UT_Matrix4DArray *insts,
92  int inst_grp,
93  RE_CacheVersion instv,
94  const UT_BitArray *inst_select,
95  RE_CacheVersion ints_select_version);
96 
98 
100  const GU_ConstDetailHandle &dtl);
101 
103  const RE_MaterialAtlas &atlas);
104  ~GR_UpdateParms();
105 
107  { return myNeededAttribs; }
109  {
110  UT_ASSERT(myAttribsCopied);
111  return myAttribsCopied ? myNeededAttribs : nullptr;
112  }
113  void copyNeededAttribs(bool only_if_shallow_ref);
114 
115  // NOTE: The attrib name must exist for the lifetime of the GR_UpdateParms
116  // object. This only keeps a reference to the string data.
117  void addNeededAttrib(const UT_StringRef &attrib);
118  void removeNeededAttrib(const UT_StringRef &attrib);
119 
120  void printNeededAttribs(std::ostream *os = nullptr) const;
121 private:
122  bool myAttribsCopied;
123  UT_Map<UT_StringRef,int> *myNeededAttribs;// attribs needed for all shaders
124 };
125 
126 /// Set of parameters sent to GR_Primitive::viewUpdate().
128 {
129 public:
131  const GU_ConstDetailHandle &geo,
132  RE_CacheVersion geov,
133  RE_CacheVersion selv,
134  RE_CacheVersion viewv,
135  const GR_FrustumList &frustums)
136  : dopts(opt),
137  geometry(geo),
138  geo_version(geov),
139  select_version(selv),
140  view_version(viewv),
141  visible_frustums(frustums) {}
142 
143 
144  const GR_DisplayOption &dopts; // current display options
145  GU_ConstDetailHandle geometry; // detail prim is processed for
146  RE_CacheVersion geo_version; // geometry serial version
147  RE_CacheVersion select_version; // selection serial version
148  RE_CacheVersion view_version; // view frustum serial version
149  const GR_FrustumList &visible_frustums; // frustums of all open viewports
150  // stereo cams have 2/viewport
151 };
152 
153 #endif
GR_ViewUpdateParms(const GR_DisplayOption &opt, const GU_ConstDetailHandle &geo, RE_CacheVersion geov, RE_CacheVersion selv, RE_CacheVersion viewv, const GR_FrustumList &frustums)
const GR_FrustumList & visible_frustums
GR_DecorationOverride
Definition: GR_Defines.h:196
Set of parameters sent to GR_Primitive::viewUpdate().
UT_Map< UT_StringRef, int > * getNeededAttribs()
GU_ConstDetailHandle geometry
RE_CacheVersion geo_version
OP_Node * op_node
const RE_MaterialAtlas & material_atlas
const GT_RefineParms & refine_parms
RE_CacheVersion select_version
const GR_DisplayOption & dopts
RE_CacheVersion view_version
RE_CacheVersion instance_version
GR_UpdateReason reason
set of parameters sent to GR_Primitive::update()
GR_RenderVersion gl_version
const GR_DisplayOption & dopts
RE_CacheVersion geo_version
const char * view_name
GLint ref
Definition: glcorearb.h:123
const UT_BitArray * inst_select
const UT_Map< UT_StringRef, int > * getConstNeededAttribs() const
#define GR_API
Definition: GR_API.h:10
GR_UpdateReason
Definition: GR_Defines.h:286
RE_CacheVersion view_version
GR_RenderVersion
Definition: GR_Defines.h:21
UT_SharedPtr< GU_Selection > GU_SelectionHandle
RE_CacheVersion select_version
const GR_FrustumList & visible_frustums
GU_ConstDetailHandle geometry
const UT_IntArray & geo_indices
GR_DecorationOverride required_dec
Simple class for a mutli-integer cache tag.
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:126
RE_CacheVersion inst_select_version
GU_SelectionHandle sel_override
const UT_Matrix4DArray * instances