diff options
-rw-r--r-- | source/blender/draw/engines/basic/basic_engine.c | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_armature.c | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_cache.c | 103 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_cache.h | 17 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_cache_impl.h | 23 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_cache_impl_mesh.c | 199 | ||||
-rw-r--r-- | source/blender/draw/modes/object_mode.c | 2 | ||||
-rw-r--r-- | source/blender/draw/modes/overlay_mode.c | 2 | ||||
-rw-r--r-- | source/blender/draw/modes/paint_texture_mode.c | 2 | ||||
-rw-r--r-- | source/blender/draw/modes/paint_vertex_mode.c | 4 | ||||
-rw-r--r-- | source/blender/draw/modes/paint_weight_mode.c | 4 |
11 files changed, 63 insertions, 297 deletions
diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c index eea41c932e2..f64d345c52f 100644 --- a/source/blender/draw/engines/basic/basic_engine.c +++ b/source/blender/draw/engines/basic/basic_engine.c @@ -152,7 +152,7 @@ static void basic_cache_populate(void *vedata, Object *ob) if (is_flat_object_viewed_from_side) { /* Avoid losing flat objects when in ortho views (see T56549) */ - struct GPUBatch *geom = DRW_cache_object_wire_outline_get(ob); + struct GPUBatch *geom = DRW_cache_object_all_edges_get(ob); DRW_shgroup_call_object_add(stl->g_data->depth_shgrp, geom, ob); return; } diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c index 8d0cae3cc4a..e5a15a9d01d 100644 --- a/source/blender/draw/intern/draw_armature.c +++ b/source/blender/draw/intern/draw_armature.c @@ -363,7 +363,7 @@ static void drw_shgroup_bone_custom_wire( const float color[4], Object *custom) { /* grr, not re-using instances! */ - struct GPUBatch *geom = DRW_cache_object_wire_outline_get(custom); + struct GPUBatch *geom = DRW_cache_object_all_edges_get(custom); /* XXXXXXX needs to be moved elsewhere. */ drw_batch_cache_generate_requested(custom); diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c index 945de6e8176..ff4fb0c85f6 100644 --- a/source/blender/draw/intern/draw_cache.c +++ b/source/blender/draw/intern/draw_cache.c @@ -670,11 +670,11 @@ GPUBatch *DRW_cache_gpencil_axes_get(void) /** \name Common Object API * \{ */ -GPUBatch *DRW_cache_object_wire_outline_get(Object *ob) +GPUBatch *DRW_cache_object_all_edges_get(Object *ob) { switch (ob->type) { case OB_MESH: - return DRW_cache_mesh_wire_outline_get(ob); + return DRW_cache_mesh_all_edges_get(ob); /* TODO, should match 'DRW_cache_object_surface_get' */ default: @@ -694,7 +694,6 @@ GPUBatch *DRW_cache_object_edge_detection_get(Object *ob, bool *r_is_manifold) } } -/* Returns a buffer texture. */ GPUBatch *DRW_cache_object_face_wireframe_get(Object *ob) { switch (ob->type) { @@ -2992,121 +2991,81 @@ GPUBatch *DRW_cache_single_vert_get(void) /** \name Meshes * \{ */ -GPUBatch *DRW_cache_mesh_wire_outline_get(Object *ob) +GPUBatch *DRW_cache_mesh_all_verts_get(Object *ob) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_fancy_edges(me); -} - -GPUBatch *DRW_cache_mesh_edge_detection_get(Object *ob, bool *r_is_manifold) -{ - BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_edge_detection(me, r_is_manifold); -} - -GPUBatch *DRW_cache_mesh_surface_get(Object *ob) -{ - BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_triangles_with_normals(me); + return DRW_mesh_batch_cache_get_all_verts(ob->data); } -GPUBatch *DRW_cache_mesh_wire_get(Object *ob) +GPUBatch *DRW_cache_mesh_all_edges_get(Object *ob) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_wire_loops(me); + return DRW_mesh_batch_cache_get_all_edges(ob->data); } -GPUBatch *DRW_cache_mesh_face_wireframe_get(Object *ob) +GPUBatch *DRW_cache_mesh_loose_edges_get(Object *ob) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_wireframes_face(me); + return DRW_mesh_batch_cache_get_loose_edges(ob->data); } -GPUBatch *DRW_cache_mesh_loose_edges_get(Object *ob) +GPUBatch *DRW_cache_mesh_edge_detection_get(Object *ob, bool *r_is_manifold) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_loose_edges_with_normals(me); + return DRW_mesh_batch_cache_get_edge_detection(ob->data, r_is_manifold); } -GPUBatch *DRW_cache_mesh_surface_weights_get(Object *ob) +GPUBatch *DRW_cache_mesh_surface_get(Object *ob) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_triangles_with_normals_and_weights(me); + return DRW_mesh_batch_cache_get_surface(ob->data); } -GPUBatch *DRW_cache_mesh_surface_vert_colors_get(Object *ob) +GPUBatch *DRW_cache_mesh_surface_edges_get(Object *ob) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_surface_vertpaint(me); + return DRW_mesh_batch_cache_get_surface_edges(ob->data); } -/* Return list of batches */ +/* Return list of batches with length equal to max(1, totcol). */ GPUBatch **DRW_cache_mesh_surface_shaded_get( Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len, char **auto_layer_names, int **auto_layer_is_srgb, int *auto_layer_count) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_surface_shaded(me, gpumat_array, gpumat_array_len, + return DRW_mesh_batch_cache_get_surface_shaded(ob->data, gpumat_array, gpumat_array_len, auto_layer_names, auto_layer_is_srgb, auto_layer_count); } -/* Return list of batches */ +/* Return list of batches with length equal to max(1, totcol). */ GPUBatch **DRW_cache_mesh_surface_texpaint_get(Object *ob) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_surface_texpaint(me); + return DRW_mesh_batch_cache_get_surface_texpaint(ob->data); } GPUBatch *DRW_cache_mesh_surface_texpaint_single_get(Object *ob) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_surface_texpaint_single(me); + return DRW_mesh_batch_cache_get_surface_texpaint_single(ob->data); } -GPUBatch *DRW_cache_mesh_surface_verts_get(Object *ob) +GPUBatch *DRW_cache_mesh_surface_vertpaint_get(Object *ob) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_points_with_normals(me); + return DRW_mesh_batch_cache_get_surface_vertpaint(ob->data); } -GPUBatch *DRW_cache_mesh_edges_get(Object *ob) +GPUBatch *DRW_cache_mesh_surface_weights_get(Object *ob) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_all_edges(me); + return DRW_mesh_batch_cache_get_surface_weights(ob->data); } -GPUBatch *DRW_cache_mesh_verts_get(Object *ob) +GPUBatch *DRW_cache_mesh_face_wireframe_get(Object *ob) { BLI_assert(ob->type == OB_MESH); - - Mesh *me = ob->data; - return DRW_mesh_batch_cache_get_all_verts(me); + return DRW_mesh_batch_cache_get_wireframes_face(ob->data); } void DRW_cache_mesh_sculpt_coords_ensure(Object *ob) @@ -3163,7 +3122,7 @@ GPUBatch *DRW_cache_curve_surface_get(Object *ob) struct Curve *cu = ob->data; struct Mesh *mesh_eval = ob->runtime.mesh_eval; if (mesh_eval != NULL) { - return DRW_mesh_batch_cache_get_triangles_with_normals(mesh_eval); + return DRW_mesh_batch_cache_get_surface(mesh_eval); } else { return DRW_curve_batch_cache_get_triangles_with_normals(cu); @@ -3177,7 +3136,7 @@ GPUBatch *DRW_cache_curve_loose_edges_get(Object *ob) struct Curve *cu = ob->data; struct Mesh *mesh_eval = ob->runtime.mesh_eval; if (mesh_eval != NULL) { - return DRW_mesh_batch_cache_get_loose_edges_with_normals(mesh_eval); + return DRW_mesh_batch_cache_get_loose_edges(mesh_eval); } else { /* TODO */ @@ -3267,7 +3226,7 @@ GPUBatch *DRW_cache_text_surface_get(Object *ob) return NULL; } if (mesh_eval != NULL) { - return DRW_mesh_batch_cache_get_triangles_with_normals(mesh_eval); + return DRW_mesh_batch_cache_get_surface(mesh_eval); } else { return DRW_curve_batch_cache_get_triangles_with_normals(cu); @@ -3283,7 +3242,7 @@ GPUBatch *DRW_cache_text_loose_edges_get(Object *ob) return NULL; } if (mesh_eval != NULL) { - return DRW_mesh_batch_cache_get_loose_edges_with_normals(mesh_eval); + return DRW_mesh_batch_cache_get_loose_edges(mesh_eval); } else { /* TODO */ @@ -3338,7 +3297,7 @@ GPUBatch *DRW_cache_surf_surface_get(Object *ob) struct Curve *cu = ob->data; struct Mesh *mesh_eval = ob->runtime.mesh_eval; if (mesh_eval != NULL) { - return DRW_mesh_batch_cache_get_triangles_with_normals(mesh_eval); + return DRW_mesh_batch_cache_get_surface(mesh_eval); } else { return DRW_curve_batch_cache_get_triangles_with_normals(cu); @@ -3374,7 +3333,7 @@ GPUBatch *DRW_cache_surf_loose_edges_get(Object *ob) struct Curve *cu = ob->data; struct Mesh *mesh_eval = ob->runtime.mesh_eval; if (mesh_eval != NULL) { - return DRW_mesh_batch_cache_get_loose_edges_with_normals(mesh_eval); + return DRW_mesh_batch_cache_get_loose_edges(mesh_eval); } else { /* TODO */ diff --git a/source/blender/draw/intern/draw_cache.h b/source/blender/draw/intern/draw_cache.h index 6387d9efaa2..b2843ed3cda 100644 --- a/source/blender/draw/intern/draw_cache.h +++ b/source/blender/draw/intern/draw_cache.h @@ -50,7 +50,7 @@ struct GPUBatch *DRW_cache_single_line_endpoints_get(void); struct GPUBatch *DRW_cache_screenspace_circle_get(void); /* Common Object */ -struct GPUBatch *DRW_cache_object_wire_outline_get(struct Object *ob); +struct GPUBatch *DRW_cache_object_all_edges_get(struct Object *ob); struct GPUBatch *DRW_cache_object_edge_detection_get(struct Object *ob, bool *r_is_manifold); struct GPUBatch *DRW_cache_object_surface_get(struct Object *ob); struct GPUBatch *DRW_cache_object_loose_edges_get(struct Object *ob); @@ -124,22 +124,19 @@ struct GPUBatch *DRW_cache_bone_dof_sphere_get(void); struct GPUBatch *DRW_cache_bone_dof_lines_get(void); /* Meshes */ -struct GPUBatch *DRW_cache_mesh_wire_outline_get(struct Object *ob); +struct GPUBatch *DRW_cache_mesh_all_verts_get(struct Object *ob); +struct GPUBatch *DRW_cache_mesh_all_edges_get(struct Object *ob); +struct GPUBatch *DRW_cache_mesh_loose_edges_get(struct Object *ob); struct GPUBatch *DRW_cache_mesh_edge_detection_get(struct Object *ob, bool *r_is_manifold); struct GPUBatch *DRW_cache_mesh_surface_get(struct Object *ob); -struct GPUBatch *DRW_cache_mesh_wire_get(struct Object *ob); -struct GPUBatch *DRW_cache_mesh_loose_edges_get(struct Object *ob); -struct GPUBatch *DRW_cache_mesh_surface_weights_get(struct Object *ob); -struct GPUBatch *DRW_cache_mesh_surface_vert_colors_get(struct Object *ob); -struct GPUBatch *DRW_cache_mesh_surface_verts_get(struct Object *ob); -struct GPUBatch *DRW_cache_mesh_edges_get(struct Object *ob); -struct GPUBatch *DRW_cache_mesh_verts_get(struct Object *ob); -struct GPUBatch *DRW_cache_mesh_edges_paint_overlay_get(struct Object *ob, bool use_wire, bool use_sel); +struct GPUBatch *DRW_cache_mesh_surface_edges_get(struct Object *ob); struct GPUBatch **DRW_cache_mesh_surface_shaded_get( struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len, char **auto_layer_names, int **auto_layer_is_srgb, int *auto_layer_count); struct GPUBatch **DRW_cache_mesh_surface_texpaint_get(struct Object *ob); struct GPUBatch *DRW_cache_mesh_surface_texpaint_single_get(struct Object *ob); +struct GPUBatch *DRW_cache_mesh_surface_vertpaint_get(struct Object *ob); +struct GPUBatch *DRW_cache_mesh_surface_weights_get(struct Object *ob); struct GPUBatch *DRW_cache_mesh_face_wireframe_get(struct Object *ob); void DRW_cache_mesh_sculpt_coords_ensure(struct Object *ob); diff --git a/source/blender/draw/intern/draw_cache_impl.h b/source/blender/draw/intern/draw_cache_impl.h index d1c5afed4a1..bd7260f967b 100644 --- a/source/blender/draw/intern/draw_cache_impl.h +++ b/source/blender/draw/intern/draw_cache_impl.h @@ -98,23 +98,20 @@ struct GPUBatch *DRW_lattice_batch_cache_get_edit_verts(struct Lattice *lt); /* Mesh */ void DRW_mesh_batch_cache_create_requested(struct Object *ob, struct Mesh *me); +struct GPUBatch *DRW_mesh_batch_cache_get_all_verts(struct Mesh *me); +struct GPUBatch *DRW_mesh_batch_cache_get_all_edges(struct Mesh *me); +struct GPUBatch *DRW_mesh_batch_cache_get_loose_edges(struct Mesh *me); +struct GPUBatch *DRW_mesh_batch_cache_get_edge_detection(struct Mesh *me, bool *r_is_manifold); +struct GPUBatch *DRW_mesh_batch_cache_get_surface(struct Mesh *me); +struct GPUBatch *DRW_mesh_batch_cache_get_surface_edges(struct Mesh *me); struct GPUBatch **DRW_mesh_batch_cache_get_surface_shaded( struct Mesh *me, struct GPUMaterial **gpumat_array, uint gpumat_array_len, char **auto_layer_names, int **auto_layer_is_srgb, int *auto_layer_count); struct GPUBatch **DRW_mesh_batch_cache_get_surface_texpaint(struct Mesh *me); struct GPUBatch *DRW_mesh_batch_cache_get_surface_texpaint_single(struct Mesh *me); struct GPUBatch *DRW_mesh_batch_cache_get_surface_vertpaint(struct Mesh *me); -struct GPUBatch *DRW_mesh_batch_cache_get_wire_loops(struct Mesh *me); -struct GPUBatch *DRW_mesh_batch_cache_get_all_edges(struct Mesh *me); -struct GPUBatch *DRW_mesh_batch_cache_get_triangles_with_normals(struct Mesh *me); -struct GPUBatch *DRW_mesh_batch_cache_get_triangles_with_normals_and_weights(struct Mesh *me); -struct GPUBatch *DRW_mesh_batch_cache_get_triangles_with_select_id(struct Mesh *me, bool use_hide, uint select_id_offset); -struct GPUBatch *DRW_mesh_batch_cache_get_triangles_with_select_mask(struct Mesh *me, bool use_hide); -struct GPUBatch *DRW_mesh_batch_cache_get_loose_edges_with_normals(struct Mesh *me); -struct GPUBatch *DRW_mesh_batch_cache_get_points_with_normals(struct Mesh *me); -struct GPUBatch *DRW_mesh_batch_cache_get_all_verts(struct Mesh *me); -struct GPUBatch *DRW_mesh_batch_cache_get_fancy_edges(struct Mesh *me); -struct GPUBatch *DRW_mesh_batch_cache_get_edge_detection(struct Mesh *me, bool *r_is_manifold); +struct GPUBatch *DRW_mesh_batch_cache_get_surface_weights(struct Mesh *me); +/* edit-mesh drawing */ struct GPUBatch *DRW_mesh_batch_cache_get_edit_triangles(struct Mesh *me); struct GPUBatch *DRW_mesh_batch_cache_get_edit_triangles_nor(struct Mesh *me); struct GPUBatch *DRW_mesh_batch_cache_get_edit_triangles_lnor(struct Mesh *me); @@ -123,7 +120,9 @@ struct GPUBatch *DRW_mesh_batch_cache_get_edit_loose_edges(struct Mesh *me); struct GPUBatch *DRW_mesh_batch_cache_get_edit_loose_edges_nor(struct Mesh *me); struct GPUBatch *DRW_mesh_batch_cache_get_edit_loose_verts(struct Mesh *me); struct GPUBatch *DRW_mesh_batch_cache_get_edit_facedots(struct Mesh *me); -/* edit-mesh selection (use generic function for faces) */ +/* edit-mesh selection */ +struct GPUBatch *DRW_mesh_batch_cache_get_triangles_with_select_id(struct Mesh *me, bool use_hide, uint select_id_offset); +struct GPUBatch *DRW_mesh_batch_cache_get_triangles_with_select_mask(struct Mesh *me, bool use_hide); struct GPUBatch *DRW_mesh_batch_cache_get_facedots_with_select_id(struct Mesh *me, uint select_id_offset); struct GPUBatch *DRW_mesh_batch_cache_get_edges_with_select_id(struct Mesh *me, uint select_id_offset); struct GPUBatch *DRW_mesh_batch_cache_get_verts_with_select_id(struct Mesh *me, uint select_id_offset); diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c index 95438b9f2f0..5d3a856a2d2 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.c +++ b/source/blender/draw/intern/draw_cache_impl_mesh.c @@ -1186,7 +1186,7 @@ static int mesh_render_data_loose_verts_len_get_maybe_mapped(const MeshRenderDat return ((rdata->mapped.use == false) ? rdata->loose_vert_len : rdata->mapped.loose_vert_len); } -static int mesh_render_data_edges_len_get(const MeshRenderData *rdata) +static int UNUSED_FUNCTION(mesh_render_data_edges_len_get)(const MeshRenderData *rdata) { BLI_assert(rdata->types & MR_DATATYPE_EDGE); return rdata->edge_len; @@ -1476,113 +1476,6 @@ fallback: /** \name Internal Cache Generation * \{ */ -static bool mesh_render_data_edge_vcos_manifold_pnors( - MeshRenderData *rdata, const int edge_index, - float **r_vco1, float **r_vco2, float **r_pnor1, float **r_pnor2, bool *r_is_manifold) -{ - BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_EDGE | MR_DATATYPE_LOOP | MR_DATATYPE_POLY)); - - if (rdata->edit_bmesh) { - BMesh *bm = rdata->edit_bmesh->bm; - BMEdge *eed = BM_edge_at_index(bm, edge_index); - if (BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) { - return false; - } - *r_vco1 = eed->v1->co; - *r_vco2 = eed->v2->co; - if (BM_edge_is_manifold(eed)) { - *r_pnor1 = eed->l->f->no; - *r_pnor2 = eed->l->radial_next->f->no; - *r_is_manifold = true; - } - else if (eed->l != NULL) { - *r_pnor1 = eed->l->f->no; - *r_pnor2 = eed->l->f->no; - *r_is_manifold = false; - } - else { - *r_pnor1 = eed->v1->no; - *r_pnor2 = eed->v1->no; - *r_is_manifold = false; - } - } - else { - MVert *mvert = rdata->mvert; - const MEdge *medge = rdata->medge; - EdgeAdjacentPolys *eap = rdata->edges_adjacent_polys; - float (*pnors)[3] = rdata->poly_normals; - - if (!eap) { - const MLoop *mloop = rdata->mloop; - const MPoly *mpoly = rdata->mpoly; - const int poly_len = rdata->poly_len; - const bool do_pnors = (poly_len != 0 && pnors == NULL); - - eap = rdata->edges_adjacent_polys = MEM_mallocN(sizeof(*eap) * rdata->edge_len, __func__); - for (int i = 0; i < rdata->edge_len; i++) { - eap[i].count = 0; - eap[i].face_index[0] = -1; - eap[i].face_index[1] = -1; - } - if (do_pnors) { - pnors = rdata->poly_normals = MEM_mallocN(sizeof(*pnors) * poly_len, __func__); - } - - for (int i = 0; i < poly_len; i++, mpoly++) { - if (do_pnors) { - BKE_mesh_calc_poly_normal(mpoly, mloop + mpoly->loopstart, mvert, pnors[i]); - } - - const int loopend = mpoly->loopstart + mpoly->totloop; - for (int j = mpoly->loopstart; j < loopend; j++) { - const int edge_idx = mloop[j].e; - if (eap[edge_idx].count < 2) { - eap[edge_idx].face_index[eap[edge_idx].count] = i; - } - eap[edge_idx].count++; - } - } - } - BLI_assert(eap && (rdata->poly_len == 0 || pnors != NULL)); - - *r_vco1 = mvert[medge[edge_index].v1].co; - *r_vco2 = mvert[medge[edge_index].v2].co; - if (eap[edge_index].face_index[0] == -1) { - /* Edge has no poly... */ - *r_pnor1 = *r_pnor2 = mvert[medge[edge_index].v1].co; /* XXX mvert.no are shorts... :( */ - *r_is_manifold = false; - } - else { - *r_pnor1 = pnors[eap[edge_index].face_index[0]]; - - float nor[3], v1[3], v2[3], r_center[3]; - const MPoly *mpoly = rdata->mpoly + eap[edge_index].face_index[0]; - const MLoop *mloop = rdata->mloop + mpoly->loopstart; - - BKE_mesh_calc_poly_center(mpoly, mloop, mvert, r_center); - sub_v3_v3v3(v1, *r_vco2, *r_vco1); - sub_v3_v3v3(v2, r_center, *r_vco1); - cross_v3_v3v3(nor, v1, v2); - - if (dot_v3v3(nor, *r_pnor1) < 0.0) { - SWAP(float *, *r_vco1, *r_vco2); - } - - if (eap[edge_index].count == 2) { - BLI_assert(eap[edge_index].face_index[1] >= 0); - *r_pnor2 = pnors[eap[edge_index].face_index[1]]; - *r_is_manifold = true; - } - else { - *r_pnor2 = pnors[eap[edge_index].face_index[0]]; - *r_is_manifold = false; - } - } - } - - return true; -} - static uchar mesh_render_data_looptri_flag(MeshRenderData *rdata, const BMFace *efa) { uchar fflag = 0; @@ -4530,13 +4423,13 @@ GPUBatch *DRW_mesh_batch_cache_get_all_edges(Mesh *me) return DRW_batch_request(&cache->batch.all_edges); } -GPUBatch *DRW_mesh_batch_cache_get_triangles_with_normals(Mesh *me) +GPUBatch *DRW_mesh_batch_cache_get_surface(Mesh *me) { MeshBatchCache *cache = mesh_batch_cache_get(me); return DRW_batch_request(&cache->batch.surface); } -GPUBatch *DRW_mesh_batch_cache_get_loose_edges_with_normals(Mesh *me) +GPUBatch *DRW_mesh_batch_cache_get_loose_edges(Mesh *me) { MeshBatchCache *cache = mesh_batch_cache_get(me); @@ -4557,7 +4450,7 @@ GPUBatch *DRW_mesh_batch_cache_get_loose_edges_with_normals(Mesh *me) return cache->ledges_with_normals; } -GPUBatch *DRW_mesh_batch_cache_get_triangles_with_normals_and_weights(Mesh *me) +GPUBatch *DRW_mesh_batch_cache_get_surface_weights(Mesh *me) { MeshBatchCache *cache = mesh_batch_cache_get(me); return DRW_batch_request(&cache->batch.surface_weights); @@ -4619,88 +4512,6 @@ struct GPUBatch *DRW_mesh_batch_cache_get_triangles_with_select_mask(struct Mesh return cache->triangles_with_select_mask; } -GPUBatch *DRW_mesh_batch_cache_get_points_with_normals(Mesh *me) -{ - MeshBatchCache *cache = mesh_batch_cache_get(me); - - if (cache->points_with_normals == NULL) { - const int datatype = MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY; - MeshRenderData *rdata = mesh_render_data_create(me, datatype); - - cache->points_with_normals = GPU_batch_create( - GPU_PRIM_POINTS, mesh_batch_cache_get_tri_pos_and_normals_edit(rdata, cache, false), NULL); - - mesh_render_data_free(rdata); - } - - return cache->points_with_normals; -} - -GPUBatch *DRW_mesh_batch_cache_get_fancy_edges(Mesh *me) -{ - MeshBatchCache *cache = mesh_batch_cache_get(me); - - if (cache->fancy_edges == NULL) { - /* create batch from DM */ - static GPUVertFormat format = { 0 }; - static struct { uint pos, n1, n2; } attr_id; - if (format.attr_len == 0) { - attr_id.pos = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); - - attr_id.n1 = GPU_vertformat_attr_add(&format, "N1", GPU_COMP_I10, 3, GPU_FETCH_INT_TO_FLOAT_UNIT); - attr_id.n2 = GPU_vertformat_attr_add(&format, "N2", GPU_COMP_I10, 3, GPU_FETCH_INT_TO_FLOAT_UNIT); - } - GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format); - - MeshRenderData *rdata = mesh_render_data_create( - me, MR_DATATYPE_VERT | MR_DATATYPE_EDGE | MR_DATATYPE_LOOP | MR_DATATYPE_POLY); - - const int edge_len = mesh_render_data_edges_len_get(rdata); - - const int vbo_len_capacity = edge_len * 2; /* these are PRIM_LINE verts, not mesh verts */ - int vbo_len_used = 0; - GPU_vertbuf_data_alloc(vbo, vbo_len_capacity); - for (int i = 0; i < edge_len; i++) { - float *vcos1, *vcos2; - float *pnor1 = NULL, *pnor2 = NULL; - bool is_manifold; - - if (mesh_render_data_edge_vcos_manifold_pnors(rdata, i, &vcos1, &vcos2, &pnor1, &pnor2, &is_manifold)) { - - GPUPackedNormal n1value = { .x = 0, .y = 0, .z = +511 }; - GPUPackedNormal n2value = { .x = 0, .y = 0, .z = -511 }; - - if (is_manifold) { - n1value = GPU_normal_convert_i10_v3(pnor1); - n2value = GPU_normal_convert_i10_v3(pnor2); - } - - const GPUPackedNormal *n1 = &n1value; - const GPUPackedNormal *n2 = &n2value; - - GPU_vertbuf_attr_set(vbo, attr_id.pos, 2 * i, vcos1); - GPU_vertbuf_attr_set(vbo, attr_id.n1, 2 * i, n1); - GPU_vertbuf_attr_set(vbo, attr_id.n2, 2 * i, n2); - - GPU_vertbuf_attr_set(vbo, attr_id.pos, 2 * i + 1, vcos2); - GPU_vertbuf_attr_set(vbo, attr_id.n1, 2 * i + 1, n1); - GPU_vertbuf_attr_set(vbo, attr_id.n2, 2 * i + 1, n2); - - vbo_len_used += 2; - } - } - if (vbo_len_used != vbo_len_capacity) { - GPU_vertbuf_data_resize(vbo, vbo_len_used); - } - - cache->fancy_edges = GPU_batch_create_ex(GPU_PRIM_LINES, vbo, NULL, GPU_BATCH_OWNS_VBO); - - mesh_render_data_free(rdata); - } - - return cache->fancy_edges; -} - GPUBatch *DRW_mesh_batch_cache_get_edge_detection(Mesh *me, bool *r_is_manifold) { MeshBatchCache *cache = mesh_batch_cache_get(me); @@ -5009,7 +4820,7 @@ GPUBatch *DRW_mesh_batch_cache_get_texpaint_loop_wire(Mesh *me) return cache->texpaint_uv_loops; } -GPUBatch *DRW_mesh_batch_cache_get_wire_loops(Mesh *me) +GPUBatch *DRW_mesh_batch_cache_get_surface_edges(Mesh *me) { MeshBatchCache *cache = mesh_batch_cache_get(me); return DRW_batch_request(&cache->batch.wire_loops); diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c index 177c6c74e02..8f6b23e7c68 100644 --- a/source/blender/draw/modes/object_mode.c +++ b/source/blender/draw/modes/object_mode.c @@ -2657,7 +2657,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob) if (ob != draw_ctx->object_edit) { Mesh *me = ob->data; if (me->totedge == 0) { - struct GPUBatch *geom = DRW_cache_mesh_verts_get(ob); + struct GPUBatch *geom = DRW_cache_mesh_all_verts_get(ob); if (geom) { if (theme_id == TH_UNDEFINED) { theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL); diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c index 7060c1c9704..2011597e088 100644 --- a/source/blender/draw/modes/overlay_mode.c +++ b/source/blender/draw/modes/overlay_mode.c @@ -260,7 +260,7 @@ static void overlay_cache_populate(void *vedata, Object *ob) if (is_flat_object_viewed_from_side && !is_sculpt_mode) { /* Avoid losing flat objects when in ortho views (see T56549) */ - struct GPUBatch *geom = DRW_cache_object_wire_outline_get(ob); + struct GPUBatch *geom = DRW_cache_object_all_edges_get(ob); if (geom) { shgrp = pd->flat_wires; shgrp = DRW_shgroup_create_sub(shgrp); diff --git a/source/blender/draw/modes/paint_texture_mode.c b/source/blender/draw/modes/paint_texture_mode.c index 3386c797765..cf6f32170f1 100644 --- a/source/blender/draw/modes/paint_texture_mode.c +++ b/source/blender/draw/modes/paint_texture_mode.c @@ -305,7 +305,7 @@ static void PAINT_TEXTURE_cache_populate(void *vedata, Object *ob) /* Face Mask */ if (use_face_sel) { struct GPUBatch *geom; - geom = DRW_cache_mesh_wire_get(ob); + geom = DRW_cache_mesh_surface_edges_get(ob); DRW_shgroup_call_add(stl->g_data->lwire_shgrp, geom, ob->obmat); geom = DRW_cache_mesh_surface_get(ob); diff --git a/source/blender/draw/modes/paint_vertex_mode.c b/source/blender/draw/modes/paint_vertex_mode.c index 7d3aa0f0b20..d57777675af 100644 --- a/source/blender/draw/modes/paint_vertex_mode.c +++ b/source/blender/draw/modes/paint_vertex_mode.c @@ -165,12 +165,12 @@ static void PAINT_VERTEX_cache_populate(void *vedata, Object *ob) } if (use_surface) { - geom = DRW_cache_mesh_surface_vert_colors_get(ob); + geom = DRW_cache_mesh_surface_vertpaint_get(ob); DRW_shgroup_call_add(stl->g_data->fvcolor_shgrp, geom, ob->obmat); } if (use_face_sel || use_wire) { - geom = DRW_cache_mesh_wire_get(ob); + geom = DRW_cache_mesh_surface_edges_get(ob); DRW_shgroup_call_add(stl->g_data->lwire_shgrp, geom, ob->obmat); } diff --git a/source/blender/draw/modes/paint_weight_mode.c b/source/blender/draw/modes/paint_weight_mode.c index e3993ee177a..0d6b2edba93 100644 --- a/source/blender/draw/modes/paint_weight_mode.c +++ b/source/blender/draw/modes/paint_weight_mode.c @@ -196,7 +196,7 @@ static void PAINT_WEIGHT_cache_populate(void *vedata, Object *ob) } if (use_face_sel || use_wire) { - geom = DRW_cache_mesh_wire_get(ob); + geom = DRW_cache_mesh_surface_edges_get(ob); DRW_shgroup_call_add(stl->g_data->lwire_shgrp, geom, ob->obmat); } @@ -206,7 +206,7 @@ static void PAINT_WEIGHT_cache_populate(void *vedata, Object *ob) } if (use_vert_sel) { - geom = DRW_cache_mesh_verts_get(ob); + geom = DRW_cache_mesh_all_verts_get(ob); DRW_shgroup_call_add(stl->g_data->vert_shgrp, geom, ob->obmat); } } |