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 #include "GR_Material.h"
21 #include "GR_OSDSubdData.h"
22 
23 #include <GU/GU_SelectType.h>
24 #include <GT/GT_RefineParms.h>
25 #include <GU/GU_DetailHandle.h>
26 #include <RE/RE_CachedObject.h>
27 
28 #include <UT/UT_Matrix4.h>
29 #include <UT/UT_StringHolder.h>
30 #include <UT/UT_Map.h>
31 
32 class OP_Node;
33 class UT_BitArray;
34 class GR_MaterialGroups;
35 
36 /// set of parameters sent to GR_Primitive::update()
38 {
39 public:
40  GR_UpdateReason reason; // reason(s) for update
41  OP_Node *op_node; // node detail belongs to
42  GU_ConstDetailHandle geometry; // detail prim is processed for
43  const UT_IntArray &geo_indices; // DOP geometry indices selection
44  const GT_RefineParms &refine_parms; // GT refinement parms
45  const GR_DisplayOption &dopts; // current display options
46  const GR_MaterialAtlas &vk_mat_atlas; // Vulkan material list
47  const char *view_name; // full pathname of the viewer
48  int poly_mesh_limit; // max #polys in poly mesh
49  GU_SelectionHandle sel_override; // override selection
50  int vk_default_mat_id; // Default vulkan material
51 
52  GR_RenderVersion gl_version; // GL Renderer version (GL1,2,3,VK)
53  RE_CacheVersion geo_version; // geometry serial version
54  RE_CacheVersion select_version; // selection serial version
55  RE_CacheVersion instance_version; // instanced geo serial verison
56  RE_CacheVersion view_version; // view frustum serial version
57  RE_CacheVersion inst_select_version; // Instance selection version
58  int instance_group; // Instancing group
59  const UT_Matrix4DArray *instances; // per-point instance transforms
60  // May be NULL if no instancing
61  const UT_IntArray *instance_levels; // Nested instancing level counts
62  const UT_BitArray *inst_select; // instance selection
63  const GR_MaterialGroups*extra_mat_groups; // materials from instances
64  const GR_FrustumList &visible_frustums; // frustums for visible viewports
65  bool object_selected; // true if selected at object lvl
66  GR_DecorationOverride required_dec; // decor required above user
67  // dispopt setting
68  unsigned force_wire:1, // must be wireframe
69  force_shaded:1, // must be smooth shaded
70  force_smooth:1, // ignore flat shading
71  force_unlit:1, // unlit geometry
72  refine_for_lops:1,// LOPs viewport
73  build_selection:1,// allow selection to be built
74  build_prim_selection:1, // finer control of
75  build_point_selection:1, // selections to build
76  build_vertex_selection:1,// by type; build_selection
77  build_edge_selection:1, // must be true as well
78  build_bpoint_selection:1,
79  build_ids:1; // allow prim/vert ids to be built
80 
82 
84  OP_Node *node,
85  const GU_ConstDetailHandle &dtl,
86  const UT_IntArray &geoi,
87  const GR_MaterialAtlas &vk_material_atlas,
88  UT_Map<UT_StringRef,int> *attribs,
89  const char *view_name,
90  int max_poly_mesh_size,
91  const GT_RefineParms &ref,
92  const GR_DisplayOption &d,
94  bool objselect,
95  GR_DecorationOverride req_dec,
96  RE_CacheVersion viewv,
97  const GR_FrustumList &view_frustums,
98  const UT_Matrix4DArray *insts,
99  int inst_grp,
100  RE_CacheVersion instv,
101  const UT_BitArray *inst_select,
102  RE_CacheVersion ints_select_version);
103 
104  GR_UpdateParms(const GR_UpdateParms &u);
105 
107  const GU_ConstDetailHandle &dtl);
108 
110  const GR_MaterialAtlas &atlas);
111 
112  ~GR_UpdateParms();
113 
115  { return myNeededAttribs; }
117  {
118  UT_ASSERT(myAttribsCopied);
119  return myAttribsCopied ? myNeededAttribs : nullptr;
120  }
121  void copyNeededAttribs(bool only_if_shallow_ref);
122 
123  // NOTE: The attrib name must exist for the lifetime of the GR_UpdateParms
124  // object. This only keeps a reference to the string data.
125  void addNeededAttrib(const UT_StringRef &attrib);
126  void removeNeededAttrib(const UT_StringRef &attrib);
127  void clearNeededAttribs();
128 
129  void printNeededAttribs(std::ostream *os = nullptr) const;
130 private:
131  bool myAttribsCopied;
132  UT_Map<UT_StringRef,int> *myNeededAttribs;// Pointer to an attrib map needed for all shaders
133  UT_Map<UT_StringRef,int> myNeededAttribsData;// Local attrib map
134 };
135 
136 /// Set of parameters sent to GR_Primitive::viewUpdate().
138 {
139 public:
141  const GU_ConstDetailHandle &geo,
142  RE_CacheVersion geov,
143  RE_CacheVersion selv,
144  RE_CacheVersion viewv,
145  const GR_FrustumList &frustums)
146  : dopts(opt),
147  geometry(geo),
148  geo_version(geov),
149  select_version(selv),
150  view_version(viewv),
151  visible_frustums(frustums) {}
152 
153 
154  const GR_DisplayOption &dopts; // current display options
155  GU_ConstDetailHandle geometry; // detail prim is processed for
156  RE_CacheVersion geo_version; // geometry serial version
157  RE_CacheVersion select_version; // selection serial version
158  RE_CacheVersion view_version; // view frustum serial version
159  const GR_FrustumList &visible_frustums; // frustums of all open viewports
160  // stereo cams have 2/viewport
161 };
162 
163 #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:224
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 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
const GR_MaterialAtlas & vk_mat_atlas
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:124
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:317
RE_CacheVersion view_version
GR_RenderVersion
Definition: GR_Defines.h:22
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:165
const UT_IntArray * instance_levels
const GR_MaterialGroups * extra_mat_groups
RE_CacheVersion inst_select_version
GU_SelectionHandle sel_override
const GR_OSDSubdData * full_mesh_sdub_data
const UT_Matrix4DArray * instances