Blender  V3.3
Classes | Namespaces | Macros | Enumerations | Functions
draw_cache_extract.hh File Reference
#include <algorithm>
#include "BLI_utildefines.h"
#include "DNA_customdata_types.h"
#include "DNA_mesh_types.h"
#include "DNA_view3d_enums.h"
#include "BKE_attribute.h"
#include "BKE_object.h"
#include "GPU_batch.h"
#include "GPU_index_buffer.h"
#include "GPU_vertex_buffer.h"
#include "draw_attributes.h"

Go to the source code of this file.

Classes

struct  DRW_MeshWeightState
 
struct  DRW_MeshCDMask
 
struct  MeshBufferList
 
struct  MeshBatchList
 
struct  MeshExtractLooseGeom
 
struct  MeshBufferCache
 
struct  MeshBatchCache
 

Namespaces

 blender
 
 blender::draw
 

Macros

#define MBC_BATCH_LEN   (sizeof(MeshBatchList) / sizeof(void *))
 
#define MBC_VBO_LEN   (sizeof(MeshBufferList::vbo) / sizeof(void *))
 
#define MBC_IBO_LEN   (sizeof(MeshBufferList::ibo) / sizeof(void *))
 
#define MBC_BATCH_INDEX(batch)   (offsetof(MeshBatchList, batch) / sizeof(void *))
 
#define FOREACH_MESH_BUFFER_CACHE(batch_cache, mbc)
 
#define MBC_EDITUV
 

Enumerations

enum  { DRW_MESH_WEIGHT_STATE_MULTIPAINT = (1 << 0) , DRW_MESH_WEIGHT_STATE_AUTO_NORMALIZE = (1 << 1) , DRW_MESH_WEIGHT_STATE_LOCK_RELATIVE = (1 << 2) }
 
enum  eMRDataType {
  MR_DATA_NONE = 0 , MR_DATA_POLY_NOR = 1 << 1 , MR_DATA_LOOP_NOR = 1 << 2 , MR_DATA_LOOPTRI = 1 << 3 ,
  MR_DATA_LOOSE_GEOM = 1 << 4 , MR_DATA_TAN_LOOP_NOR = 1 << 5 , MR_DATA_POLYS_SORTED = 1 << 6
}
 
enum  DRWBatchFlag {
  MBC_SURFACE = (1u << MBC_BATCH_INDEX(surface)) , MBC_SURFACE_WEIGHTS = (1u << MBC_BATCH_INDEX(surface_weights)) , MBC_EDIT_TRIANGLES = (1u << MBC_BATCH_INDEX(edit_triangles)) , MBC_EDIT_VERTICES = (1u << MBC_BATCH_INDEX(edit_vertices)) ,
  MBC_EDIT_EDGES = (1u << MBC_BATCH_INDEX(edit_edges)) , MBC_EDIT_VNOR = (1u << MBC_BATCH_INDEX(edit_vnor)) , MBC_EDIT_LNOR = (1u << MBC_BATCH_INDEX(edit_lnor)) , MBC_EDIT_FACEDOTS = (1u << MBC_BATCH_INDEX(edit_fdots)) ,
  MBC_EDIT_MESH_ANALYSIS = (1u << MBC_BATCH_INDEX(edit_mesh_analysis)) , MBC_SKIN_ROOTS = (1u << MBC_BATCH_INDEX(edit_skin_roots)) , MBC_EDITUV_FACES_STRETCH_AREA = (1u << MBC_BATCH_INDEX(edituv_faces_stretch_area)) , MBC_EDITUV_FACES_STRETCH_ANGLE = (1u << MBC_BATCH_INDEX(edituv_faces_stretch_angle)) ,
  MBC_EDITUV_FACES = (1u << MBC_BATCH_INDEX(edituv_faces)) , MBC_EDITUV_EDGES = (1u << MBC_BATCH_INDEX(edituv_edges)) , MBC_EDITUV_VERTS = (1u << MBC_BATCH_INDEX(edituv_verts)) , MBC_EDITUV_FACEDOTS = (1u << MBC_BATCH_INDEX(edituv_fdots)) ,
  MBC_EDIT_SELECTION_VERTS = (1u << MBC_BATCH_INDEX(edit_selection_verts)) , MBC_EDIT_SELECTION_EDGES = (1u << MBC_BATCH_INDEX(edit_selection_edges)) , MBC_EDIT_SELECTION_FACES = (1u << MBC_BATCH_INDEX(edit_selection_faces)) , MBC_EDIT_SELECTION_FACEDOTS = (1u << MBC_BATCH_INDEX(edit_selection_fdots)) ,
  MBC_ALL_VERTS = (1u << MBC_BATCH_INDEX(all_verts)) , MBC_ALL_EDGES = (1u << MBC_BATCH_INDEX(all_edges)) , MBC_LOOSE_EDGES = (1u << MBC_BATCH_INDEX(loose_edges)) , MBC_EDGE_DETECTION = (1u << MBC_BATCH_INDEX(edge_detection)) ,
  MBC_WIRE_EDGES = (1u << MBC_BATCH_INDEX(wire_edges)) , MBC_WIRE_LOOPS = (1u << MBC_BATCH_INDEX(wire_loops)) , MBC_WIRE_LOOPS_UVS = (1u << MBC_BATCH_INDEX(wire_loops_uvs)) , MBC_SCULPT_OVERLAYS = (1u << MBC_BATCH_INDEX(sculpt_overlays)) ,
  MBC_SURFACE_PER_MAT = (1u << MBC_BATCH_LEN)
}
 

Functions

 BLI_STATIC_ASSERT (sizeof(DRW_MeshCDMask)<=sizeof(uint32_t), "DRW_MeshCDMask exceeds 32 bits") enum eMRIterType
 
BLI_INLINE int mesh_render_mat_len_get (const Object *object, const Mesh *me)
 
 ENUM_OPERATORS (DRWBatchFlag, MBC_SURFACE_PER_MAT)
 
 BLI_STATIC_ASSERT (MBC_BATCH_LEN< 32, "Number of batches exceeded the limit of bit fields")
 
Extract Loop
void blender::draw::mesh_buffer_cache_create_requested (TaskGraph *task_graph, MeshBatchCache *cache, MeshBufferCache *mbc, Object *object, Mesh *me, bool is_editmode, bool is_paint_mode, bool is_mode_active, const float obmat[4][4], bool do_final, bool do_uvedit, const Scene *scene, const ToolSettings *ts, bool use_hide)
 
Subdivision Extract Loop
void blender::draw::mesh_buffer_cache_create_requested_subdiv (MeshBatchCache *cache, MeshBufferCache *mbc, 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 : NULL))

Definition at line 261 of file draw_cache_extract.hh.

◆ MBC_BATCH_INDEX

#define MBC_BATCH_INDEX (   batch)    (offsetof(MeshBatchList, batch) / sizeof(void *))

Definition at line 200 of file draw_cache_extract.hh.

◆ MBC_BATCH_LEN

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

Definition at line 196 of file draw_cache_extract.hh.

◆ MBC_EDITUV

#define MBC_EDITUV
Value:

Definition at line 317 of file draw_cache_extract.hh.

◆ MBC_IBO_LEN

#define MBC_IBO_LEN   (sizeof(MeshBufferList::ibo) / sizeof(void *))

Definition at line 198 of file draw_cache_extract.hh.

◆ MBC_VBO_LEN

#define MBC_VBO_LEN   (sizeof(MeshBufferList::vbo) / sizeof(void *))

Definition at line 197 of file draw_cache_extract.hh.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
DRW_MESH_WEIGHT_STATE_MULTIPAINT 
DRW_MESH_WEIGHT_STATE_AUTO_NORMALIZE 
DRW_MESH_WEIGHT_STATE_LOCK_RELATIVE 

Definition at line 49 of file draw_cache_extract.hh.

◆ DRWBatchFlag

Enumerator
MBC_SURFACE 
MBC_SURFACE_WEIGHTS 
MBC_EDIT_TRIANGLES 
MBC_EDIT_VERTICES 
MBC_EDIT_EDGES 
MBC_EDIT_VNOR 
MBC_EDIT_LNOR 
MBC_EDIT_FACEDOTS 
MBC_EDIT_MESH_ANALYSIS 
MBC_SKIN_ROOTS 
MBC_EDITUV_FACES_STRETCH_AREA 
MBC_EDITUV_FACES_STRETCH_ANGLE 
MBC_EDITUV_FACES 
MBC_EDITUV_EDGES 
MBC_EDITUV_VERTS 
MBC_EDITUV_FACEDOTS 
MBC_EDIT_SELECTION_VERTS 
MBC_EDIT_SELECTION_EDGES 
MBC_EDIT_SELECTION_FACES 
MBC_EDIT_SELECTION_FACEDOTS 
MBC_ALL_VERTS 
MBC_ALL_EDGES 
MBC_LOOSE_EDGES 
MBC_EDGE_DETECTION 
MBC_WIRE_EDGES 
MBC_WIRE_LOOPS 
MBC_WIRE_LOOPS_UVS 
MBC_SCULPT_OVERLAYS 
MBC_SURFACE_PER_MAT 

Definition at line 202 of file draw_cache_extract.hh.

◆ eMRDataType

Enumerator
MR_DATA_NONE 
MR_DATA_POLY_NOR 
MR_DATA_LOOP_NOR 
MR_DATA_LOOPTRI 
MR_DATA_LOOSE_GEOM 
MR_DATA_TAN_LOOP_NOR 

Force loop normals calculation.

MR_DATA_POLYS_SORTED 

Definition at line 79 of file draw_cache_extract.hh.

Function Documentation

◆ BLI_STATIC_ASSERT() [1/2]

BLI_STATIC_ASSERT ( )

IMPORTANT: Do not allocate manually as the real struct is bigger (i.e: GLBatch). This is only the common and "public" part of the struct. Use the provided allocator. TODO(fclem): Make the content of this struct hidden and expose getters/setters.

verts[0] is required, others can be NULL

Instance attributes.

NULL if element list not needed

Bookkeeping.

Type of geometry to draw.

Current assigned shader. DEPRECATED. Here only for uniform binding.

Definition at line 519 of file eevee_private.h.

References count, GPU_BATCH_INST_VBO_MAX_LEN, GPU_BATCH_VBO_MAX_LEN, GPUBatch, update(), and verts.

◆ BLI_STATIC_ASSERT() [2/2]

BLI_STATIC_ASSERT ( sizeof(DRW_MeshCDMask)<=sizeof(uint32_t ,
"DRW_MeshCDMask exceeds 32 bits"   
)

Definition at line 69 of file draw_cache_extract.hh.

◆ ENUM_OPERATORS()

ENUM_OPERATORS ( DRWBatchFlag  ,
MBC_SURFACE_PER_MAT   
)

◆ mesh_render_mat_len_get()

BLI_INLINE int mesh_render_mat_len_get ( const Object object,
const Mesh me 
)