diff options
author | mano-wii <germano.costa@ig.com.br> | 2019-04-04 02:05:59 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2019-04-04 02:05:59 +0300 |
commit | 3464a534770b551c60f43e422024712d0947cd81 (patch) | |
tree | 302a2a2c7c34d7050f068386fc1698d8db8e6f83 /source/blender/draw | |
parent | ef91df608a39032075c6db3f5e623d4f1867d573 (diff) |
Fix T63255: Crash when circle select performs selection outside the viewport's bounds.
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 66b5ec22af9..e31c2f5cbbd 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -2561,13 +2561,21 @@ void DRW_framebuffer_select_id_read(const rcti *rect, uint *r_buf) }; rcti rect_clamp = *rect; - BLI_rcti_isect(&r, rect, &rect_clamp); + if (BLI_rcti_isect(&r, &rect_clamp, &rect_clamp)) { + GPU_texture_read_rect( + g_select_buffer.texture_u32, + GPU_DATA_UNSIGNED_INT, &rect_clamp, r_buf); - GPU_texture_read_rect( - g_select_buffer.texture_u32, GPU_DATA_UNSIGNED_INT, &rect_clamp, 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); - if (!BLI_rcti_compare(rect, &rect_clamp)) { - GPU_select_buffer_stride_realign(rect, &rect_clamp, r_buf); + memset(r_buf, 0, buf_size); } } |