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 class GR_MaterialGroups;
34 
35 /// set of parameters sent to GR_Primitive::update()
37 {
38 public:
39  GR_UpdateReason reason; // reason(s) for update
40  OP_Node *op_node; // node detail belongs to
41  GU_ConstDetailHandle geometry; // detail prim is processed for
42  const UT_IntArray &geo_indices; // DOP geometry indices selection
43  const GT_RefineParms &refine_parms; // GT refinement parms
44  const GR_DisplayOption &dopts; // current display options
45  const RE_MaterialAtlas &material_atlas; // new material list
46  const char *view_name; // full pathname of the viewer
47  int poly_mesh_limit; // max #polys in poly mesh
48  GU_SelectionHandle sel_override; // override selection
49 
50  GR_RenderVersion gl_version; // GL Renderer version (GL1,2,3)
51  RE_CacheVersion geo_version; // geometry serial version
52  RE_CacheVersion select_version; // selection serial version
53  RE_CacheVersion instance_version; // instanced geo serial verison
54  RE_CacheVersion view_version; // view frustum serial version
55  RE_CacheVersion inst_select_version; // Instance selection version
56  int instance_group; // Instancing group
57  const UT_Matrix4DArray *instances; // per-point instance transforms
58  // May be NULL if no instancing
59  const UT_IntArray *instance_levels; // Nested instancing level counts
60  const UT_BitArray *inst_select; // instance selection
61  const GR_MaterialGroups*extra_mat_groups; // materials from instances
62  const GR_FrustumList &visible_frustums; // frustums for visible viewports
63  bool object_selected; // true if selected at object lvl
64  GR_DecorationOverride required_dec; // decor required above user
65  // dispopt setting
66  unsigned force_wire:1, // must be wireframe
67  force_shaded:1, // must be smooth shaded
68  force_smooth:1, // ignore flat shading
69  refine_for_lops:1,// LOPs viewport
70  build_bone_weights:2, // bone weight arrays for (0,1,2,3) -> (0,4,8,12) bones
71  build_selection:1,// allow selection to be built
72  build_prim_selection:1, // finer control of
73  build_point_selection:1, // selections to build
74  build_vertex_selection:1,// by type; build_selection
75  build_edge_selection:1, // must be true as well
76  build_bpoint_selection:1,
77  build_ids:1; // allow prim/vert ids to be built
78 
80  OP_Node *node,
81  const GU_ConstDetailHandle &dtl,
82  const UT_IntArray &geoi,
83  const RE_MaterialAtlas &material_atlas,
85  const char *view_name,
86  int max_poly_mesh_size,
87  const GT_RefineParms &ref,
88  const GR_DisplayOption &d,
90  bool objselect,
91  GR_DecorationOverride req_dec,
92  RE_CacheVersion viewv,
93  const GR_FrustumList &view_frustums,
94  const UT_Matrix4DArray *insts,
95  int inst_grp,
96  RE_CacheVersion instv,
97  const UT_BitArray *inst_select,
98  RE_CacheVersion ints_select_version);
99 
100  GR_UpdateParms(const GR_UpdateParms &u);
101 
103  const GU_ConstDetailHandle &dtl);
104 
106  const RE_MaterialAtlas &atlas);
107  ~GR_UpdateParms();
108 
110  { return myNeededAttribs; }
112  {
113  UT_ASSERT(myAttribsCopied);
114  return myAttribsCopied ? myNeededAttribs : nullptr;
115  }
116  void copyNeededAttribs(bool only_if_shallow_ref);
117 
118  // NOTE: The attrib name must exist for the lifetime of the GR_UpdateParms
119  // object. This only keeps a reference to the string data.
120  void addNeededAttrib(const UT_StringRef &attrib);
121  void removeNeededAttrib(const UT_StringRef &attrib);
122  void clearNeededAttribs();
123 
124  void printNeededAttribs(std::ostream *os = nullptr) const;
125 private:
126  bool myAttribsCopied;
127  UT_Map<UT_StringRef,int> *myNeededAttribs;// Pointer to an attrib map needed for all shaders
128  UT_Map<UT_StringRef,int> myNeededAttribsData;// Local attrib map
129 };
130 
131 /// Set of parameters sent to GR_Primitive::viewUpdate().
133 {
134 public:
136  const GU_ConstDetailHandle &geo,
137  RE_CacheVersion geov,
138  RE_CacheVersion selv,
139  RE_CacheVersion viewv,
140  const GR_FrustumList &frustums)
141  : dopts(opt),
142  geometry(geo),
143  geo_version(geov),
144  select_version(selv),
145  view_version(viewv),
146  visible_frustums(frustums) {}
147 
148 
149  const GR_DisplayOption &dopts; // current display options
150  GU_ConstDetailHandle geometry; // detail prim is processed for
151  RE_CacheVersion geo_version; // geometry serial version
152  RE_CacheVersion select_version; // selection serial version
153  RE_CacheVersion view_version; // view frustum serial version
154  const GR_FrustumList &visible_frustums; // frustums of all open viewports
155  // stereo cams have 2/viewport
156 };
157 
158 #endif
GR_ViewUpdateParms(const GR_DisplayOption &opt, const GU_ConstDetailHandle &geo, RE_CacheVersion geov, RE_CacheVersion selv, RE_CacheVersion viewv, const GR_FrustumList &frustums)
GLint ref
Definition: glcorearb.h:124
const GR_FrustumList & visible_frustums
GR_DecorationOverride
Definition: GR_Defines.h:203
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
A class that manages material assignments to different groups of primitives.
GR_UpdateReason reason
set of parameters sent to GR_Primitive::update()
GR_RenderVersion gl_version
const GR_DisplayOption & dopts
const GLint * attribs
Definition: glew.h:14698
RE_CacheVersion geo_version
const char * view_name
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:295
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:153
const UT_IntArray * instance_levels
const GR_MaterialGroups * extra_mat_groups
RE_CacheVersion inst_select_version
GU_SelectionHandle sel_override
const UT_Matrix4DArray * instances