Blender V4.3
blender::draw::pbvh Namespace Reference

Classes

class  DrawCache
 
class  DrawCacheImpl
 
class  GenericRequest
 
struct  OrigMeshData
 
struct  ViewportRequest
 

Typedefs

using AttributeRequest = std::variant<CustomRequest, GenericRequest>
 

Enumerations

enum class  CustomRequest : int8_t { Position , Normal , Mask , FaceSet }
 

Functions

DrawCacheensure_draw_data (std::unique_ptr< bke::pbvh::DrawCache > &ptr)
 
static BLI_NOINLINE void free_ibos (const MutableSpan< gpu::IndexBuf * > ibos, const IndexMask &node_mask)
 
static BLI_NOINLINE void free_vbos (const MutableSpan< gpu::VertBuf * > vbos, const IndexMask &node_mask)
 
static BLI_NOINLINE void free_batches (const MutableSpan< gpu::Batch * > batches, const IndexMask &node_mask)
 
static const GPUVertFormatposition_format ()
 
static const GPUVertFormatnormal_format ()
 
static const GPUVertFormatmask_format ()
 
static const GPUVertFormatface_set_format ()
 
static GPUVertFormat attribute_format (const OrigMeshData &orig_mesh_data, const StringRefNull name, const eCustomDataType data_type)
 
static GPUVertFormat format_for_request (const OrigMeshData &orig_mesh_data, const AttributeRequest &request)
 
static bool pbvh_attr_supported (const AttributeRequest &request)
 
short4 normal_float_to_short (const float3 &value)
 
template<typename T >
void extract_data_vert_mesh (const OffsetIndices< int > faces, const Span< int > corner_verts, const Span< T > attribute, const Span< int > face_indices, gpu::VertBuf &vbo)
 
template<typename T >
void extract_data_face_mesh (const OffsetIndices< int > faces, const Span< T > attribute, const Span< int > face_indices, gpu::VertBuf &vbo)
 
template<typename T >
void extract_data_corner_mesh (const OffsetIndices< int > faces, const Span< T > attribute, const Span< int > face_indices, gpu::VertBuf &vbo)
 
template<typename T >
const Tbmesh_cd_vert_get (const BMVert &vert, const int offset)
 
template<typename T >
const Tbmesh_cd_loop_get (const BMLoop &loop, const int offset)
 
template<typename T >
const Tbmesh_cd_face_get (const BMFace &face, const int offset)
 
template<typename T >
void extract_data_vert_bmesh (const Set< BMFace *, 0 > &faces, const int cd_offset, gpu::VertBuf &vbo)
 
template<typename T >
void extract_data_face_bmesh (const Set< BMFace *, 0 > &faces, const int cd_offset, gpu::VertBuf &vbo)
 
template<typename T >
void extract_data_corner_bmesh (const Set< BMFace *, 0 > &faces, const int cd_offset, gpu::VertBuf &vbo)
 
static const CustomDataget_cdata (const BMesh &bm, const bke::AttrDomain domain)
 
template<typename T >
T fallback_value_for_fill ()
 
template<>
ColorGeometry4f fallback_value_for_fill ()
 
template<>
ColorGeometry4b fallback_value_for_fill ()
 
static int count_visible_tris_bmesh (const Set< BMFace *, 0 > &faces)
 
static void fill_vbo_normal_mesh (const OffsetIndices< int > faces, const Span< int > corner_verts, const Span< bool > sharp_faces, const Span< float3 > vert_normals, const Span< float3 > face_normals, const Span< int > face_indices, gpu::VertBuf &vert_buf)
 
static void fill_vbo_mask_mesh (const OffsetIndices< int > faces, const Span< int > corner_verts, const Span< float > mask, const Span< int > face_indices, gpu::VertBuf &vbo)
 
static void fill_vbo_face_set_mesh (const OffsetIndices< int > faces, const Span< int > face_sets, const int color_default, const int color_seed, const Span< int > face_indices, gpu::VertBuf &vert_buf)
 
static void fill_vbo_attribute_mesh (const OffsetIndices< int > faces, const Span< int > corner_verts, const GSpan attribute, const bke::AttrDomain domain, const Span< int > face_indices, gpu::VertBuf &vert_buf)
 
static void fill_vbo_position_grids (const CCGKey &key, const Span< float3 > positions, const bool use_flat_layout, const Span< int > grids, gpu::VertBuf &vert_buf)
 
static void fill_vbo_normal_grids (const CCGKey &key, const Span< float3 > positions, const Span< float3 > normals, const Span< int > grid_to_face_map, const Span< bool > sharp_faces, const bool use_flat_layout, const Span< int > grids, gpu::VertBuf &vert_buf)
 
static void fill_vbo_mask_grids (const CCGKey &key, const Span< float > masks, const bool use_flat_layout, const Span< int > grids, gpu::VertBuf &vert_buf)
 
static void fill_vbo_face_set_grids (const CCGKey &key, const Span< int > grid_to_face_map, const Span< int > face_sets, const int color_default, const int color_seed, const bool use_flat_layout, const Span< int > grid_indices, gpu::VertBuf &vert_buf)
 
static void fill_vbos_grids (const Object &object, const OrigMeshData &orig_mesh_data, const BitSpan use_flat_layout, const IndexMask &node_mask, const AttributeRequest &request, const MutableSpan< gpu::VertBuf * > vbos)
 
static void fill_vbos_mesh (const Object &object, const OrigMeshData &orig_mesh_data, const IndexMask &node_mask, const AttributeRequest &request, const MutableSpan< gpu::VertBuf * > vbos)
 
static void fill_vbo_position_bmesh (const Set< BMFace *, 0 > &faces, gpu::VertBuf &vbo)
 
static void fill_vbo_normal_bmesh (const Set< BMFace *, 0 > &faces, gpu::VertBuf &vbo)
 
static void fill_vbo_mask_bmesh (const Set< BMFace *, 0 > &faces, const int cd_offset, gpu::VertBuf &vbo)
 
static void fill_vbo_face_set_bmesh (const Set< BMFace *, 0 > &faces, const int color_default, const int color_seed, const int offset, gpu::VertBuf &vbo)
 
static void fill_vbo_attribute_bmesh (const Set< BMFace *, 0 > &faces, const eCustomDataType data_type, const bke::AttrDomain domain, const int offset, gpu::VertBuf &vbo)
 
static void fill_vbos_bmesh (const Object &object, const OrigMeshData &orig_mesh_data, const IndexMask &node_mask, const AttributeRequest &request, const MutableSpan< gpu::VertBuf * > vbos)
 
static gpu::IndexBufcreate_index_faces (const OffsetIndices< int > faces, const Span< bool > hide_poly, const Span< int > face_indices)
 
static gpu::IndexBufcreate_index_bmesh (const Set< BMFace *, 0 > &faces, const int visible_faces_num)
 
static void create_tri_index_grids (const Span< int > grid_indices, const BitGroupVector<> &grid_hidden, const int gridsize, const int skip, const int totgrid, GPUIndexBufBuilder &elb)
 
static void create_tri_index_grids_flat_layout (const Span< int > grid_indices, const BitGroupVector<> &grid_hidden, const int gridsize, const int skip, const int totgrid, GPUIndexBufBuilder &elb)
 
static void create_lines_index_grids (const Span< int > grid_indices, int display_gridsize, const BitGroupVector<> &grid_hidden, const int gridsize, const int skip, const int totgrid, GPUIndexBufBuilder &elb_lines)
 
static void create_lines_index_grids_flat_layout (const Span< int > grid_indices, int display_gridsize, const BitGroupVector<> &grid_hidden, const int gridsize, const int skip, const int totgrid, GPUIndexBufBuilder &elb_lines)
 
static Array< intcalc_material_indices (const Object &object, const OrigMeshData &orig_mesh_data)
 
static BitVector calc_use_flat_layout (const Object &object, const OrigMeshData &orig_mesh_data)
 
static gpu::IndexBufcreate_tri_index_mesh (const OffsetIndices< int > faces, const Span< int3 > corner_tris, const Span< bool > hide_poly, const bke::pbvh::MeshNode &node)
 
static gpu::IndexBufcreate_tri_index_grids (const CCGKey &key, const BitGroupVector<> &grid_hidden, const bool do_coarse, const Span< int > grid_indices, const bool use_flat_layout)
 
static gpu::IndexBufcreate_lines_index_grids (const CCGKey &key, const BitGroupVector<> &grid_hidden, const bool do_coarse, const Span< int > grid_indices, const bool use_flat_layout)
 
static BLI_NOINLINE void ensure_vbos_allocated_mesh (const Object &object, const GPUVertFormat &format, const IndexMask &node_mask, const MutableSpan< gpu::VertBuf * > vbos)
 
static BLI_NOINLINE void ensure_vbos_allocated_grids (const Object &object, const GPUVertFormat &format, const BitSpan use_flat_layout, const IndexMask &node_mask, const MutableSpan< gpu::VertBuf * > vbos)
 
static BLI_NOINLINE void ensure_vbos_allocated_bmesh (const Object &object, const GPUVertFormat &format, const IndexMask &node_mask, const MutableSpan< gpu::VertBuf * > vbos)
 
static BLI_NOINLINE void flush_vbo_data (const Span< gpu::VertBuf * > vbos, const IndexMask &node_mask)
 

Typedef Documentation

◆ AttributeRequest

Definition at line 58 of file DRW_pbvh.hh.

Enumeration Type Documentation

◆ CustomRequest

Enumerator
Position 
Normal 
Mask 
FaceSet 

Definition at line 51 of file DRW_pbvh.hh.

Function Documentation

◆ attribute_format()

◆ bmesh_cd_face_get()

template<typename T >
const T & blender::draw::pbvh::bmesh_cd_face_get ( const BMFace & face,
const int offset )

Definition at line 454 of file draw_pbvh.cc.

References POINTER_OFFSET.

Referenced by extract_data_face_bmesh(), and fill_vbo_face_set_bmesh().

◆ bmesh_cd_loop_get()

template<typename T >
const T & blender::draw::pbvh::bmesh_cd_loop_get ( const BMLoop & loop,
const int offset )

Definition at line 449 of file draw_pbvh.cc.

References BMHeader::data, BMLoop::head, and POINTER_OFFSET.

Referenced by extract_data_corner_bmesh().

◆ bmesh_cd_vert_get()

template<typename T >
const T & blender::draw::pbvh::bmesh_cd_vert_get ( const BMVert & vert,
const int offset )

Definition at line 444 of file draw_pbvh.cc.

References BMHeader::data, BMVert::head, and POINTER_OFFSET.

Referenced by extract_data_vert_bmesh(), and fill_vbo_mask_bmesh().

◆ calc_material_indices()

◆ calc_use_flat_layout()

◆ count_visible_tris_bmesh()

static int blender::draw::pbvh::count_visible_tris_bmesh ( const Set< BMFace *, 0 > & faces)
static

Definition at line 548 of file draw_pbvh.cc.

Referenced by ensure_vbos_allocated_bmesh().

◆ create_index_bmesh()

static gpu::IndexBuf * blender::draw::pbvh::create_index_bmesh ( const Set< BMFace *, 0 > & faces,
const int visible_faces_num )
static

◆ create_index_faces()

static gpu::IndexBuf * blender::draw::pbvh::create_index_faces ( const OffsetIndices< int > faces,
const Span< bool > hide_poly,
const Span< int > face_indices )
static

◆ create_lines_index_grids() [1/2]

static gpu::IndexBuf * blender::draw::pbvh::create_lines_index_grids ( const CCGKey & key,
const BitGroupVector<> & grid_hidden,
const bool do_coarse,
const Span< int > grid_indices,
const bool use_flat_layout )
static

◆ create_lines_index_grids() [2/2]

static void blender::draw::pbvh::create_lines_index_grids ( const Span< int > grid_indices,
int display_gridsize,
const BitGroupVector<> & grid_hidden,
const int gridsize,
const int skip,
const int totgrid,
GPUIndexBufBuilder & elb_lines )
static

◆ create_lines_index_grids_flat_layout()

static void blender::draw::pbvh::create_lines_index_grids_flat_layout ( const Span< int > grid_indices,
int display_gridsize,
const BitGroupVector<> & grid_hidden,
const int gridsize,
const int skip,
const int totgrid,
GPUIndexBufBuilder & elb_lines )
static

◆ create_tri_index_grids() [1/2]

static gpu::IndexBuf * blender::draw::pbvh::create_tri_index_grids ( const CCGKey & key,
const BitGroupVector<> & grid_hidden,
const bool do_coarse,
const Span< int > grid_indices,
const bool use_flat_layout )
static

◆ create_tri_index_grids() [2/2]

static void blender::draw::pbvh::create_tri_index_grids ( const Span< int > grid_indices,
const BitGroupVector<> & grid_hidden,
const int gridsize,
const int skip,
const int totgrid,
GPUIndexBufBuilder & elb )
static

◆ create_tri_index_grids_flat_layout()

static void blender::draw::pbvh::create_tri_index_grids_flat_layout ( const Span< int > grid_indices,
const BitGroupVector<> & grid_hidden,
const int gridsize,
const int skip,
const int totgrid,
GPUIndexBufBuilder & elb )
static

◆ create_tri_index_mesh()

◆ ensure_draw_data()

DrawCache & blender::draw::pbvh::ensure_draw_data ( std::unique_ptr< bke::pbvh::DrawCache > & ptr)

Definition at line 247 of file draw_pbvh.cc.

References ptr.

Referenced by blender::draw::sculpt_batches_get_ex().

◆ ensure_vbos_allocated_bmesh()

static BLI_NOINLINE void blender::draw::pbvh::ensure_vbos_allocated_bmesh ( const Object & object,
const GPUVertFormat & format,
const IndexMask & node_mask,
const MutableSpan< gpu::VertBuf * > vbos )
static

◆ ensure_vbos_allocated_grids()

static BLI_NOINLINE void blender::draw::pbvh::ensure_vbos_allocated_grids ( const Object & object,
const GPUVertFormat & format,
const BitSpan use_flat_layout,
const IndexMask & node_mask,
const MutableSpan< gpu::VertBuf * > vbos )
static

◆ ensure_vbos_allocated_mesh()

static BLI_NOINLINE void blender::draw::pbvh::ensure_vbos_allocated_mesh ( const Object & object,
const GPUVertFormat & format,
const IndexMask & node_mask,
const MutableSpan< gpu::VertBuf * > vbos )
static

◆ extract_data_corner_bmesh()

template<typename T >
void blender::draw::pbvh::extract_data_corner_bmesh ( const Set< BMFace *, 0 > & faces,
const int cd_offset,
gpu::VertBuf & vbo )

◆ extract_data_corner_mesh()

template<typename T >
void blender::draw::pbvh::extract_data_corner_mesh ( const OffsetIndices< int > faces,
const Span< T > attribute,
const Span< int > face_indices,
gpu::VertBuf & vbo )

Definition at line 427 of file draw_pbvh.cc.

References blender::gpu::VertBuf::data(), and data.

◆ extract_data_face_bmesh()

template<typename T >
void blender::draw::pbvh::extract_data_face_bmesh ( const Set< BMFace *, 0 > & faces,
const int cd_offset,
gpu::VertBuf & vbo )

◆ extract_data_face_mesh()

template<typename T >
void blender::draw::pbvh::extract_data_face_mesh ( const OffsetIndices< int > faces,
const Span< T > attribute,
const Span< int > face_indices,
gpu::VertBuf & vbo )

Definition at line 410 of file draw_pbvh.cc.

References blender::gpu::VertBuf::data(), and data.

◆ extract_data_vert_bmesh()

template<typename T >
void blender::draw::pbvh::extract_data_vert_bmesh ( const Set< BMFace *, 0 > & faces,
const int cd_offset,
gpu::VertBuf & vbo )

◆ extract_data_vert_mesh()

template<typename T >
void blender::draw::pbvh::extract_data_vert_mesh ( const OffsetIndices< int > faces,
const Span< int > corner_verts,
const Span< T > attribute,
const Span< int > face_indices,
gpu::VertBuf & vbo )

Definition at line 392 of file draw_pbvh.cc.

References blender::gpu::VertBuf::data(), data, and blender::Span< T >::slice().

Referenced by fill_vbos_mesh().

◆ face_set_format()

static const GPUVertFormat & blender::draw::pbvh::face_set_format ( )
static

Definition at line 306 of file draw_pbvh.cc.

References GPU_COMP_U8, GPU_FETCH_INT_TO_FLOAT_UNIT, and GPU_vertformat_attr_add().

Referenced by format_for_request().

◆ fallback_value_for_fill() [1/3]

template<typename T >
T blender::draw::pbvh::fallback_value_for_fill ( )

Definition at line 533 of file draw_pbvh.cc.

References T.

Referenced by fallback_value_for_fill(), and fill_vbos_grids().

◆ fallback_value_for_fill() [2/3]

template<>
ColorGeometry4f blender::draw::pbvh::fallback_value_for_fill ( )

Definition at line 538 of file draw_pbvh.cc.

◆ fallback_value_for_fill() [3/3]

template<>
ColorGeometry4b blender::draw::pbvh::fallback_value_for_fill ( )

Definition at line 543 of file draw_pbvh.cc.

References fallback_value_for_fill().

◆ fill_vbo_attribute_bmesh()

static void blender::draw::pbvh::fill_vbo_attribute_bmesh ( const Set< BMFace *, 0 > & faces,
const eCustomDataType data_type,
const bke::AttrDomain domain,
const int offset,
gpu::VertBuf & vbo )
static

◆ fill_vbo_attribute_mesh()

static void blender::draw::pbvh::fill_vbo_attribute_mesh ( const OffsetIndices< int > faces,
const Span< int > corner_verts,
const GSpan attribute,
const bke::AttrDomain domain,
const Span< int > face_indices,
gpu::VertBuf & vert_buf )
static

Definition at line 675 of file draw_pbvh.cc.

References blender::bke::attribute_math::convert_to_static_type().

Referenced by fill_vbos_mesh().

◆ fill_vbo_face_set_bmesh()

static void blender::draw::pbvh::fill_vbo_face_set_bmesh ( const Set< BMFace *, 0 > & faces,
const int color_default,
const int color_seed,
const int offset,
gpu::VertBuf & vbo )
static

◆ fill_vbo_face_set_grids()

static void blender::draw::pbvh::fill_vbo_face_set_grids ( const CCGKey & key,
const Span< int > grid_to_face_map,
const Span< int > face_sets,
const int color_default,
const int color_seed,
const bool use_flat_layout,
const Span< int > grid_indices,
gpu::VertBuf & vert_buf )
static

◆ fill_vbo_face_set_mesh()

static void blender::draw::pbvh::fill_vbo_face_set_mesh ( const OffsetIndices< int > faces,
const Span< int > face_sets,
const int color_default,
const int color_seed,
const Span< int > face_indices,
gpu::VertBuf & vert_buf )
static

Definition at line 649 of file draw_pbvh.cc.

References BKE_paint_face_set_overlay_color_get(), blender::gpu::VertBuf::data(), and data.

Referenced by fill_vbos_mesh().

◆ fill_vbo_mask_bmesh()

static void blender::draw::pbvh::fill_vbo_mask_bmesh ( const Set< BMFace *, 0 > & faces,
const int cd_offset,
gpu::VertBuf & vbo )
static

◆ fill_vbo_mask_grids()

static void blender::draw::pbvh::fill_vbo_mask_grids ( const CCGKey & key,
const Span< float > masks,
const bool use_flat_layout,
const Span< int > grids,
gpu::VertBuf & vert_buf )
static

◆ fill_vbo_mask_mesh()

static void blender::draw::pbvh::fill_vbo_mask_mesh ( const OffsetIndices< int > faces,
const Span< int > corner_verts,
const Span< float > mask,
const Span< int > face_indices,
gpu::VertBuf & vbo )
static

Definition at line 634 of file draw_pbvh.cc.

References blender::gpu::VertBuf::data(), data, and blender::Span< T >::slice().

Referenced by fill_vbos_mesh().

◆ fill_vbo_normal_bmesh()

static void blender::draw::pbvh::fill_vbo_normal_bmesh ( const Set< BMFace *, 0 > & faces,
gpu::VertBuf & vbo )
static

◆ fill_vbo_normal_grids()

static void blender::draw::pbvh::fill_vbo_normal_grids ( const CCGKey & key,
const Span< float3 > positions,
const Span< float3 > normals,
const Span< int > grid_to_face_map,
const Span< bool > sharp_faces,
const bool use_flat_layout,
const Span< int > grids,
gpu::VertBuf & vert_buf )
static

◆ fill_vbo_normal_mesh()

static void blender::draw::pbvh::fill_vbo_normal_mesh ( const OffsetIndices< int > faces,
const Span< int > corner_verts,
const Span< bool > sharp_faces,
const Span< float3 > vert_normals,
const Span< float3 > face_normals,
const Span< int > face_indices,
gpu::VertBuf & vert_buf )
static

◆ fill_vbo_position_bmesh()

static void blender::draw::pbvh::fill_vbo_position_bmesh ( const Set< BMFace *, 0 > & faces,
gpu::VertBuf & vbo )
static

◆ fill_vbo_position_grids()

static void blender::draw::pbvh::fill_vbo_position_grids ( const CCGKey & key,
const Span< float3 > positions,
const bool use_flat_layout,
const Span< int > grids,
gpu::VertBuf & vert_buf )
static

◆ fill_vbos_bmesh()

◆ fill_vbos_grids()

◆ fill_vbos_mesh()

◆ flush_vbo_data()

static BLI_NOINLINE void blender::draw::pbvh::flush_vbo_data ( const Span< gpu::VertBuf * > vbos,
const IndexMask & node_mask )
static

◆ format_for_request()

◆ free_batches()

static BLI_NOINLINE void blender::draw::pbvh::free_batches ( const MutableSpan< gpu::Batch * > batches,
const IndexMask & node_mask )
static

◆ free_ibos()

static BLI_NOINLINE void blender::draw::pbvh::free_ibos ( const MutableSpan< gpu::IndexBuf * > ibos,
const IndexMask & node_mask )
static

◆ free_vbos()

static BLI_NOINLINE void blender::draw::pbvh::free_vbos ( const MutableSpan< gpu::VertBuf * > vbos,
const IndexMask & node_mask )
static

◆ get_cdata()

static const CustomData * blender::draw::pbvh::get_cdata ( const BMesh & bm,
const bke::AttrDomain domain )
static

◆ mask_format()

static const GPUVertFormat & blender::draw::pbvh::mask_format ( )
static

Definition at line 297 of file draw_pbvh.cc.

References GPU_COMP_F32, GPU_FETCH_FLOAT, and GPU_vertformat_attr_add().

Referenced by format_for_request().

◆ normal_float_to_short()

short4 blender::draw::pbvh::normal_float_to_short ( const float3 & value)
inline

◆ normal_format()

static const GPUVertFormat & blender::draw::pbvh::normal_format ( )
static

Definition at line 288 of file draw_pbvh.cc.

References GPU_COMP_I16, GPU_FETCH_INT_TO_FLOAT_UNIT, and GPU_vertformat_attr_add().

Referenced by format_for_request().

◆ pbvh_attr_supported()

◆ position_format()

static const GPUVertFormat & blender::draw::pbvh::position_format ( )
static

Definition at line 279 of file draw_pbvh.cc.

References GPU_COMP_F32, GPU_FETCH_FLOAT, and GPU_vertformat_attr_add().

Referenced by format_for_request().