Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/intern/draw_cache_extract.h')
-rw-r--r--source/blender/draw/intern/draw_cache_extract.h156
1 files changed, 78 insertions, 78 deletions
diff --git a/source/blender/draw/intern/draw_cache_extract.h b/source/blender/draw/intern/draw_cache_extract.h
index 0d730058ba4..855fef952d8 100644
--- a/source/blender/draw/intern/draw_cache_extract.h
+++ b/source/blender/draw/intern/draw_cache_extract.h
@@ -154,6 +154,81 @@ typedef struct MeshBufferList {
} ibo;
} MeshBufferList;
+typedef struct MeshBatchList {
+ /* Surfaces / Render */
+ GPUBatch *surface;
+ GPUBatch *surface_weights;
+ /* Edit mode */
+ GPUBatch *edit_triangles;
+ GPUBatch *edit_vertices;
+ GPUBatch *edit_edges;
+ GPUBatch *edit_vnor;
+ GPUBatch *edit_lnor;
+ GPUBatch *edit_fdots;
+ GPUBatch *edit_mesh_analysis;
+ GPUBatch *edit_skin_roots;
+ /* Edit UVs */
+ GPUBatch *edituv_faces_stretch_area;
+ GPUBatch *edituv_faces_stretch_angle;
+ GPUBatch *edituv_faces;
+ GPUBatch *edituv_edges;
+ GPUBatch *edituv_verts;
+ GPUBatch *edituv_fdots;
+ /* Edit selection */
+ GPUBatch *edit_selection_verts;
+ GPUBatch *edit_selection_edges;
+ GPUBatch *edit_selection_faces;
+ GPUBatch *edit_selection_fdots;
+ /* Common display / Other */
+ GPUBatch *all_verts;
+ GPUBatch *all_edges;
+ GPUBatch *loose_edges;
+ GPUBatch *edge_detection;
+ GPUBatch *wire_edges; /* Individual edges with face normals. */
+ GPUBatch *wire_loops; /* Loops around faces. no edges between selected faces */
+ GPUBatch *wire_loops_uvs; /* Same as wire_loops but only has uvs. */
+ GPUBatch *sculpt_overlays;
+} MeshBatchList;
+
+#define MBC_BATCH_LEN (sizeof(MeshBatchList) / sizeof(void *))
+#define MBC_VBO_LEN (sizeof(((MeshBufferList){0}).vbo) / sizeof(void *))
+#define MBC_IBO_LEN (sizeof(((MeshBufferList){0}).ibo) / sizeof(void *))
+
+#define MBC_BATCH_INDEX(batch) (offsetof(MeshBatchList, batch) / sizeof(void *))
+
+typedef 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)),
+} DRWBatchFlag;
+
+BLI_STATIC_ASSERT(MBC_BATCH_LEN < 32, "Number of batches exceeded the limit of bit fields");
+
/**
* Data that are kept around between extractions to reduce rebuilding time.
*
@@ -189,49 +264,15 @@ typedef struct MeshBatchCache {
MeshBufferCache cage_extraction_cache;
MeshBufferCache uv_cage_extraction_cache;
- struct {
- /* Surfaces / Render */
- GPUBatch *surface;
- GPUBatch *surface_weights;
- /* Edit mode */
- GPUBatch *edit_triangles;
- GPUBatch *edit_vertices;
- GPUBatch *edit_edges;
- GPUBatch *edit_vnor;
- GPUBatch *edit_lnor;
- GPUBatch *edit_fdots;
- GPUBatch *edit_mesh_analysis;
- GPUBatch *edit_skin_roots;
- /* Edit UVs */
- GPUBatch *edituv_faces_stretch_area;
- GPUBatch *edituv_faces_stretch_angle;
- GPUBatch *edituv_faces;
- GPUBatch *edituv_edges;
- GPUBatch *edituv_verts;
- GPUBatch *edituv_fdots;
- /* Edit selection */
- GPUBatch *edit_selection_verts;
- GPUBatch *edit_selection_edges;
- GPUBatch *edit_selection_faces;
- GPUBatch *edit_selection_fdots;
- /* Common display / Other */
- GPUBatch *all_verts;
- GPUBatch *all_edges;
- GPUBatch *loose_edges;
- GPUBatch *edge_detection;
- GPUBatch *wire_edges; /* Individual edges with face normals. */
- GPUBatch *wire_loops; /* Loops around faces. no edges between selected faces */
- GPUBatch *wire_loops_uvs; /* Same as wire_loops but only has uvs. */
- GPUBatch *sculpt_overlays;
- } batch;
+ MeshBatchList batch;
/* Index buffer per material. These are subranges of `ibo.tris` */
GPUIndexBuf **tris_per_mat;
GPUBatch **surface_per_mat;
- uint32_t batch_requested; /* DRWBatchFlag */
- uint32_t batch_ready; /* DRWBatchFlag */
+ DRWBatchFlag batch_requested; /* DRWBatchFlag */
+ DRWBatchFlag batch_ready; /* DRWBatchFlag */
/* settings to determine if cache is invalid */
int edge_len;
@@ -261,47 +302,6 @@ typedef struct MeshBatchCache {
bool no_loose_wire;
} MeshBatchCache;
-#define MBC_BATCH_LEN (sizeof(((MeshBatchCache){0}).batch) / sizeof(void *))
-#define MBC_VBO_LEN (sizeof(((MeshBufferList){0}).vbo) / sizeof(void *))
-#define MBC_IBO_LEN (sizeof(((MeshBufferList){0}).ibo) / sizeof(void *))
-
-#define MBC_BATCH_INDEX(batch_name) \
- ((offsetof(MeshBatchCache, batch_name) - offsetof(MeshBatchCache, batch)) / sizeof(void *))
-
-typedef enum DRWBatchFlag {
- MBC_SURFACE = (1u << MBC_BATCH_INDEX(batch.surface)),
- MBC_SURFACE_WEIGHTS = (1u << MBC_BATCH_INDEX(batch.surface_weights)),
- MBC_EDIT_TRIANGLES = (1u << MBC_BATCH_INDEX(batch.edit_triangles)),
- MBC_EDIT_VERTICES = (1u << MBC_BATCH_INDEX(batch.edit_vertices)),
- MBC_EDIT_EDGES = (1u << MBC_BATCH_INDEX(batch.edit_edges)),
- MBC_EDIT_VNOR = (1u << MBC_BATCH_INDEX(batch.edit_vnor)),
- MBC_EDIT_LNOR = (1u << MBC_BATCH_INDEX(batch.edit_lnor)),
- MBC_EDIT_FACEDOTS = (1u << MBC_BATCH_INDEX(batch.edit_fdots)),
- MBC_EDIT_MESH_ANALYSIS = (1u << MBC_BATCH_INDEX(batch.edit_mesh_analysis)),
- MBC_SKIN_ROOTS = (1u << MBC_BATCH_INDEX(batch.edit_skin_roots)),
- MBC_EDITUV_FACES_STRETCH_AREA = (1u << MBC_BATCH_INDEX(batch.edituv_faces_stretch_area)),
- MBC_EDITUV_FACES_STRETCH_ANGLE = (1u << MBC_BATCH_INDEX(batch.edituv_faces_stretch_angle)),
- MBC_EDITUV_FACES = (1u << MBC_BATCH_INDEX(batch.edituv_faces)),
- MBC_EDITUV_EDGES = (1u << MBC_BATCH_INDEX(batch.edituv_edges)),
- MBC_EDITUV_VERTS = (1u << MBC_BATCH_INDEX(batch.edituv_verts)),
- MBC_EDITUV_FACEDOTS = (1u << MBC_BATCH_INDEX(batch.edituv_fdots)),
- MBC_EDIT_SELECTION_VERTS = (1u << MBC_BATCH_INDEX(batch.edit_selection_verts)),
- MBC_EDIT_SELECTION_EDGES = (1u << MBC_BATCH_INDEX(batch.edit_selection_edges)),
- MBC_EDIT_SELECTION_FACES = (1u << MBC_BATCH_INDEX(batch.edit_selection_faces)),
- MBC_EDIT_SELECTION_FACEDOTS = (1u << MBC_BATCH_INDEX(batch.edit_selection_fdots)),
- MBC_ALL_VERTS = (1u << MBC_BATCH_INDEX(batch.all_verts)),
- MBC_ALL_EDGES = (1u << MBC_BATCH_INDEX(batch.all_edges)),
- MBC_LOOSE_EDGES = (1u << MBC_BATCH_INDEX(batch.loose_edges)),
- MBC_EDGE_DETECTION = (1u << MBC_BATCH_INDEX(batch.edge_detection)),
- MBC_WIRE_EDGES = (1u << MBC_BATCH_INDEX(batch.wire_edges)),
- MBC_WIRE_LOOPS = (1u << MBC_BATCH_INDEX(batch.wire_loops)),
- MBC_WIRE_LOOPS_UVS = (1u << MBC_BATCH_INDEX(batch.wire_loops_uvs)),
- MBC_SCULPT_OVERLAYS = (1u << MBC_BATCH_INDEX(batch.sculpt_overlays)),
-} DRWBatchFlag;
-
-BLI_STATIC_ASSERT(MBC_BATCH_INDEX(surface_per_mat) < 32,
- "Number of batches exceeded the limit of bit fields");
-
#define MBC_EDITUV \
(MBC_EDITUV_FACES_STRETCH_AREA | MBC_EDITUV_FACES_STRETCH_ANGLE | MBC_EDITUV_FACES | \
MBC_EDITUV_EDGES | MBC_EDITUV_VERTS | MBC_EDITUV_FACEDOTS | MBC_WIRE_LOOPS_UVS)