Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/modes/edit_mesh_mode.c
| Show First 20 Lines • Show All 661 Lines • ▼ Show 20 Lines | static void edit_mesh_add_ob_to_pass(Scene *scene, | ||||
| if (embm) { | if (embm) { | ||||
| has_edit_mesh_cage = embm->mesh_eval_cage && (embm->mesh_eval_cage != embm->mesh_eval_final); | has_edit_mesh_cage = embm->mesh_eval_cage && (embm->mesh_eval_cage != embm->mesh_eval_final); | ||||
| } | } | ||||
| face_shgrp = (has_edit_mesh_cage) ? face_cage_shgrp : face_shgrp; | face_shgrp = (has_edit_mesh_cage) ? face_cage_shgrp : face_shgrp; | ||||
| geom_tris = DRW_mesh_batch_cache_get_edit_triangles(ob->data); | geom_tris = DRW_mesh_batch_cache_get_edit_triangles(ob->data); | ||||
| geom_edges = DRW_mesh_batch_cache_get_edit_edges(ob->data); | geom_edges = DRW_mesh_batch_cache_get_edit_edges(ob->data); | ||||
| DRW_shgroup_call(edge_shgrp, geom_edges, ob); | DRW_shgroup_call_no_cull(edge_shgrp, geom_edges, ob); | ||||
| DRW_shgroup_call(face_shgrp, geom_tris, ob); | DRW_shgroup_call_no_cull(face_shgrp, geom_tris, ob); | ||||
| if ((tsettings->selectmode & SCE_SELECT_VERTEX) != 0) { | if ((tsettings->selectmode & SCE_SELECT_VERTEX) != 0) { | ||||
| geom_verts = DRW_mesh_batch_cache_get_edit_vertices(ob->data); | geom_verts = DRW_mesh_batch_cache_get_edit_vertices(ob->data); | ||||
| DRW_shgroup_call(vert_shgrp, geom_verts, ob); | DRW_shgroup_call_no_cull(vert_shgrp, geom_verts, ob); | ||||
| } | } | ||||
| if (facedot_shgrp && (tsettings->selectmode & SCE_SELECT_FACE) != 0) { | if (facedot_shgrp && (tsettings->selectmode & SCE_SELECT_FACE) != 0) { | ||||
| geom_fcenter = DRW_mesh_batch_cache_get_edit_facedots(ob->data); | geom_fcenter = DRW_mesh_batch_cache_get_edit_facedots(ob->data); | ||||
| DRW_shgroup_call(facedot_shgrp, geom_fcenter, ob); | DRW_shgroup_call_no_cull(facedot_shgrp, geom_fcenter, ob); | ||||
| } | } | ||||
| } | } | ||||
| static void EDIT_MESH_cache_populate(void *vedata, Object *ob) | static void EDIT_MESH_cache_populate(void *vedata, Object *ob) | ||||
| { | { | ||||
| EDIT_MESH_StorageList *stl = ((EDIT_MESH_Data *)vedata)->stl; | EDIT_MESH_StorageList *stl = ((EDIT_MESH_Data *)vedata)->stl; | ||||
| EDIT_MESH_PrivateData *g_data = stl->g_data; | EDIT_MESH_PrivateData *g_data = stl->g_data; | ||||
| const DRWContextState *draw_ctx = DRW_context_state_get(); | const DRWContextState *draw_ctx = DRW_context_state_get(); | ||||
| View3D *v3d = draw_ctx->v3d; | View3D *v3d = draw_ctx->v3d; | ||||
| Scene *scene = draw_ctx->scene; | Scene *scene = draw_ctx->scene; | ||||
| struct GPUBatch *geom; | struct GPUBatch *geom; | ||||
| if (ob->type == OB_MESH) { | if (ob->type == OB_MESH) { | ||||
| if ((ob == draw_ctx->object_edit) || BKE_object_is_in_editmode(ob)) { | if ((ob == draw_ctx->object_edit) || BKE_object_is_in_editmode(ob)) { | ||||
| bool do_in_front = (ob->dtx & OB_DRAWXRAY) != 0; | bool do_in_front = (ob->dtx & OB_DRAWXRAY) != 0; | ||||
| bool do_occlude_wire = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_OCCLUDE_WIRE) != 0; | bool do_occlude_wire = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_OCCLUDE_WIRE) != 0; | ||||
| bool do_show_weight = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_WEIGHT) != 0; | bool do_show_weight = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_WEIGHT) != 0; | ||||
| bool do_show_mesh_analysis = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_STATVIS) != 0; | bool do_show_mesh_analysis = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_STATVIS) != 0; | ||||
| bool fnormals_do = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_FACE_NORMALS) != 0; | bool fnormals_do = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_FACE_NORMALS) != 0; | ||||
| bool vnormals_do = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_VERT_NORMALS) != 0; | bool vnormals_do = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_VERT_NORMALS) != 0; | ||||
| bool lnormals_do = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_LOOP_NORMALS) != 0; | bool lnormals_do = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_LOOP_NORMALS) != 0; | ||||
| if (do_show_weight) { | if (do_show_weight) { | ||||
| geom = DRW_cache_mesh_surface_weights_get(ob); | geom = DRW_cache_mesh_surface_weights_get(ob); | ||||
| DRW_shgroup_call(g_data->fweights_shgrp, geom, ob); | DRW_shgroup_call_no_cull(g_data->fweights_shgrp, geom, ob); | ||||
| } | } | ||||
| if (do_show_mesh_analysis && !XRAY_ACTIVE(v3d)) { | if (do_show_mesh_analysis && !XRAY_ACTIVE(v3d)) { | ||||
| Mesh *me = (Mesh *)ob->data; | Mesh *me = (Mesh *)ob->data; | ||||
| BMEditMesh *embm = me->edit_mesh; | BMEditMesh *embm = me->edit_mesh; | ||||
| const bool is_original = embm->mesh_eval_final && | const bool is_original = embm->mesh_eval_final && | ||||
| (embm->mesh_eval_final->runtime.is_original == true); | (embm->mesh_eval_final->runtime.is_original == true); | ||||
| if (is_original) { | if (is_original) { | ||||
| geom = DRW_cache_mesh_surface_mesh_analysis_get(ob); | geom = DRW_cache_mesh_surface_mesh_analysis_get(ob); | ||||
| if (geom) { | if (geom) { | ||||
| DRW_shgroup_call(g_data->mesh_analysis_shgrp, geom, ob); | DRW_shgroup_call_no_cull(g_data->mesh_analysis_shgrp, geom, ob); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (do_occlude_wire || do_in_front) { | if (do_occlude_wire || do_in_front) { | ||||
| geom = DRW_cache_mesh_surface_get(ob); | geom = DRW_cache_mesh_surface_get(ob); | ||||
| DRW_shgroup_call(do_in_front ? g_data->depth_shgrp_hidden_wire_in_front : | DRW_shgroup_call_no_cull(do_in_front ? g_data->depth_shgrp_hidden_wire_in_front : | ||||
| g_data->depth_shgrp_hidden_wire, | g_data->depth_shgrp_hidden_wire, | ||||
| geom, | geom, | ||||
| ob); | ob); | ||||
| } | } | ||||
| if (vnormals_do) { | if (vnormals_do) { | ||||
| geom = DRW_mesh_batch_cache_get_edit_vertices(ob->data); | geom = DRW_mesh_batch_cache_get_edit_vertices(ob->data); | ||||
| DRW_shgroup_call(g_data->vnormals_shgrp, geom, ob); | DRW_shgroup_call_no_cull(g_data->vnormals_shgrp, geom, ob); | ||||
| } | } | ||||
| if (lnormals_do) { | if (lnormals_do) { | ||||
| geom = DRW_mesh_batch_cache_get_edit_lnors(ob->data); | geom = DRW_mesh_batch_cache_get_edit_lnors(ob->data); | ||||
| DRW_shgroup_call(g_data->lnormals_shgrp, geom, ob); | DRW_shgroup_call_no_cull(g_data->lnormals_shgrp, geom, ob); | ||||
| } | } | ||||
| if (fnormals_do) { | if (fnormals_do) { | ||||
| geom = DRW_mesh_batch_cache_get_edit_facedots(ob->data); | geom = DRW_mesh_batch_cache_get_edit_facedots(ob->data); | ||||
| DRW_shgroup_call(g_data->fnormals_shgrp, geom, ob); | DRW_shgroup_call_no_cull(g_data->fnormals_shgrp, geom, ob); | ||||
| } | } | ||||
| if (g_data->do_zbufclip) { | if (g_data->do_zbufclip) { | ||||
| edit_mesh_add_ob_to_pass(scene, | edit_mesh_add_ob_to_pass(scene, | ||||
| ob, | ob, | ||||
| g_data->edit_shgrps.verts, | g_data->edit_shgrps.verts, | ||||
| g_data->edit_shgrps.edges, | g_data->edit_shgrps.edges, | ||||
| g_data->facefill_occluded_shgrp, | g_data->facefill_occluded_shgrp, | ||||
| ▲ Show 20 Lines • Show All 142 Lines • Show Last 20 Lines | |||||