Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/modes/paint_vertex_mode.c
| Show First 20 Lines • Show All 220 Lines • ▼ Show 20 Lines | static void PAINT_VERTEX_cache_init(void *vedata) | ||||
| /* Vertex color pass */ | /* Vertex color pass */ | ||||
| { | { | ||||
| DRWPass *pass = DRW_pass_create("Vert Color Pass", draw_state); | DRWPass *pass = DRW_pass_create("Vert Color Pass", draw_state); | ||||
| GPUShader *shader = use_alpha_blending ? | GPUShader *shader = use_alpha_blending ? | ||||
| sh_data->by_mode[VERTEX_MODE].color_face_alpha_blending : | sh_data->by_mode[VERTEX_MODE].color_face_alpha_blending : | ||||
| sh_data->by_mode[VERTEX_MODE].color_face_mul_blending; | sh_data->by_mode[VERTEX_MODE].color_face_mul_blending; | ||||
| DRWShadingGroup *shgrp = DRW_shgroup_create(shader, pass); | DRWShadingGroup *shgrp = DRW_shgroup_create(shader, pass); | ||||
| DRW_shgroup_uniform_float(shgrp, "opacity", &v3d->overlay.vertex_paint_mode_opacity, 1); | DRW_shgroup_uniform_float(shgrp, "opacity", &v3d->overlay.vertex_paint_mode_opacity, 1); | ||||
| if (rv3d->rflag & RV3D_CLIPPING) { | if (RV3D_CLIPPING_ENABLED(v3d, rv3d)) { | ||||
| DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | ||||
| } | } | ||||
| psl->by_mode[VERTEX_MODE].color_faces = pass; | psl->by_mode[VERTEX_MODE].color_faces = pass; | ||||
| stl->g_data->by_mode[VERTEX_MODE].color_shgrp = shgrp; | stl->g_data->by_mode[VERTEX_MODE].color_shgrp = shgrp; | ||||
| } | } | ||||
| /* Weight color pass */ | /* Weight color pass */ | ||||
| { | { | ||||
| DRWPass *pass = DRW_pass_create("Weight Pass", draw_state); | DRWPass *pass = DRW_pass_create("Weight Pass", draw_state); | ||||
| GPUShader *shader = use_alpha_blending ? | GPUShader *shader = use_alpha_blending ? | ||||
| sh_data->by_mode[WEIGHT_MODE].color_face_alpha_blending : | sh_data->by_mode[WEIGHT_MODE].color_face_alpha_blending : | ||||
| sh_data->by_mode[WEIGHT_MODE].color_face_mul_blending; | sh_data->by_mode[WEIGHT_MODE].color_face_mul_blending; | ||||
| DRWShadingGroup *shgrp = DRW_shgroup_create(shader, pass); | DRWShadingGroup *shgrp = DRW_shgroup_create(shader, pass); | ||||
| DRW_shgroup_uniform_bool_copy( | DRW_shgroup_uniform_bool_copy( | ||||
| shgrp, "drawContours", (v3d->overlay.wpaint_flag & V3D_OVERLAY_WPAINT_CONTOURS) != 0); | shgrp, "drawContours", (v3d->overlay.wpaint_flag & V3D_OVERLAY_WPAINT_CONTOURS) != 0); | ||||
| DRW_shgroup_uniform_float(shgrp, "opacity", &v3d->overlay.weight_paint_mode_opacity, 1); | DRW_shgroup_uniform_float(shgrp, "opacity", &v3d->overlay.weight_paint_mode_opacity, 1); | ||||
| DRW_shgroup_uniform_texture(shgrp, "colorramp", G_draw.weight_ramp); | DRW_shgroup_uniform_texture(shgrp, "colorramp", G_draw.weight_ramp); | ||||
| DRW_shgroup_uniform_block(shgrp, "globalsBlock", G_draw.block_ubo); | DRW_shgroup_uniform_block(shgrp, "globalsBlock", G_draw.block_ubo); | ||||
| if (rv3d->rflag & RV3D_CLIPPING) { | if (RV3D_CLIPPING_ENABLED(v3d, rv3d)) { | ||||
| DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | ||||
| } | } | ||||
| psl->by_mode[WEIGHT_MODE].color_faces = pass; | psl->by_mode[WEIGHT_MODE].color_faces = pass; | ||||
| stl->g_data->by_mode[WEIGHT_MODE].color_shgrp = shgrp; | stl->g_data->by_mode[WEIGHT_MODE].color_shgrp = shgrp; | ||||
| } | } | ||||
| { | { | ||||
| DRWPass *pass = DRW_pass_create("Wire Pass", | DRWPass *pass = DRW_pass_create("Wire Pass", | ||||
| (DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA | | (DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA | | ||||
| DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL)); | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL)); | ||||
| for (int i = 0; i < MODE_LEN; i++) { | for (int i = 0; i < MODE_LEN; i++) { | ||||
| DRWShadingGroup *shgrp = DRW_shgroup_create(sh_data->by_mode[i].wire_overlay, pass); | DRWShadingGroup *shgrp = DRW_shgroup_create(sh_data->by_mode[i].wire_overlay, pass); | ||||
| DRW_shgroup_uniform_block(shgrp, "globalsBlock", G_draw.block_ubo); | DRW_shgroup_uniform_block(shgrp, "globalsBlock", G_draw.block_ubo); | ||||
| if (rv3d->rflag & RV3D_CLIPPING) { | if (RV3D_CLIPPING_ENABLED(v3d, rv3d)) { | ||||
| DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | ||||
| } | } | ||||
| stl->g_data->by_mode[i].lwire_shgrp = shgrp; | stl->g_data->by_mode[i].lwire_shgrp = shgrp; | ||||
| } | } | ||||
| psl->wire_overlay = pass; | psl->wire_overlay = pass; | ||||
| } | } | ||||
| { | { | ||||
| DRWPass *pass = DRW_pass_create("Wire Mask Pass", | DRWPass *pass = DRW_pass_create("Wire Mask Pass", | ||||
| DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | | DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | | ||||
| DRW_STATE_DEPTH_LESS_EQUAL); | DRW_STATE_DEPTH_LESS_EQUAL); | ||||
| for (int i = 0; i < MODE_LEN; i++) { | for (int i = 0; i < MODE_LEN; i++) { | ||||
| DRWShadingGroup *shgrp = DRW_shgroup_create(sh_data->by_mode[i].wire_select_overlay, pass); | DRWShadingGroup *shgrp = DRW_shgroup_create(sh_data->by_mode[i].wire_select_overlay, pass); | ||||
| DRW_shgroup_uniform_block(shgrp, "globalsBlock", G_draw.block_ubo); | DRW_shgroup_uniform_block(shgrp, "globalsBlock", G_draw.block_ubo); | ||||
| if (rv3d->rflag & RV3D_CLIPPING) { | if (RV3D_CLIPPING_ENABLED(v3d, rv3d)) { | ||||
| DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | ||||
| } | } | ||||
| stl->g_data->by_mode[i].lwire_select_shgrp = shgrp; | stl->g_data->by_mode[i].lwire_select_shgrp = shgrp; | ||||
| } | } | ||||
| psl->wire_select_overlay = pass; | psl->wire_select_overlay = pass; | ||||
| } | } | ||||
| { | { | ||||
| static const float col[4] = {1.0f, 1.0f, 1.0f, 0.2f}; | static const float col[4] = {1.0f, 1.0f, 1.0f, 0.2f}; | ||||
| DRWPass *pass = DRW_pass_create("Face Mask Pass", | DRWPass *pass = DRW_pass_create("Face Mask Pass", | ||||
| DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | | DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | | ||||
| DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND_ALPHA); | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND_ALPHA); | ||||
| DRWShadingGroup *shgrp = DRW_shgroup_create(sh_data->face_select_overlay, pass); | DRWShadingGroup *shgrp = DRW_shgroup_create(sh_data->face_select_overlay, pass); | ||||
| DRW_shgroup_uniform_vec4(shgrp, "color", col, 1); | DRW_shgroup_uniform_vec4(shgrp, "color", col, 1); | ||||
| if (rv3d->rflag & RV3D_CLIPPING) { | if (RV3D_CLIPPING_ENABLED(v3d, rv3d)) { | ||||
| DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | ||||
| } | } | ||||
| psl->face_select_overlay = pass; | psl->face_select_overlay = pass; | ||||
| stl->g_data->face_select_shgrp = shgrp; | stl->g_data->face_select_shgrp = shgrp; | ||||
| } | } | ||||
| { | { | ||||
| DRWPass *pass = DRW_pass_create("Vert Mask Pass", | DRWPass *pass = DRW_pass_create("Vert Mask Pass", | ||||
| DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | | DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | | ||||
| DRW_STATE_DEPTH_LESS_EQUAL); | DRW_STATE_DEPTH_LESS_EQUAL); | ||||
| DRWShadingGroup *shgrp = DRW_shgroup_create(sh_data->vert_select_overlay, pass); | DRWShadingGroup *shgrp = DRW_shgroup_create(sh_data->vert_select_overlay, pass); | ||||
| DRW_shgroup_uniform_block(shgrp, "globalsBlock", G_draw.block_ubo); | DRW_shgroup_uniform_block(shgrp, "globalsBlock", G_draw.block_ubo); | ||||
| if (rv3d->rflag & RV3D_CLIPPING) { | if (RV3D_CLIPPING_ENABLED(v3d, rv3d)) { | ||||
| DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES); | ||||
| } | } | ||||
| psl->vert_select_overlay = pass; | psl->vert_select_overlay = pass; | ||||
| stl->g_data->vert_select_shgrp = shgrp; | stl->g_data->vert_select_shgrp = shgrp; | ||||
| } | } | ||||
| } | } | ||||
| static void PAINT_VERTEX_cache_populate(void *vedata, Object *ob) | static void PAINT_VERTEX_cache_populate(void *vedata, Object *ob) | ||||
| ▲ Show 20 Lines • Show All 95 Lines • Show Last 20 Lines | |||||