Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/draw_cache_impl_mesh.cc
| Show First 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
| static constexpr DRWBatchFlag batches_that_use_buffer(const int buffer_index) | static constexpr DRWBatchFlag batches_that_use_buffer(const int buffer_index) | ||||
| { | { | ||||
| switch (buffer_index) { | switch (buffer_index) { | ||||
| case BUFFER_INDEX(vbo.pos_nor): | case BUFFER_INDEX(vbo.pos_nor): | ||||
| return MBC_SURFACE | MBC_SURFACE_WEIGHTS | MBC_EDIT_TRIANGLES | MBC_EDIT_VERTICES | | return MBC_SURFACE | MBC_SURFACE_WEIGHTS | MBC_EDIT_TRIANGLES | MBC_EDIT_VERTICES | | ||||
| MBC_EDIT_EDGES | MBC_EDIT_VNOR | MBC_EDIT_LNOR | MBC_EDIT_MESH_ANALYSIS | | MBC_EDIT_EDGES | MBC_EDIT_VNOR | MBC_EDIT_LNOR | MBC_EDIT_MESH_ANALYSIS | | ||||
| MBC_EDIT_SELECTION_VERTS | MBC_EDIT_SELECTION_EDGES | MBC_EDIT_SELECTION_FACES | | MBC_EDIT_SELECTION_VERTS | MBC_EDIT_SELECTION_EDGES | MBC_EDIT_SELECTION_FACES | | ||||
| MBC_ALL_VERTS | MBC_ALL_EDGES | MBC_LOOSE_EDGES | MBC_EDGE_DETECTION | | MBC_ALL_VERTS | MBC_ALL_EDGES | MBC_LOOSE_EDGES | MBC_EDGE_DETECTION | | ||||
| MBC_WIRE_EDGES | MBC_WIRE_LOOPS | MBC_SCULPT_OVERLAYS | MBC_SURFACE_PER_MAT; | MBC_WIRE_EDGES | MBC_WIRE_LOOPS | MBC_SCULPT_OVERLAYS | MBC_VIEWER_ATTRIBUTE_OVERLAY | | ||||
| MBC_SURFACE_PER_MAT; | |||||
| case BUFFER_INDEX(vbo.lnor): | case BUFFER_INDEX(vbo.lnor): | ||||
| return MBC_SURFACE | MBC_EDIT_LNOR | MBC_WIRE_LOOPS | MBC_SURFACE_PER_MAT; | return MBC_SURFACE | MBC_EDIT_LNOR | MBC_WIRE_LOOPS | MBC_SURFACE_PER_MAT; | ||||
| case BUFFER_INDEX(vbo.edge_fac): | case BUFFER_INDEX(vbo.edge_fac): | ||||
| return MBC_WIRE_EDGES; | return MBC_WIRE_EDGES; | ||||
| case BUFFER_INDEX(vbo.weights): | case BUFFER_INDEX(vbo.weights): | ||||
| return MBC_SURFACE_WEIGHTS; | return MBC_SURFACE_WEIGHTS; | ||||
| case BUFFER_INDEX(vbo.uv): | case BUFFER_INDEX(vbo.uv): | ||||
| return MBC_SURFACE | MBC_EDITUV_FACES_STRETCH_AREA | MBC_EDITUV_FACES_STRETCH_ANGLE | | return MBC_SURFACE | MBC_EDITUV_FACES_STRETCH_AREA | MBC_EDITUV_FACES_STRETCH_ANGLE | | ||||
| ▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | switch (buffer_index) { | ||||
| case BUFFER_INDEX(vbo.attr[8]): | case BUFFER_INDEX(vbo.attr[8]): | ||||
| case BUFFER_INDEX(vbo.attr[9]): | case BUFFER_INDEX(vbo.attr[9]): | ||||
| case BUFFER_INDEX(vbo.attr[10]): | case BUFFER_INDEX(vbo.attr[10]): | ||||
| case BUFFER_INDEX(vbo.attr[11]): | case BUFFER_INDEX(vbo.attr[11]): | ||||
| case BUFFER_INDEX(vbo.attr[12]): | case BUFFER_INDEX(vbo.attr[12]): | ||||
| case BUFFER_INDEX(vbo.attr[13]): | case BUFFER_INDEX(vbo.attr[13]): | ||||
| case BUFFER_INDEX(vbo.attr[14]): | case BUFFER_INDEX(vbo.attr[14]): | ||||
| return MBC_SURFACE | MBC_SURFACE_PER_MAT; | return MBC_SURFACE | MBC_SURFACE_PER_MAT; | ||||
| case BUFFER_INDEX(vbo.attr_viewer): | |||||
| return MBC_VIEWER_ATTRIBUTE_OVERLAY; | |||||
| case BUFFER_INDEX(ibo.tris): | case BUFFER_INDEX(ibo.tris): | ||||
| return MBC_SURFACE | MBC_SURFACE_WEIGHTS | MBC_EDIT_TRIANGLES | MBC_EDIT_LNOR | | return MBC_SURFACE | MBC_SURFACE_WEIGHTS | MBC_EDIT_TRIANGLES | MBC_EDIT_LNOR | | ||||
| MBC_EDIT_MESH_ANALYSIS | MBC_EDIT_SELECTION_FACES | MBC_SCULPT_OVERLAYS; | MBC_EDIT_MESH_ANALYSIS | MBC_EDIT_SELECTION_FACES | MBC_SCULPT_OVERLAYS | | ||||
| MBC_VIEWER_ATTRIBUTE_OVERLAY; | |||||
| case BUFFER_INDEX(ibo.lines): | case BUFFER_INDEX(ibo.lines): | ||||
| return MBC_EDIT_EDGES | MBC_EDIT_SELECTION_EDGES | MBC_ALL_EDGES | MBC_WIRE_EDGES; | return MBC_EDIT_EDGES | MBC_EDIT_SELECTION_EDGES | MBC_ALL_EDGES | MBC_WIRE_EDGES; | ||||
| case BUFFER_INDEX(ibo.lines_loose): | case BUFFER_INDEX(ibo.lines_loose): | ||||
| return MBC_LOOSE_EDGES; | return MBC_LOOSE_EDGES; | ||||
| case BUFFER_INDEX(ibo.points): | case BUFFER_INDEX(ibo.points): | ||||
| return MBC_EDIT_VNOR | MBC_EDIT_VERTICES | MBC_EDIT_SELECTION_VERTS; | return MBC_EDIT_VNOR | MBC_EDIT_VERTICES | MBC_EDIT_SELECTION_VERTS; | ||||
| case BUFFER_INDEX(ibo.fdots): | case BUFFER_INDEX(ibo.fdots): | ||||
| return MBC_EDIT_FACEDOTS | MBC_EDIT_SELECTION_FACEDOTS; | return MBC_EDIT_FACEDOTS | MBC_EDIT_SELECTION_FACEDOTS; | ||||
| ▲ Show 20 Lines • Show All 872 Lines • ▼ Show 20 Lines | GPUBatch *DRW_mesh_batch_cache_get_sculpt_overlays(Mesh *me) | ||||
| cache->cd_needed.sculpt_overlays = 1; | cache->cd_needed.sculpt_overlays = 1; | ||||
| mesh_batch_cache_add_request(cache, MBC_SCULPT_OVERLAYS); | mesh_batch_cache_add_request(cache, MBC_SCULPT_OVERLAYS); | ||||
| DRW_batch_request(&cache->batch.sculpt_overlays); | DRW_batch_request(&cache->batch.sculpt_overlays); | ||||
| return cache->batch.sculpt_overlays; | return cache->batch.sculpt_overlays; | ||||
| } | } | ||||
| GPUBatch *DRW_mesh_batch_cache_get_surface_viewer_attribute(Mesh *me) | |||||
| { | |||||
| MeshBatchCache *cache = mesh_batch_cache_get(me); | |||||
| mesh_batch_cache_add_request(cache, MBC_VIEWER_ATTRIBUTE_OVERLAY); | |||||
| DRW_batch_request(&cache->batch.surface_viewer_attribute); | |||||
| return cache->batch.surface_viewer_attribute; | |||||
| } | |||||
| /** \} */ | /** \} */ | ||||
| /* ---------------------------------------------------------------------- */ | /* ---------------------------------------------------------------------- */ | ||||
| /** \name Edit Mode API | /** \name Edit Mode API | ||||
| * \{ */ | * \{ */ | ||||
| GPUVertBuf *DRW_mesh_batch_cache_pos_vertbuf_get(Mesh *me) | GPUVertBuf *DRW_mesh_batch_cache_pos_vertbuf_get(Mesh *me) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 729 Lines • ▼ Show 20 Lines | assert_deps_valid(MBC_EDITUV_FACEDOTS, | ||||
| {BUFFER_INDEX(ibo.edituv_fdots), | {BUFFER_INDEX(ibo.edituv_fdots), | ||||
| BUFFER_INDEX(vbo.fdots_uv), | BUFFER_INDEX(vbo.fdots_uv), | ||||
| BUFFER_INDEX(vbo.fdots_edituv_data)}); | BUFFER_INDEX(vbo.fdots_edituv_data)}); | ||||
| if (DRW_batch_requested(cache->batch.edituv_fdots, GPU_PRIM_POINTS)) { | if (DRW_batch_requested(cache->batch.edituv_fdots, GPU_PRIM_POINTS)) { | ||||
| DRW_ibo_request(cache->batch.edituv_fdots, &mbuflist->ibo.edituv_fdots); | DRW_ibo_request(cache->batch.edituv_fdots, &mbuflist->ibo.edituv_fdots); | ||||
| DRW_vbo_request(cache->batch.edituv_fdots, &mbuflist->vbo.fdots_uv); | DRW_vbo_request(cache->batch.edituv_fdots, &mbuflist->vbo.fdots_uv); | ||||
| DRW_vbo_request(cache->batch.edituv_fdots, &mbuflist->vbo.fdots_edituv_data); | DRW_vbo_request(cache->batch.edituv_fdots, &mbuflist->vbo.fdots_edituv_data); | ||||
| } | } | ||||
| assert_deps_valid( | |||||
| MBC_VIEWER_ATTRIBUTE_OVERLAY, | |||||
| {BUFFER_INDEX(ibo.tris), BUFFER_INDEX(vbo.pos_nor), BUFFER_INDEX(vbo.attr_viewer)}); | |||||
| if (DRW_batch_requested(cache->batch.surface_viewer_attribute, GPU_PRIM_TRIS)) { | |||||
| DRW_ibo_request(cache->batch.surface_viewer_attribute, &mbuflist->ibo.tris); | |||||
| DRW_vbo_request(cache->batch.surface_viewer_attribute, &mbuflist->vbo.pos_nor); | |||||
| DRW_vbo_request(cache->batch.surface_viewer_attribute, &mbuflist->vbo.attr_viewer); | |||||
| } | |||||
| #ifdef DEBUG | #ifdef DEBUG | ||||
| auto assert_final_deps_valid = [&](const int buffer_index) { | auto assert_final_deps_valid = [&](const int buffer_index) { | ||||
| BLI_assert(batches_that_use_buffer(buffer_index) == | BLI_assert(batches_that_use_buffer(buffer_index) == | ||||
| batches_that_use_buffer_local.lookup(buffer_index)); | batches_that_use_buffer_local.lookup(buffer_index)); | ||||
| }; | }; | ||||
| assert_final_deps_valid(BUFFER_INDEX(vbo.lnor)); | assert_final_deps_valid(BUFFER_INDEX(vbo.lnor)); | ||||
| assert_final_deps_valid(BUFFER_INDEX(vbo.pos_nor)); | assert_final_deps_valid(BUFFER_INDEX(vbo.pos_nor)); | ||||
| Show All 15 Lines | #ifdef DEBUG | ||||
| assert_final_deps_valid(BUFFER_INDEX(vbo.edituv_data)); | assert_final_deps_valid(BUFFER_INDEX(vbo.edituv_data)); | ||||
| assert_final_deps_valid(BUFFER_INDEX(vbo.edituv_stretch_area)); | assert_final_deps_valid(BUFFER_INDEX(vbo.edituv_stretch_area)); | ||||
| assert_final_deps_valid(BUFFER_INDEX(vbo.edituv_stretch_angle)); | assert_final_deps_valid(BUFFER_INDEX(vbo.edituv_stretch_angle)); | ||||
| assert_final_deps_valid(BUFFER_INDEX(vbo.fdots_uv)); | assert_final_deps_valid(BUFFER_INDEX(vbo.fdots_uv)); | ||||
| assert_final_deps_valid(BUFFER_INDEX(vbo.fdots_edituv_data)); | assert_final_deps_valid(BUFFER_INDEX(vbo.fdots_edituv_data)); | ||||
| for (const int i : IndexRange(GPU_MAX_ATTR)) { | for (const int i : IndexRange(GPU_MAX_ATTR)) { | ||||
| assert_final_deps_valid(BUFFER_INDEX(vbo.attr[i])); | assert_final_deps_valid(BUFFER_INDEX(vbo.attr[i])); | ||||
| } | } | ||||
| assert_final_deps_valid(BUFFER_INDEX(vbo.attr_viewer)); | |||||
| assert_final_deps_valid(BUFFER_INDEX(ibo.tris)); | assert_final_deps_valid(BUFFER_INDEX(ibo.tris)); | ||||
| assert_final_deps_valid(BUFFER_INDEX(ibo.lines)); | assert_final_deps_valid(BUFFER_INDEX(ibo.lines)); | ||||
| assert_final_deps_valid(BUFFER_INDEX(ibo.lines_loose)); | assert_final_deps_valid(BUFFER_INDEX(ibo.lines_loose)); | ||||
| assert_final_deps_valid(BUFFER_INDEX(ibo.lines_adjacency)); | assert_final_deps_valid(BUFFER_INDEX(ibo.lines_adjacency)); | ||||
| assert_final_deps_valid(BUFFER_INDEX(ibo.lines_paint_mask)); | assert_final_deps_valid(BUFFER_INDEX(ibo.lines_paint_mask)); | ||||
| assert_final_deps_valid(BUFFER_INDEX(ibo.points)); | assert_final_deps_valid(BUFFER_INDEX(ibo.points)); | ||||
| assert_final_deps_valid(BUFFER_INDEX(ibo.fdots)); | assert_final_deps_valid(BUFFER_INDEX(ibo.fdots)); | ||||
| ▲ Show 20 Lines • Show All 92 Lines • Show Last 20 Lines | |||||