Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/modes/edit_mesh_mode.c
| Show All 22 Lines | |||||
| #include "DRW_engine.h" | #include "DRW_engine.h" | ||||
| #include "DRW_render.h" | #include "DRW_render.h" | ||||
| #include "GPU_extensions.h" | #include "GPU_extensions.h" | ||||
| #include "DNA_mesh_types.h" | #include "DNA_mesh_types.h" | ||||
| #include "DNA_view3d_types.h" | #include "DNA_view3d_types.h" | ||||
| #include "BKE_mesh_runtime.h" | |||||
| #include "draw_common.h" | #include "draw_common.h" | ||||
| #include "draw_cache_impl.h" | #include "draw_cache_impl.h" | ||||
| #include "draw_mode_engines.h" | #include "draw_mode_engines.h" | ||||
| #include "edit_mesh_mode_intern.h" /* own include */ | #include "edit_mesh_mode_intern.h" /* own include */ | ||||
| #include "BKE_editmesh.h" | #include "BKE_editmesh.h" | ||||
| ▲ Show 20 Lines • Show All 83 Lines • ▼ Show 20 Lines | typedef struct EDIT_MESH_Shaders { | ||||
| GPUShader *overlay_mix; | GPUShader *overlay_mix; | ||||
| GPUShader *overlay_facefill; | GPUShader *overlay_facefill; | ||||
| GPUShader *normals_face; | GPUShader *normals_face; | ||||
| GPUShader *normals_loop; | GPUShader *normals_loop; | ||||
| GPUShader *normals; | GPUShader *normals; | ||||
| GPUShader *depth; | GPUShader *depth; | ||||
| /* Mesh analysis shader */ | // /* Mesh analysis shader */ | ||||
| GPUShader *mesh_analysis_face; | GPUShader *mesh_analysis_face; | ||||
| GPUShader *mesh_analysis_vertex; | GPUShader *mesh_analysis_vertex; | ||||
| } EDIT_MESH_Shaders; | } EDIT_MESH_Shaders; | ||||
| /* *********** STATIC *********** */ | /* *********** STATIC *********** */ | ||||
| static struct { | static struct { | ||||
| EDIT_MESH_Shaders sh_data[GPU_SHADER_CFG_LEN]; | EDIT_MESH_Shaders sh_data[GPU_SHADER_CFG_LEN]; | ||||
| ▲ Show 20 Lines • Show All 402 Lines • ▼ Show 20 Lines | float face_mod = (do_occlude_wire || !g_data->do_faces) ? 0.0f : 1.0f; | ||||
| DRW_shgroup_uniform_vec4(g_data->lnormals_shgrp, "color", G_draw.block.colorLNormal, 1); | DRW_shgroup_uniform_vec4(g_data->lnormals_shgrp, "color", G_draw.block.colorLNormal, 1); | ||||
| if (rv3d->rflag & RV3D_CLIPPING) { | if (rv3d->rflag & RV3D_CLIPPING) { | ||||
| DRW_shgroup_state_enable(g_data->lnormals_shgrp, DRW_STATE_CLIP_PLANES); | DRW_shgroup_state_enable(g_data->lnormals_shgrp, DRW_STATE_CLIP_PLANES); | ||||
| } | } | ||||
| } | } | ||||
| { | { | ||||
| /* Mesh Analysis Pass */ | /* Mesh Analysis Pass */ | ||||
| DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND_ALPHA; | DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_BLEND_ALPHA; | ||||
| psl->mesh_analysis_pass = DRW_pass_create("Mesh Analysis", state); | psl->mesh_analysis_pass = DRW_pass_create("Mesh Analysis", state); | ||||
| const bool is_vertex_color = scene->toolsettings->statvis.type == SCE_STATVIS_SHARP; | const bool is_vertex_color = scene->toolsettings->statvis.type == SCE_STATVIS_SHARP; | ||||
| g_data->mesh_analysis_shgrp = DRW_shgroup_create( | g_data->mesh_analysis_shgrp = DRW_shgroup_create( | ||||
| is_vertex_color ? sh_data->mesh_analysis_vertex : sh_data->mesh_analysis_face, | is_vertex_color ? sh_data->mesh_analysis_vertex : sh_data->mesh_analysis_face, | ||||
| psl->mesh_analysis_pass); | psl->mesh_analysis_pass); | ||||
| if (rv3d->rflag & RV3D_CLIPPING) { | if (rv3d->rflag & RV3D_CLIPPING) { | ||||
| DRW_shgroup_state_enable(g_data->mesh_analysis_shgrp, DRW_STATE_CLIP_PLANES); | DRW_shgroup_state_enable(g_data->mesh_analysis_shgrp, DRW_STATE_CLIP_PLANES); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 142 Lines • ▼ Show 20 Lines | if ((ob == draw_ctx->object_edit) || BKE_object_is_in_editmode(ob)) { | ||||
| 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(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_or_deformed = embm->mesh_eval_final && | ||||
| (embm->mesh_eval_final->runtime.is_original == true); | (embm->mesh_eval_final->runtime.is_original | | ||||
| if (is_original) { | embm->mesh_eval_final->runtime.deformed_only); | ||||
| if (is_original_or_deformed) { | |||||
| 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(g_data->mesh_analysis_shgrp, geom, ob); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (do_occlude_wire || do_in_front) { | if (do_occlude_wire || do_in_front) { | ||||
| ▲ Show 20 Lines • Show All 168 Lines • Show Last 20 Lines | |||||