138 struct rv_DrawSetInfo;
139 struct rv_DrawInputInfo;
141 struct rv_Connectivity;
142 struct rv_InstanceGroup;
178 void setNumPoints(
exint num_points);
180 exint getNumPoints()
const;
184 void setPrimitiveBufferSize(
exint prim_buffer_element_size);
186 exint getPrimitiveBufferSize()
const;
201 exint capacity = -1,
bool allow_gpu_write =
false);
223 exint capacity = -1);
251 int& out_vec_size)
const;
256 exint& out_len)
const;
272 int instance_group = -1)
const;
279 bool createInstanceGroup(
int group_index);
281 void removeInstanceGroup(
int group_index);
283 bool hasInstanceGroup(
int group_index)
const;
285 int getMaxInstanceGroup()
const;
288 void setInstanceGroupCount(
int instance_group,
int count);
290 int getInstanceGroupCount(
int instance_group)
const;
293 void setInstanceGroupIndexList(
int group_index,
295 int max_capacity = -1);
297 void setInstanceGroupConstIndex(
int instance_group,
298 int instance_to_draw);
300 void setInstanceGroupDrawEverything(
int instance_group);
302 void setInstanceGroupDrawNothing(
int instance_group);
308 void setConstInstanceGroupTransform(
int instance_group,
310 bool remove_instanced_xform);
315 bool setInstanceGroupAttrib(
int instance_group,
321 exint capacity = -1);
324 bool createSharedInstanceGroupAttrib(
int instance_group,
330 exint capacity = -1);
333 bool assignSharedInstanceGroupAttrib(
int instance_group,
338 bool freeInstanceGroupAttrib(
int instance_group,
347 const char* name =
nullptr);
350 RV_Buffer * getInstanceGroupAttrib(
int instance_group,
353 bool getInstanceAttribVersion(
int instance_group,
357 void setInstanceAttribVersion(
int instance_group,
365 void connectAllPrims(
int connect_index,
369 void connectSomePrims(
int connect_index,
378 void connectIndexedPrims(
int connect_index,
381 bool need_prim_info =
false,
386 void setConnectDivisor(
int connect_index,
int divisor,
391 void setConnectUsePrimInfo(
int connect_index,
int base_prim= 0);
398 int getNumRenderPrims(
int connect_index)
const;
401 RV_PrimType getRenderPrimType(
int connect_index)
const;
404 RV_Buffer *getIndexBuffer(
int connect_index)
const;
406 RV_Buffer *getPrimBuffer(
int connect_index)
const;
408 RV_Buffer *getPrimVertexBuffer(
int connect_index)
const;
411 bool hasConnectGroup(
int connect_index)
const;
413 bool hasNonEmptyConnectGroup(
int connect_index)
const;
415 int getMaxConnectGroup()
const;
418 bool removeConnectedPrims(
int connect_index);
420 void resetConnectedPrims();
435 void prepareForDrawInstance(
RV_Render* r,
445 bool force_point_prims =
false);
449 void drawInstanceGroup(
454 bool force_point_prims =
false);
459 int connect_index_start,
460 int num_connect_indexs,
462 bool force_point_prims =
false);
465 void drawInstanceGroupRange(
471 bool force_point_prims =
false);
493 static void cleanupResources();
508 rv_Connectivity* getConnect(
int group_idx,
bool do_create);
513 const char *base_name,
518 const rv_Attribute* findAttribute(
const UT_StringRef& name,
521 int* out_idx =
nullptr)
const;
529 bool attr_owned =
false,
530 bool allow_gpu_write =
false);
531 bool privFreeAttrib(
RV_Render* r, rv_Attribute &attr);
539 bool allocateConnectBuffers(
RV_Render* r, rv_Connectivity& c,
541 bool allocateInstIndexBuffer(
RV_Render* r, rv_InstanceGroup&
g,
552 bool privPrepareDraw(
554 const rv_Connectivity *connect,
555 int instance_group_idx,
561 const rv_Connectivity *connect,
562 int instance_group_idx,
565 bool force_point_prims
570 const rv_Connectivity *connect,
571 int instance_group_idx,
583 uint32_t myNumPoints = 0;
584 uint32_t myPrimBufferSize = 0;
586 bool myAttributesValid =
false;
610 struct rv_DrawSetInfo
614 int myConnectGroupIdx;
615 int myInstanceGroupIdx;
617 bool myIsValid =
false;
625 int myInstTransformUniformIdx = -1;
626 int myInstNestLevelUniformIdx = -1;
644 rv_DrawSetInfo* getDrawSet(
647 const rv_Connectivity *connect,
648 int instance_group_idx,
655 rv_DrawSetInfo& set_info,
656 const rv_Connectivity *connect,
657 int instance_group_idx,
661 bool bindInputAttribute(
664 const rv_Attribute *attrib,
673 void populateFallbackAttribs(
RV_Render* r);
675 rv_Attribute* getFallbackVertAttrib(
RV_GPUType type);
A collection of Vulkan UBO, SSBO, and Image shader bindings (descriptor set)
GLsizei GLenum const void * indices
VkFlags VkBufferUsageFlags
VkPrimitiveTopology RVgetVkPrimType(RV_PrimType t)
Object that represents drawable geometry. This object holds vertex, instancing and index buffers for ...
GLuint GLsizei GLsizei * length
RV_GPUType RVconvertFromGPUType(UT_GPUType t)
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
#define UT_ASSERT_MSG(ZZ,...)
GLint GLenum GLboolean GLsizei stride
GLuint const GLchar * name
Handle to the main interface of Vulkan.
UT_GPUType RVconvertToUTGPUType(RV_GPUType t)
GLsizeiptr const void GLenum usage
UT_UniquePtr< rv_InstanceGroup > rv_InstanceGroupPtr
GR_API RE_GPUType getAttributeType(RE_Render *r, const char *attrib_name, int &vsize, const GT_DataArrayHandle &pa, const GR_DisplayOption &opts, RE_ArrayType array_type)
Simple class for a mutli-integer cache tag.
UT_UniquePtr< RV_Buffer > RV_BufferPtr
FMT_INLINE void print(format_string< T...> fmt, T &&...args)