Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/overlay/overlay_extra.c
| Show First 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | |||||
| #include "draw_common.h" | #include "draw_common.h" | ||||
| #include "draw_manager_text.h" | #include "draw_manager_text.h" | ||||
| void OVERLAY_extra_cache_init(OVERLAY_Data *vedata) | void OVERLAY_extra_cache_init(OVERLAY_Data *vedata) | ||||
| { | { | ||||
| OVERLAY_PassList *psl = vedata->psl; | OVERLAY_PassList *psl = vedata->psl; | ||||
| OVERLAY_TextureList *txl = vedata->txl; | OVERLAY_TextureList *txl = vedata->txl; | ||||
| OVERLAY_PrivateData *pd = vedata->stl->pd; | OVERLAY_PrivateData *pd = vedata->stl->pd; | ||||
| const bool is_select = DRW_state_is_select(); | |||||
| DRWState state_blend = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA; | DRWState state_blend = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA; | ||||
| DRW_PASS_CREATE(psl->extra_blend_ps, state_blend | pd->clipping_state); | DRW_PASS_CREATE(psl->extra_blend_ps, state_blend | pd->clipping_state); | ||||
| DRW_PASS_CREATE(psl->extra_centers_ps, state_blend | pd->clipping_state); | DRW_PASS_CREATE(psl->extra_centers_ps, state_blend | pd->clipping_state); | ||||
| { | { | ||||
| DRWState state = DRW_STATE_WRITE_COLOR; | DRWState state = DRW_STATE_WRITE_COLOR; | ||||
| Show All 27 Lines | |||||
| #define BUF_INSTANCE DRW_shgroup_call_buffer_instance | #define BUF_INSTANCE DRW_shgroup_call_buffer_instance | ||||
| #define BUF_POINT(grp, format) DRW_shgroup_call_buffer(grp, format, GPU_PRIM_POINTS) | #define BUF_POINT(grp, format) DRW_shgroup_call_buffer(grp, format, GPU_PRIM_POINTS) | ||||
| #define BUF_LINE(grp, format) DRW_shgroup_call_buffer(grp, format, GPU_PRIM_LINES) | #define BUF_LINE(grp, format) DRW_shgroup_call_buffer(grp, format, GPU_PRIM_LINES) | ||||
| /* Sorted by shader to avoid state changes during render. */ | /* Sorted by shader to avoid state changes during render. */ | ||||
| { | { | ||||
| format = formats->instance_extra; | format = formats->instance_extra; | ||||
| sh = OVERLAY_shader_extra(); | sh = OVERLAY_shader_extra(is_select); | ||||
| grp = DRW_shgroup_create(sh, extra_ps); | grp = DRW_shgroup_create(sh, extra_ps); | ||||
| DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo); | DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo); | ||||
| grp_sub = DRW_shgroup_create_sub(grp); | grp_sub = DRW_shgroup_create_sub(grp); | ||||
| cb->camera_distances = BUF_INSTANCE(grp_sub, format, DRW_cache_camera_distances_get()); | cb->camera_distances = BUF_INSTANCE(grp_sub, format, DRW_cache_camera_distances_get()); | ||||
| cb->camera_frame = BUF_INSTANCE(grp_sub, format, DRW_cache_camera_frame_get()); | cb->camera_frame = BUF_INSTANCE(grp_sub, format, DRW_cache_camera_frame_get()); | ||||
| cb->camera_tria[0] = BUF_INSTANCE(grp_sub, format, DRW_cache_camera_tria_wire_get()); | cb->camera_tria[0] = BUF_INSTANCE(grp_sub, format, DRW_cache_camera_tria_wire_get()); | ||||
| ▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | /* Sorted by shader to avoid state changes during render. */ | ||||
| grp = DRW_shgroup_create(sh, extra_ps); | grp = DRW_shgroup_create(sh, extra_ps); | ||||
| DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo); | DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo); | ||||
| DRW_shgroup_state_enable(grp, DRW_STATE_BLEND_ALPHA); | DRW_shgroup_state_enable(grp, DRW_STATE_BLEND_ALPHA); | ||||
| cb->groundline = BUF_INSTANCE(grp, format, DRW_cache_groundline_get()); | cb->groundline = BUF_INSTANCE(grp, format, DRW_cache_groundline_get()); | ||||
| } | } | ||||
| { | { | ||||
| sh = OVERLAY_shader_extra_wire(false); | sh = OVERLAY_shader_extra_wire(false, is_select); | ||||
| grp = DRW_shgroup_create(sh, extra_ps); | grp = DRW_shgroup_create(sh, extra_ps); | ||||
| DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo); | DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo); | ||||
| cb->extra_dashed_lines = BUF_LINE(grp, formats->pos_color); | cb->extra_dashed_lines = BUF_LINE(grp, formats->pos_color); | ||||
| cb->extra_lines = BUF_LINE(grp, formats->wire_extra); | cb->extra_lines = BUF_LINE(grp, formats->wire_extra); | ||||
| } | } | ||||
| { | { | ||||
| sh = OVERLAY_shader_extra_wire(true); | sh = OVERLAY_shader_extra_wire(true, is_select); | ||||
| cb->extra_wire = grp = DRW_shgroup_create(sh, extra_ps); | cb->extra_wire = grp = DRW_shgroup_create(sh, extra_ps); | ||||
| DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo); | DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo); | ||||
| } | } | ||||
| { | { | ||||
| sh = OVERLAY_shader_extra_loose_point(); | sh = OVERLAY_shader_extra_loose_point(); | ||||
| cb->extra_loose_points = grp = DRW_shgroup_create(sh, extra_ps); | cb->extra_loose_points = grp = DRW_shgroup_create(sh, extra_ps); | ||||
| ▲ Show 20 Lines • Show All 1,378 Lines • Show Last 20 Lines | |||||