Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-01-21 02:43:01 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-21 02:43:01 +0300
commit7467049055a7dc75d144d82d6266d0498e9e423a (patch)
treecd864775aa44125e40c4a6ccb78b17bf4ebbbb0f /source/blender/draw/engines/workbench/workbench_data.c
parent0d8d26696f48b710ee2a033f04a76c7826641f05 (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.c19
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);