[Bf-blender-cvs] [9d7d34c12af] master: Select utils refactor: remove lagacy `ED_view3d_select_id_read_rect`
mano-wii
noreply at git.blender.org
Wed Aug 7 17:47:28 CEST 2019
Commit: 9d7d34c12af5525d969a8806bc059dbb7a499d0f
Author: mano-wii
Date: Mon Aug 5 18:02:43 2019 -0300
Branches: master
https://developer.blender.org/rB9d7d34c12af5525d969a8806bc059dbb7a499d0f
Select utils refactor: remove lagacy `ED_view3d_select_id_read_rect`
`ED_view3d_select_id_read_rect` serves only as a bridge to `DRW_framebuffer_select_id_read`.
Keeping these codes similar only increases the complexity of some functions.
Reviewers: campbellbarton
Differential Revision: https://developer.blender.org/D5415
===================================================================
M source/blender/draw/DRW_engine.h
M source/blender/draw/engines/select/select_engine.c
M source/blender/editors/include/ED_select_buffer_utils.h
M source/blender/editors/include/ED_view3d.h
M source/blender/editors/space_view3d/view3d_draw_legacy.c
M source/blender/editors/space_view3d/view3d_select.c
M source/blender/editors/util/CMakeLists.txt
M source/blender/editors/util/select_buffer_utils.c
===================================================================
diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index be04452f079..87a96740c56 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -181,7 +181,7 @@ void DRW_select_context_create(struct Base **bases, const uint bases_len, short
bool DRW_select_elem_get(const uint sel_id, uint *r_elem, uint *r_base_index, char *r_elem_type);
uint DRW_select_context_offset_for_object_elem(const uint base_index, char elem_type);
uint DRW_select_context_elem_len(void);
-void DRW_framebuffer_select_id_read(const struct rcti *rect, uint *r_buf);
+uint *DRW_framebuffer_select_id_read(const struct rcti *rect, uint *r_buf_len);
void DRW_draw_select_id_object(struct Depsgraph *depsgraph,
struct ViewLayer *view_layer,
struct ARegion *ar,
diff --git a/source/blender/draw/engines/select/select_engine.c b/source/blender/draw/engines/select/select_engine.c
index 1f00a116499..8bce61b3031 100644
--- a/source/blender/draw/engines/select/select_engine.c
+++ b/source/blender/draw/engines/select/select_engine.c
@@ -344,7 +344,7 @@ uint DRW_select_context_elem_len(void)
}
/* Read a block of pixels from the select frame buffer. */
-void DRW_framebuffer_select_id_read(const rcti *rect, uint *r_buf)
+uint *DRW_framebuffer_select_id_read(const rcti *rect, uint *r_buf_len)
{
/* clamp rect by texture */
rcti r = {
@@ -356,6 +356,9 @@ void DRW_framebuffer_select_id_read(const rcti *rect, uint *r_buf)
rcti rect_clamp = *rect;
if (BLI_rcti_isect(&r, &rect_clamp, &rect_clamp)) {
+ size_t buf_len = BLI_rcti_size_x(rect) * BLI_rcti_size_y(rect);
+ uint *r_buf = MEM_mallocN(buf_len * sizeof(*r_buf), __func__);
+
DRW_opengl_context_enable();
GPU_framebuffer_bind(e_data.framebuffer_select_id);
glReadBuffer(GL_COLOR_ATTACHMENT0);
@@ -373,12 +376,14 @@ void DRW_framebuffer_select_id_read(const rcti *rect, uint *r_buf)
if (!BLI_rcti_compare(rect, &rect_clamp)) {
GPU_select_buffer_stride_realign(rect, &rect_clamp, r_buf);
}
- }
- else {
- size_t buf_size = BLI_rcti_size_x(rect) * BLI_rcti_size_y(rect) * sizeof(*r_buf);
- memset(r_buf, 0, buf_size);
+ if (r_buf_len) {
+ *r_buf_len = buf_len;
+ }
+
+ return r_buf;
}
+ return NULL;
}
void DRW_select_context_create(Base **UNUSED(bases), const uint bases_len, short select_mode)
diff --git a/source/blender/editors/include/ED_select_buffer_utils.h b/source/blender/editors/include/ED_select_buffer_utils.h
index af745cee676..1b55de30d96 100644
--- a/source/blender/editors/include/ED_select_buffer_utils.h
+++ b/source/blender/editors/include/ED_select_buffer_utils.h
@@ -24,14 +24,14 @@
struct rcti;
/* Boolean array from selection ID's. */
-uint *ED_select_buffer_bitmap_from_rect(const uint bitmap_len, const struct rcti *rect);
-uint *ED_select_buffer_bitmap_from_circle(const uint bitmap_len,
- const int center[2],
- const int radius);
-uint *ED_select_buffer_bitmap_from_poly(const uint bitmap_len,
- const int poly[][2],
+uint *ED_select_buffer_bitmap_from_rect(const struct rcti *rect, uint *r_bitmap_len);
+uint *ED_select_buffer_bitmap_from_circle(const int center[2],
+ const int radius,
+ uint *r_bitmap_len);
+uint *ED_select_buffer_bitmap_from_poly(const int poly[][2],
const int poly_len,
- const rcti *rect);
+ const rcti *rect,
+ uint *r_bitmap_len);
/* Single result from selection ID's. */
uint ED_select_buffer_sample_point(const int center[2]);
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 1b8d65bbca4..67dfb184d19 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -465,8 +465,6 @@ int ED_view3d_backbuf_sample_size_clamp(struct ARegion *ar, const float dist);
void ED_view3d_select_id_validate(struct ViewContext *vc);
-uint *ED_view3d_select_id_read_rect(const struct rcti *rect, uint *r_buf_len);
-
bool ED_view3d_autodist(struct Depsgraph *depsgraph,
struct ARegion *ar,
struct View3D *v3d,
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c
index d16d90fae01..307d2a1a41b 100644
--- a/source/blender/editors/space_view3d/view3d_draw_legacy.c
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@ -238,22 +238,6 @@ void ED_view3d_backbuf_depth_validate(ViewContext *vc)
}
}
-uint *ED_view3d_select_id_read_rect(const rcti *clip, uint *r_buf_len)
-{
- uint width = BLI_rcti_size_x(clip);
- uint height = BLI_rcti_size_y(clip);
- uint buf_len = width * height;
- uint *buf = MEM_mallocN(buf_len * sizeof(*buf), __func__);
-
- DRW_framebuffer_select_id_read(clip, buf);
-
- if (r_buf_len) {
- *r_buf_len = buf_len;
- }
-
- return buf;
-}
-
/**
* allow for small values [0.5 - 2.5],
* and large values, FLT_MAX by clamping by the area size
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index b4bc2748de5..39684cb6986 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -828,8 +828,7 @@ static bool do_lasso_select_mesh(ViewContext *vc,
if (wm_userdata->data == NULL) {
editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, ts->selectmode);
esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_poly(buffer_len, mcords, moves, &rect);
+ esel->select_bitmap = ED_select_buffer_bitmap_from_poly(mcords, moves, &rect, NULL);
}
}
@@ -1140,7 +1139,7 @@ static bool do_lasso_select_paintvert(ViewContext *vc,
editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, SCE_SELECT_VERTEX);
esel = wm_userdata->data;
const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_poly(buffer_len, mcords, moves, &rect);
+ esel->select_bitmap = ED_select_buffer_bitmap_from_poly(mcords, moves, &rect, NULL);
}
}
@@ -1199,7 +1198,7 @@ static bool do_lasso_select_paintface(ViewContext *vc,
editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, SCE_SELECT_FACE);
esel = wm_userdata->data;
const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_poly(buffer_len, mcords, moves, &rect);
+ esel->select_bitmap = ED_select_buffer_bitmap_from_poly(mcords, moves, &rect, NULL);
}
if (esel->select_bitmap) {
@@ -2554,8 +2553,7 @@ static bool do_paintvert_box_select(ViewContext *vc,
if (wm_userdata->data == NULL) {
editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, SCE_SELECT_VERTEX);
esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_rect(buffer_len, rect);
+ esel->select_bitmap = ED_select_buffer_bitmap_from_rect(rect, NULL);
}
if (esel->select_bitmap != NULL) {
changed |= edbm_backbuf_check_and_select_verts_obmode(me, esel, sel_op);
@@ -2609,8 +2607,7 @@ static bool do_paintface_box_select(ViewContext *vc,
if (wm_userdata->data == NULL) {
editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, SCE_SELECT_FACE);
esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_rect(buffer_len, rect);
+ esel->select_bitmap = ED_select_buffer_bitmap_from_rect(rect, NULL);
}
if (esel->select_bitmap != NULL) {
changed |= edbm_backbuf_check_and_select_faces_obmode(me, esel, sel_op);
@@ -2807,8 +2804,7 @@ static bool do_mesh_box_select(ViewContext *vc,
if (wm_userdata->data == NULL) {
editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, ts->selectmode);
esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_rect(buffer_len, rect);
+ esel->select_bitmap = ED_select_buffer_bitmap_from_rect(rect, NULL);
}
}
@@ -3395,8 +3391,7 @@ static bool mesh_circle_select(ViewContext *vc,
struct EditSelectBuf_Cache *esel = wm_userdata->data;
if (use_zbuf) {
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_circle(buffer_len, mval, (int)(rad + 1.0f));
+ esel->select_bitmap = ED_select_buffer_bitmap_from_circle(mval, (int)(rad + 1.0f), NULL);
}
if (ts->selectmode & SCE_SELECT_VERTEX) {
@@ -3473,8 +3468,7 @@ static bool paint_facesel_circle_select(ViewContext *vc,
{
struct EditSelectBuf_Cache *esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_circle(buffer_len, mval, (int)(rad + 1.0f));
+ esel->select_bitmap = ED_select_buffer_bitmap_from_circle(mval, (int)(rad + 1.0f), NULL);
if (esel->select_bitmap != NULL) {
changed |= edbm_backbuf_check_and_select_faces_obmode(me, esel, sel_op);
MEM_freeN(esel->select_bitmap);
@@ -3528,8 +3522,7 @@ static bool paint_vertsel_circle_select(ViewContext *vc,
if (use_zbuf) {
struct EditSelectBuf_Cache *esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_circle(buffer_len, mval, (int)(rad + 1.0f));
+ esel->select_bitmap = ED_select_buffer_bitmap_from_circle(mval, (int)(rad + 1.0f), NULL);
if (esel->select_bitmap != NULL) {
changed |= edbm_backbuf_check_and_select_ve
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list