Blender V5.0
draw_cache_extract.hh File Reference
#include "BLI_array.hh"
#include "BLI_map.hh"
#include "BLI_math_matrix_types.hh"
#include "BLI_utildefines.h"
#include "DNA_view3d_enums.h"
#include "GPU_index_buffer.hh"
#include "GPU_shader.hh"
#include "GPU_vertex_buffer.hh"
#include "draw_attributes.hh"

Go to the source code of this file.

Classes

struct  blender::draw::DRW_MeshWeightState
struct  blender::draw::MeshBufferList
struct  blender::draw::MeshBatchList
struct  blender::draw::MeshExtractLooseGeom
struct  blender::draw::SortedFaceData
struct  blender::draw::MeshBufferCache
struct  blender::draw::MeshBatchCache

Namespaces

namespace  blender
namespace  blender::gpu
namespace  blender::draw

Macros

#define MBC_BATCH_LEN   (sizeof(MeshBatchList) / sizeof(void *))
#define MBC_BATCH_INDEX(batch)
#define FOREACH_MESH_BUFFER_CACHE(batch_cache, mbc)
#define MBC_EDITUV

Enumerations

enum  { blender::draw::DRW_MESH_WEIGHT_STATE_MULTIPAINT = (1 << 0) , blender::draw::DRW_MESH_WEIGHT_STATE_AUTO_NORMALIZE = (1 << 1) , blender::draw::DRW_MESH_WEIGHT_STATE_LOCK_RELATIVE = (1 << 2) }
enum class  blender::draw::VBOType : int8_t {
  blender::draw::Position , blender::draw::CornerNormal , blender::draw::EdgeFactor , blender::draw::VertexGroupWeight ,
  blender::draw::UVs , blender::draw::Tangents , blender::draw::SculptData , blender::draw::Orco ,
  blender::draw::EditData , blender::draw::EditUVData , blender::draw::EditUVStretchArea , blender::draw::EditUVStretchAngle ,
  blender::draw::MeshAnalysis , blender::draw::FaceDotPosition , blender::draw::FaceDotNormal , blender::draw::FaceDotUV ,
  blender::draw::FaceDotEditUVData , blender::draw::SkinRoots , blender::draw::IndexVert , blender::draw::IndexEdge ,
  blender::draw::IndexFace , blender::draw::IndexFaceDot , blender::draw::Attr0 , blender::draw::Attr1 ,
  blender::draw::Attr2 , blender::draw::Attr3 , blender::draw::Attr5 , blender::draw::Attr6 ,
  blender::draw::Attr7 , blender::draw::Attr8 , blender::draw::Attr9 , blender::draw::Attr10 ,
  blender::draw::Attr11 , blender::draw::Attr12 , blender::draw::Attr13 , blender::draw::Attr14 ,
  blender::draw::Attr15 , blender::draw::AttrViewer , blender::draw::VertexNormal , blender::draw::PaintOverlayFlag
}
enum class  blender::draw::IBOType : int8_t {
  blender::draw::Tris , blender::draw::Lines , blender::draw::LinesLoose , blender::draw::Points ,
  blender::draw::FaceDots , blender::draw::LinesPaintMask , blender::draw::LinesAdjacency , blender::draw::UVTris ,
  blender::draw::AllUVLines , blender::draw::UVLines , blender::draw::EditUVTris , blender::draw::EditUVLines ,
  blender::draw::EditUVPoints , blender::draw::EditUVFaceDots
}
enum  blender::draw::DRWBatchFlag : uint64_t {
  blender::draw::MBC_SURFACE = (1u << MBC_BATCH_INDEX(surface)) , blender::draw::MBC_SURFACE_WEIGHTS = (1u << MBC_BATCH_INDEX(surface_weights)) , blender::draw::MBC_EDIT_TRIANGLES = (1u << MBC_BATCH_INDEX(edit_triangles)) , blender::draw::MBC_EDIT_VERTICES = (1u << MBC_BATCH_INDEX(edit_vertices)) ,
  blender::draw::MBC_EDIT_EDGES = (1u << MBC_BATCH_INDEX(edit_edges)) , blender::draw::MBC_EDIT_VNOR = (1u << MBC_BATCH_INDEX(edit_vnor)) , blender::draw::MBC_EDIT_LNOR = (1u << MBC_BATCH_INDEX(edit_lnor)) , blender::draw::MBC_EDIT_FACEDOTS = (1u << MBC_BATCH_INDEX(edit_fdots)) ,
  blender::draw::MBC_EDIT_MESH_ANALYSIS = (1u << MBC_BATCH_INDEX(edit_mesh_analysis)) , blender::draw::MBC_SKIN_ROOTS = (1u << MBC_BATCH_INDEX(edit_skin_roots)) , blender::draw::MBC_UV_FACES = (1u << MBC_BATCH_INDEX(uv_faces)) , blender::draw::MBC_EDITUV_FACES_STRETCH_AREA = (1u << MBC_BATCH_INDEX(edituv_faces_stretch_area)) ,
  blender::draw::MBC_EDITUV_FACES_STRETCH_ANGLE = (1u << MBC_BATCH_INDEX(edituv_faces_stretch_angle)) , blender::draw::MBC_EDITUV_FACES = (1u << MBC_BATCH_INDEX(edituv_faces)) , blender::draw::MBC_EDITUV_EDGES = (1u << MBC_BATCH_INDEX(edituv_edges)) , blender::draw::MBC_EDITUV_VERTS = (1u << MBC_BATCH_INDEX(edituv_verts)) ,
  blender::draw::MBC_EDITUV_FACEDOTS = (1u << MBC_BATCH_INDEX(edituv_fdots)) , blender::draw::MBC_EDIT_SELECTION_VERTS = (1u << MBC_BATCH_INDEX(edit_selection_verts)) , blender::draw::MBC_EDIT_SELECTION_EDGES = (1u << MBC_BATCH_INDEX(edit_selection_edges)) , blender::draw::MBC_EDIT_SELECTION_FACES = (1u << MBC_BATCH_INDEX(edit_selection_faces)) ,
  blender::draw::MBC_EDIT_SELECTION_FACEDOTS = (1u << MBC_BATCH_INDEX(edit_selection_fdots)) , blender::draw::MBC_ALL_VERTS = (1u << MBC_BATCH_INDEX(all_verts)) , blender::draw::MBC_ALL_EDGES = (1u << MBC_BATCH_INDEX(all_edges)) , blender::draw::MBC_LOOSE_EDGES = (1u << MBC_BATCH_INDEX(loose_edges)) ,
  blender::draw::MBC_EDGE_DETECTION = (1u << MBC_BATCH_INDEX(edge_detection)) , blender::draw::MBC_WIRE_EDGES = (1u << MBC_BATCH_INDEX(wire_edges)) , blender::draw::MBC_PAINT_OVERLAY_WIRE_LOOPS = (1u << MBC_BATCH_INDEX(paint_overlay_wire_loops)) , blender::draw::MBC_WIRE_LOOPS_ALL_UVS = (1u << MBC_BATCH_INDEX(wire_loops_all_uvs)) ,
  blender::draw::MBC_WIRE_LOOPS_UVS = (1u << MBC_BATCH_INDEX(wire_loops_uvs)) , blender::draw::MBC_WIRE_LOOPS_EDITUVS = (1u << MBC_BATCH_INDEX(wire_loops_edituvs)) , blender::draw::MBC_SCULPT_OVERLAYS = (1u << MBC_BATCH_INDEX(sculpt_overlays)) , blender::draw::MBC_VIEWER_ATTRIBUTE_OVERLAY = (1u << MBC_BATCH_INDEX(surface_viewer_attribute)) ,
  blender::draw::MBC_PAINT_OVERLAY_VERTS = (uint64_t(1u) << MBC_BATCH_INDEX(paint_overlay_verts)) , blender::draw::MBC_PAINT_OVERLAY_SURFACE = (uint64_t(1u) << MBC_BATCH_INDEX(paint_overlay_surface)) , blender::draw::MBC_SURFACE_PER_MAT = (uint64_t(1u) << MBC_BATCH_LEN)
}

Functions

 blender::draw::ENUM_OPERATORS (DRWBatchFlag, MBC_SURFACE_PER_MAT)
 blender::draw::BLI_STATIC_ASSERT (MBC_BATCH_LEN< 64, "Number of batches exceeded the limit of bit fields")
Extract Loop
void blender::draw::mesh_buffer_cache_create_requested (TaskGraph &task_graph, const Scene &scene, MeshBatchCache &cache, MeshBufferCache &mbc, Span< IBOType > ibo_requests, Span< VBOType > vbo_requests, Object &object, Mesh &mesh, bool is_editmode, bool is_paint_mode, bool do_final, bool do_uvedit, bool use_hide)
Subdivision Extract Loop
void blender::draw::mesh_buffer_cache_create_requested_subdiv (MeshBatchCache &cache, MeshBufferCache &mbc, Span< IBOType > ibo_requests, Span< VBOType > vbo_requests, DRWSubdivCache &subdiv_cache, MeshRenderData &mr)

Macro Definition Documentation

◆ FOREACH_MESH_BUFFER_CACHE

#define FOREACH_MESH_BUFFER_CACHE ( batch_cache,
mbc )
Value:
for (MeshBufferCache *mbc = &batch_cache.final; \
mbc == &batch_cache.final || mbc == &batch_cache.cage || mbc == &batch_cache.uv_cage; \
mbc = (mbc == &batch_cache.final) ? \
&batch_cache.cage : \
((mbc == &batch_cache.cage) ? &batch_cache.uv_cage : nullptr))

Definition at line 270 of file draw_cache_extract.hh.

Referenced by blender::draw::discard_buffers(), blender::draw::DRW_mesh_batch_cache_create_requested(), blender::draw::mesh_batch_cache_check_vertex_group(), and blender::draw::mesh_batch_cache_clear().

◆ MBC_BATCH_INDEX

#define MBC_BATCH_INDEX ( batch)
Value:
(offsetof(MeshBatchList, batch) / sizeof(void *))
#define offsetof(t, d)
struct @021025263243242147216143265077100330027142264337::@225245033123204053237120173316075113304004012000 batch

Definition at line 195 of file draw_cache_extract.hh.

◆ MBC_BATCH_LEN

#define MBC_BATCH_LEN   (sizeof(MeshBatchList) / sizeof(void *))

◆ MBC_EDITUV

#define MBC_EDITUV
Value:
(MBC_EDITUV_FACES_STRETCH_AREA | MBC_EDITUV_FACES_STRETCH_ANGLE | MBC_EDITUV_FACES | \
MBC_EDITUV_EDGES | MBC_EDITUV_VERTS | MBC_EDITUV_FACEDOTS | MBC_UV_FACES | \
MBC_WIRE_LOOPS_ALL_UVS | MBC_WIRE_LOOPS_UVS | MBC_WIRE_LOOPS_EDITUVS)

Definition at line 322 of file draw_cache_extract.hh.

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