139 struct rv_DrawSetInfo;
140 struct rv_DrawInputInfo;
142 struct rv_Connectivity;
143 struct rv_InstanceGroup;
179 bool setNumPoints(
exint num_points);
181 exint getNumPoints()
const;
185 void setVertexBufferSize(
exint vert_buffer_elements);
187 exint getVertexBufferSize()
const;
191 void setPrimitiveBufferSize(
exint prim_buffer_elements);
193 exint getPrimitiveBufferSize()
const;
204 bool allow_gpu_write =
false);
215 bool allow_gpu_write =
false);
263 int& out_vec_size)
const;
268 exint& out_len)
const;
284 int instance_group = -1)
const;
291 bool createInstanceGroup(
int group_index);
293 void removeInstanceGroup(
int group_index);
295 bool hasInstanceGroup(
int group_index)
const;
297 int getMaxInstanceGroup()
const;
300 void setInstanceGroupCount(
int instance_group,
int count);
302 int getInstanceGroupCount(
int instance_group)
const;
304 int getInstanceGroupTransformCount(
int instance_group)
const;
307 void setInstanceGroupForceFullDraw(
int instance_group,
bool enable);
309 bool getInstanceGroupForceFullDraw(
int instance_group)
const;
312 void setInstanceGroupIndexList(
int group_index,
314 int max_capacity = -1);
316 void setInstanceGroupConstIndex(
int instance_group,
317 int instance_to_draw);
319 void setInstanceGroupDrawEverything(
int instance_group);
321 void setInstanceGroupDrawNothing(
int instance_group);
327 void setConstInstanceGroupTransform(
int instance_group,
329 bool remove_instanced_xform);
332 void copyConstInstanceGroupTransform(
int instance_group,
int src_group);
337 bool setInstanceGroupAttrib(
int instance_group,
347 bool createSharedInstanceGroupAttrib(
int instance_group,
357 bool assignSharedInstanceGroupAttrib(
int instance_group,
362 bool freeInstanceGroupAttrib(
int instance_group,
372 const char* name =
nullptr);
380 bool cpu_mapped =
true,
381 const char* name =
nullptr);
384 RV_Buffer * getInstanceGroupAttrib(
int instance_group,
389 bool getInstanceAttribLength(
int instance_group,
391 exint& out_len)
const;
394 bool getInstanceAttribVersion(
int instance_group,
398 void setInstanceAttribVersion(
int instance_group,
406 void connectAllPrims(
int connect_index,
410 void connectSomePrims(
int connect_index,
419 void connectIndexedPrims(
int connect_index,
422 bool need_prim_info =
false,
425 void connectSomeVerts(
int connect_index,
432 void connectIndexedVerts(
int connect_index,
435 bool need_prim_info =
false,
441 void setConnectDivisor(
int connect_index,
int divisor,
446 void setConnectUsePrimInfo(
int connect_index,
int base_prim= 0);
453 int getNumRenderPrims(
int connect_index)
const;
456 RV_PrimType getRenderPrimType(
int connect_index)
const;
459 RV_Buffer *getIndexBuffer(
int connect_index)
const;
461 RV_Buffer *getPrimBuffer(
int connect_index)
const;
463 RV_Buffer *getPrimVertexBuffer(
int connect_index)
const;
466 bool hasConnectGroup(
int connect_index)
const;
468 bool hasNonEmptyConnectGroup(
int connect_index)
const;
470 int getMaxConnectGroup()
const;
473 bool removeConnectedPrims(
int connect_index);
475 void resetConnectedPrims();
490 void prepareForDrawInstance(
RV_Render* r,
500 bool force_point_prims =
false);
512 void drawInstanceGroup(
517 bool force_point_prims =
false);
522 void drawInstanceGroup(
532 int connect_index_start,
533 int num_connect_indexs,
535 bool force_point_prims =
false);
538 void drawInstanceGroupRange(
544 bool force_point_prims =
false);
566 static void cleanupResources();
581 rv_Connectivity* getConnect(
int group_idx,
bool do_create);
586 const char *base_name,
591 const rv_Attribute* findAttribute(
const UT_StringRef& name,
594 int* out_idx =
nullptr)
const;
603 bool attr_owned =
false,
604 bool allow_gpu_write =
false);
605 bool privFreeAttrib(
RV_Render* r, rv_Attribute &attr);
613 bool allocateConnectBuffers(
RV_Render* r, rv_Connectivity&
c,
615 bool allocateInstIndexBuffer(
RV_Render* r, rv_InstanceGroup&
g,
626 bool privPrepareDraw(
628 const rv_Connectivity *connect,
629 int instance_group_idx,
635 const rv_Connectivity *connect,
636 int instance_group_idx,
639 bool force_point_prims
644 const rv_Connectivity *connect,
645 int instance_group_idx,
648 bool force_point_prims,
655 const rv_Connectivity *connect,
656 int instance_group_idx,
668 uint32_t myNumPoints = 0;
669 uint32_t myVertBufferSize = 0;
670 uint32_t myPrimBufferSize = 0;
672 bool myAttributesValid =
false;
695 struct rv_DrawSetInfo
699 int myConnectGroupIdx;
700 int myInstanceGroupIdx;
702 bool myIsValid =
false;
710 int myInstTransformUniformIdx = -1;
711 int myInstNestLevelUniformIdx = -1;
729 rv_DrawSetInfo* getDrawSet(
732 const rv_Connectivity *connect,
733 int instance_group_idx,
740 rv_DrawSetInfo& set_info,
741 const rv_Connectivity *connect,
742 int instance_group_idx,
746 bool bindInputAttribute(
749 const rv_Connectivity *connect,
750 const rv_Attribute *attrib,
759 void populateFallbackAttribs(
RV_Render* r);
761 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)
UT_UniquePtr< RV_VKBuffer > RV_VKBufferPtr
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
GLint GLenum GLboolean normalized
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)
constexpr T normalize(UT_FixedVector< T, D > &a) noexcept