Blender V4.3
draw_instance_data.hh File Reference
#include "BLI_compiler_attrs.h"
#include "BLI_sys_types.h"
#include "GPU_batch.hh"

Go to the source code of this file.

Macros

#define MAX_INSTANCE_DATA_SIZE   64 /* Can be adjusted for more */
 
#define DRW_BUFFER_VERTS_CHUNK   128
 

Functions

void * DRW_instance_data_next (DRWInstanceData *idata)
 
DRWInstanceDataDRW_instance_data_request (DRWInstanceDataList *idatalist, uint attr_size)
 
blender::gpu::VertBufDRW_temp_buffer_request (DRWInstanceDataList *idatalist, GPUVertFormat *format, int *vert_len)
 
blender::gpu::Batch * DRW_temp_batch_instance_request (DRWInstanceDataList *idatalist, blender::gpu::VertBuf *buf, blender::gpu::Batch *instancer, blender::gpu::Batch *geom)
 
blender::gpu::Batch * DRW_temp_batch_request (DRWInstanceDataList *idatalist, blender::gpu::VertBuf *buf, GPUPrimType type)
 
void DRW_instance_buffer_finish (DRWInstanceDataList *idatalist)
 
void DRW_instance_data_list_reset (DRWInstanceDataList *idatalist)
 
void DRW_instance_data_list_free_unused (DRWInstanceDataList *idatalist)
 
void DRW_instance_data_list_resize (DRWInstanceDataList *idatalist)
 
DRWSparseUniformBufDRW_sparse_uniform_buffer_new (unsigned int item_size, unsigned int chunk_size)
 
void DRW_sparse_uniform_buffer_flush (DRWSparseUniformBuf *buffer)
 
void DRW_sparse_uniform_buffer_clear (DRWSparseUniformBuf *buffer, bool free_all)
 
void DRW_sparse_uniform_buffer_free (DRWSparseUniformBuf *buffer)
 
bool DRW_sparse_uniform_buffer_is_empty (DRWSparseUniformBuf *buffer)
 
void DRW_sparse_uniform_buffer_bind (DRWSparseUniformBuf *buffer, int chunk, int location)
 
void DRW_sparse_uniform_buffer_unbind (DRWSparseUniformBuf *buffer, int chunk)
 
void * DRW_sparse_uniform_buffer_ensure_item (DRWSparseUniformBuf *buffer, int chunk, int item)
 
GHashDRW_uniform_attrs_pool_new ()
 
void DRW_uniform_attrs_pool_flush_all (GHash *table)
 
void DRW_uniform_attrs_pool_clear_all (GHash *table)
 
DRWSparseUniformBufDRW_uniform_attrs_pool_find_ubo (GHash *table, const GPUUniformAttrList *key)
 

Macro Definition Documentation

◆ DRW_BUFFER_VERTS_CHUNK

◆ MAX_INSTANCE_DATA_SIZE

Function Documentation

◆ DRW_instance_buffer_finish()

◆ DRW_instance_data_list_free_unused()

◆ DRW_instance_data_list_reset()

void DRW_instance_data_list_reset ( DRWInstanceDataList * idatalist)

◆ DRW_instance_data_list_resize()

◆ DRW_instance_data_next()

void * DRW_instance_data_next ( DRWInstanceData * idata)

Return a pointer to the next instance data space.

Definition at line 287 of file draw_instance_data.cc.

References BLI_mempool_alloc(), and DRWInstanceData::mempool.

Referenced by DRW_drawdata_ensure().

◆ DRW_instance_data_request()

◆ DRW_sparse_uniform_buffer_bind()

void DRW_sparse_uniform_buffer_bind ( DRWSparseUniformBuf * buffer,
int chunk,
int location )

Bind the UBO for the given chunk, if present. A nullptr buffer pointer is handled as empty.

Definition at line 520 of file draw_instance_data.cc.

References drw_sparse_uniform_buffer_get_ubo(), and GPU_uniformbuf_bind().

Referenced by draw_call_resource_bind(), and draw_update_uniforms().

◆ DRW_sparse_uniform_buffer_clear()

◆ DRW_sparse_uniform_buffer_ensure_item()

void * DRW_sparse_uniform_buffer_ensure_item ( DRWSparseUniformBuf * buffer,
int chunk,
int item )

◆ DRW_sparse_uniform_buffer_flush()

◆ DRW_sparse_uniform_buffer_free()

void DRW_sparse_uniform_buffer_free ( DRWSparseUniformBuf * buffer)

Frees the buffer.

Definition at line 501 of file draw_instance_data.cc.

References DRW_sparse_uniform_buffer_clear(), and MEM_freeN().

◆ DRW_sparse_uniform_buffer_is_empty()

bool DRW_sparse_uniform_buffer_is_empty ( DRWSparseUniformBuf * buffer)

Checks if the buffer contains any allocated chunks.

Definition at line 507 of file draw_instance_data.cc.

References DRWSparseUniformBuf::num_chunks.

Referenced by DRW_uniform_attrs_pool_clear_all().

◆ DRW_sparse_uniform_buffer_new()

DRWSparseUniformBuf * DRW_sparse_uniform_buffer_new ( unsigned int item_size,
unsigned int chunk_size )

Allocate a chunked UBO with the specified item and chunk size.

Definition at line 438 of file draw_instance_data.cc.

References drw_sparse_uniform_buffer_init(), and MEM_mallocN.

◆ DRW_sparse_uniform_buffer_unbind()

void DRW_sparse_uniform_buffer_unbind ( DRWSparseUniformBuf * buffer,
int chunk )

Unbind the UBO for the given chunk, if present. A nullptr buffer pointer is handled as empty.

Definition at line 528 of file draw_instance_data.cc.

References drw_sparse_uniform_buffer_get_ubo(), and GPU_uniformbuf_unbind().

Referenced by draw_call_batching_finish(), and draw_call_resource_bind().

◆ DRW_temp_batch_instance_request()

blender::gpu::Batch * DRW_temp_batch_instance_request ( DRWInstanceDataList * idatalist,
blender::gpu::VertBuf * buf,
blender::gpu::Batch * instancer,
blender::gpu::Batch * geom )
Note
Does not return a valid drawable batch until DRW_instance_buffer_finish has run. Initialization is delayed because instancer or geom could still not be initialized.

Definition at line 126 of file draw_instance_data.cc.

References batch, DRWTempInstancingHandle::batch, BLI_assert, BLI_memblock_alloc(), GPU_BATCH_BUILDING, GPU_batch_calloc(), GPU_batch_clear(), GPU_BATCH_VBO_MAX_LEN, GPU_VERTBUF_DATA_UPLOADED, GPU_vertbuf_get_status(), instancing_batch_references_remove(), and DRWInstanceDataList::pool_instancing.

Referenced by DRW_shgroup_call_buffer_instance(), and DRW_shgroup_call_instances_with_attrs().

◆ DRW_temp_batch_request()

blender::gpu::Batch * DRW_temp_batch_request ( DRWInstanceDataList * idatalist,
blender::gpu::VertBuf * buf,
GPUPrimType type )
Note
Use only with buf allocated via DRW_temp_buffer_request.

Definition at line 167 of file draw_instance_data.cc.

References batch, BLI_memblock_alloc(), GPU_batch_calloc(), GPU_batch_clear(), GPU_batch_init, GPU_VERTBUF_DATA_UPLOADED, GPU_vertbuf_get_status(), and DRWInstanceDataList::pool_batching.

Referenced by DRW_shgroup_call_buffer().

◆ DRW_temp_buffer_request()

blender::gpu::VertBuf * DRW_temp_buffer_request ( DRWInstanceDataList * idatalist,
GPUVertFormat * format,
int * vert_len )

This manager allows to distribute existing batches for instancing attributes. This reduce the number of batches creation. Querying a batch is done with a vertex format. This format should be static so that its pointer never changes (because we are using this pointer as identifier [we don't want to check the full format that would be too slow]).

Definition at line 102 of file draw_instance_data.cc.

References BLI_assert, BLI_memblock_alloc(), DRW_BUFFER_VERTS_CHUNK, DRWTempBufferHandle::format, GPU_USAGE_DYNAMIC, GPU_vertbuf_calloc(), GPU_vertbuf_data_alloc(), GPU_VERTBUF_DISCARD_SAFE, GPU_vertbuf_init_with_format_ex(), and DRWInstanceDataList::pool_buffers.

Referenced by DRW_shgroup_call_buffer(), and DRW_shgroup_call_buffer_instance().

◆ DRW_uniform_attrs_pool_clear_all()

◆ DRW_uniform_attrs_pool_find_ubo()

DRWSparseUniformBuf * DRW_uniform_attrs_pool_find_ubo ( GHash * table,
const GPUUniformAttrList * key )

Definition at line 697 of file draw_instance_data.cc.

References BLI_ghash_lookup(), and DRWUniformAttrBuf::ubos.

Referenced by draw_update_uniforms().

◆ DRW_uniform_attrs_pool_flush_all()

void DRW_uniform_attrs_pool_flush_all ( GHash * table)

◆ DRW_uniform_attrs_pool_new()

GHash * DRW_uniform_attrs_pool_new ( )

Definition at line 703 of file draw_instance_data.cc.

References GPU_uniform_attr_list_hash_new().

Referenced by DRW_viewport_data_create().