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-23 12:44:08 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-23 12:50:43 +0300
commit6555e177e9cccdde66c373ce3e382edf74eb46cc (patch)
treeed51249c660bab2eaa4f6a86f486b5af7c571e1d /source/blender/editors/space_view3d
parent9ff73e61b1a3c825fec5c2daffbe017c6cd7377d (diff)
3D View: add back clipping draw code (disabled)
Disabled for now because of draw-order issues. Also move clipping test out of view3d_draw_legacy.c
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c76
-rw-r--r--source/blender/editors/space_view3d/view3d_draw_legacy.c18
2 files changed, 76 insertions, 18 deletions
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 9d6eb6f76e7..8d259986114 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -1731,3 +1731,79 @@ ImBuf *ED_view3d_draw_offscreen_imbuf_simple(
}
/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Viewport Clipping
+ * \{ */
+
+void ED_view3d_draw_clipping(const RegionView3D *rv3d)
+{
+ const BoundBox *bb = rv3d->clipbb;
+ if (bb == NULL) {
+ return;
+ }
+
+ const uint clipping_index[6][4] = {
+ {0, 1, 2, 3},
+ {0, 4, 5, 1},
+ {4, 7, 6, 5},
+ {7, 3, 2, 6},
+ {1, 5, 6, 2},
+ {7, 4, 0, 3}
+ };
+
+ GPUVertBuf *vbo;
+ GPUIndexBuf *el;
+ GPUIndexBufBuilder elb = {0};
+
+ /* Elements */
+ GPU_indexbuf_init(&elb, GPU_PRIM_TRIS, ARRAY_SIZE(clipping_index) * 2, ARRAY_SIZE(bb->vec));
+ for (int i = 0; i < ARRAY_SIZE(clipping_index); i++) {
+ const uint *idx = clipping_index[i];
+ GPU_indexbuf_add_tri_verts(&elb, idx[0], idx[1], idx[2]);
+ GPU_indexbuf_add_tri_verts(&elb, idx[0], idx[2], idx[3]);
+ }
+ el = GPU_indexbuf_build(&elb);
+
+ GPUVertFormat format = {0};
+ uint pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+
+ vbo = GPU_vertbuf_create_with_format(&format);
+ GPU_vertbuf_data_alloc(vbo, ARRAY_SIZE(bb->vec));
+ GPU_vertbuf_attr_fill(vbo, pos_id, bb->vec);
+
+ GPUBatch *batch = GPU_batch_create_ex(GPU_PRIM_TRIS, vbo, el, GPU_BATCH_OWNS_VBO | GPU_BATCH_OWNS_INDEX);
+ GPU_batch_program_set_builtin(batch, GPU_SHADER_3D_UNIFORM_COLOR);
+
+ float color[4];
+ UI_GetThemeColor4fv(TH_V3D_CLIPPING_BORDER, color);
+
+ GPU_batch_uniform_4fv(batch, "color", color);
+
+ /* Draw. */
+ glEnable(GL_BLEND);
+ GPU_batch_draw(batch);
+ GPU_batch_discard(batch);
+ glDisable(GL_BLEND);
+}
+
+static bool view3d_clipping_test(const float co[3], const float clip[6][4])
+{
+ if (plane_point_side_v3(clip[0], co) > 0.0f)
+ if (plane_point_side_v3(clip[1], co) > 0.0f)
+ if (plane_point_side_v3(clip[2], co) > 0.0f)
+ if (plane_point_side_v3(clip[3], co) > 0.0f)
+ return false;
+
+ return true;
+}
+
+/* for 'local' ED_view3d_clipping_local must run first
+ * then all comparisons can be done in localspace */
+bool ED_view3d_clipping_test(const RegionView3D *rv3d, const float co[3], const bool is_local)
+{
+ return view3d_clipping_test(co, is_local ? rv3d->clip_local : rv3d->clip);
+}
+
+
+/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c
index 734e4471a19..187413e6e62 100644
--- a/source/blender/editors/space_view3d/view3d_draw_legacy.c
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@ -140,24 +140,6 @@ void ED_view3d_clipping_enable(void)
}
}
-static bool view3d_clipping_test(const float co[3], const float clip[6][4])
-{
- if (plane_point_side_v3(clip[0], co) > 0.0f)
- if (plane_point_side_v3(clip[1], co) > 0.0f)
- if (plane_point_side_v3(clip[2], co) > 0.0f)
- if (plane_point_side_v3(clip[3], co) > 0.0f)
- return false;
-
- return true;
-}
-
-/* for 'local' ED_view3d_clipping_local must run first
- * then all comparisons can be done in localspace */
-bool ED_view3d_clipping_test(const RegionView3D *rv3d, const float co[3], const bool is_local)
-{
- return view3d_clipping_test(co, is_local ? rv3d->clip_local : rv3d->clip);
-}
-
/* *********************** backdraw for selection *************** */
static void backdrawview3d(