Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/overlay/overlay_volume.cc
- This file was moved from source/blender/draw/engines/overlay/overlay_volume.c.
| /* SPDX-License-Identifier: GPL-2.0-or-later */ | /* SPDX-License-Identifier: GPL-2.0-or-later */ | ||||
| /** \file | /** \file | ||||
| * \ingroup draw_engine | * \ingroup draw_engine | ||||
| */ | */ | ||||
| #include "DNA_volume_types.h" | #include "DNA_volume_types.h" | ||||
| #include "DRW_render.h" | #include "DRW_render.h" | ||||
| #include "GPU_shader.h" | #include "GPU_shader.h" | ||||
| #include "overlay_private.h" | #include "overlay_private.hh" | ||||
| void OVERLAY_volume_cache_init(OVERLAY_Data *vedata) | void OVERLAY_volume_cache_init(OVERLAY_Data *vedata) | ||||
| { | { | ||||
| OVERLAY_PassList *psl = vedata->psl; | OVERLAY_PassList *psl = vedata->psl; | ||||
| OVERLAY_PrivateData *pd = vedata->stl->pd; | OVERLAY_PrivateData *pd = vedata->stl->pd; | ||||
| const bool is_select = DRW_state_is_select(); | const bool is_select = DRW_state_is_select(); | ||||
| if (is_select) { | if (is_select) { | ||||
| DRWState state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL; | DRWState state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL; | ||||
| DRW_PASS_CREATE(psl->volume_ps, state | pd->clipping_state); | DRW_PASS_CREATE(psl->volume_ps, state | pd->clipping_state); | ||||
| GPUShader *sh = OVERLAY_shader_depth_only(); | GPUShader *sh = OVERLAY_shader_depth_only(); | ||||
| DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->volume_ps); | DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->volume_ps); | ||||
| pd->volume_selection_surface_grp = grp; | pd->volume_selection_surface_grp = grp; | ||||
| } | } | ||||
| else { | else { | ||||
| psl->volume_ps = NULL; | psl->volume_ps = nullptr; | ||||
| pd->volume_selection_surface_grp = NULL; | pd->volume_selection_surface_grp = nullptr; | ||||
| } | } | ||||
| } | } | ||||
| void OVERLAY_volume_cache_populate(OVERLAY_Data *vedata, Object *ob) | void OVERLAY_volume_cache_populate(OVERLAY_Data *vedata, Object *ob) | ||||
| { | { | ||||
| OVERLAY_PrivateData *pd = vedata->stl->pd; | OVERLAY_PrivateData *pd = vedata->stl->pd; | ||||
| const bool is_select = DRW_state_is_select(); | const bool is_select = DRW_state_is_select(); | ||||
| if (is_select) { | if (is_select) { | ||||
| struct GPUBatch *geom = DRW_cache_volume_selection_surface_get(ob); | struct GPUBatch *geom = DRW_cache_volume_selection_surface_get(ob); | ||||
| if (geom != NULL) { | if (geom != nullptr) { | ||||
| DRW_shgroup_call(pd->volume_selection_surface_grp, geom, ob); | DRW_shgroup_call(pd->volume_selection_surface_grp, geom, ob); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| void OVERLAY_volume_draw(OVERLAY_Data *vedata) | void OVERLAY_volume_draw(OVERLAY_Data *vedata) | ||||
| { | { | ||||
| OVERLAY_PassList *psl = vedata->psl; | OVERLAY_PassList *psl = vedata->psl; | ||||
| if (psl->volume_ps) { | if (psl->volume_ps) { | ||||
| DRW_draw_pass(psl->volume_ps); | DRW_draw_pass(psl->volume_ps); | ||||
| } | } | ||||
| } | } | ||||