diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-01-21 02:43:01 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-01-21 02:43:01 +0300 |
commit | 7467049055a7dc75d144d82d6266d0498e9e423a (patch) | |
tree | cd864775aa44125e40c4a6ccb78b17bf4ebbbb0f /source/blender/draw/engines/workbench/workbench_data.c | |
parent | 0d8d26696f48b710ee2a033f04a76c7826641f05 (diff) |
3D View: add back initial clipping support
Use clipping for workbench solid mode drawing.
Other modes & shading support still needs to be added.
Diffstat (limited to 'source/blender/draw/engines/workbench/workbench_data.c')
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_data.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c index 937378dabb4..427ae4063f9 100644 --- a/source/blender/draw/engines/workbench/workbench_data.c +++ b/source/blender/draw/engines/workbench/workbench_data.c @@ -88,6 +88,18 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd) wd->curvature_ridge = 0.5f / max_ff(SQUARE(wpd->shading.curvature_ridge_factor), 1e-4f); wd->curvature_valley = 0.7f / max_ff(SQUARE(wpd->shading.curvature_valley_factor), 1e-4f); + { + RegionView3D *rv3d = draw_ctx->rv3d; + if (rv3d->rflag & RV3D_CLIPPING) { + memcpy(wpd->world_clip_planes, rv3d->clip, sizeof(float[6][4])); + wpd->world_clip_planes_len = (rv3d->viewlock & RV3D_BOXCLIP) ? 4 : 6; + DRW_state_clip_planes_count_set(6); + } + else { + wpd->world_clip_planes_len = 0; + } + } + wpd->world_ubo = DRW_uniformbuffer_create(sizeof(WORKBENCH_UBO_World), &wpd->world_data); /* Cavity settings */ @@ -172,6 +184,13 @@ void workbench_private_data_get_light_direction(WORKBENCH_PrivateData *wpd, floa DRW_uniformbuffer_update(wpd->world_ubo, wd); } +void workbench_private_draw_finish(WORKBENCH_PrivateData *wpd) +{ + if (wpd->world_clip_planes_len) { + DRW_state_clip_planes_reset(); + } +} + void workbench_private_data_free(WORKBENCH_PrivateData *wpd) { BLI_ghash_free(wpd->material_hash, NULL, MEM_freeN); |