Blender
V3.3
|
#include "MEM_guardedalloc.h"
#include "BLI_array_utils.h"
#include "BLI_bitmap.h"
#include "BLI_bitmap_draw_2d.h"
#include "BLI_rect.h"
#include "DNA_screen_types.h"
#include "GPU_select.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "DRW_engine.h"
#include "DRW_select_buffer.h"
#include "draw_manager.h"
#include "../engines/select/select_engine.h"
Go to the source code of this file.
Classes | |
struct | PolyMaskData |
struct | SelectReadData |
Functions | |
Buffer of select ID's | |
uint * | DRW_select_buffer_read (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const rcti *rect, uint *r_buf_len) |
Select Bitmap from ID's | |
Given a buffer of select ID's, fill in a booleans (true/false) per index. BLI_bitmap is used for memory efficiency. | |
uint * | DRW_select_buffer_bitmap_from_rect (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const rcti *rect, uint *r_bitmap_len) |
uint * | DRW_select_buffer_bitmap_from_circle (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const int center[2], const int radius, uint *r_bitmap_len) |
static void | drw_select_mask_px_cb (int x, int x_end, int y, void *user_data) |
uint * | DRW_select_buffer_bitmap_from_poly (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const int poly[][2], const int poly_len, const rcti *rect, uint *r_bitmap_len) |
Find Single Select ID's | |
Given a buffer of select ID's, find the a single select id. | |
uint | DRW_select_buffer_sample_point (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const int center[2]) |
static bool | select_buffer_test_fn (const void *__restrict value, void *__restrict userdata) |
uint | DRW_select_buffer_find_nearest_to_point (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const int center[2], const uint id_min, const uint id_max, uint *dist) |
Object Utils | |
bool | DRW_select_buffer_elem_get (const uint sel_id, uint *r_elem, uint *r_base_index, char *r_elem_type) |
uint | DRW_select_buffer_context_offset_for_object_elem (Depsgraph *depsgraph, Object *object, char elem_type) |
Context | |
void | DRW_select_buffer_context_create (Base **bases, const uint bases_len, short select_mode) |
Utilities to read id buffer created in select_engine.
Definition in file draw_select_buffer.c.
uint* DRW_select_buffer_bitmap_from_circle | ( | struct Depsgraph * | depsgraph, |
struct ARegion * | region, | ||
struct View3D * | v3d, | ||
const int | center[2], | ||
int | radius, | ||
uint * | r_bitmap_len | ||
) |
center | Circle center. |
radius | Circle radius. |
r_bitmap_len | Number of indices in the selection id buffer. |
Definition at line 148 of file draw_select_buffer.c.
References BLI_assert, BLI_BITMAP_ENABLE, BLI_BITMAP_NEW, center, depsgraph, DRW_select_buffer_read(), DRW_select_engine_context_get(), SELECTID_Context::index_drawn_len, MEM_freeN, NULL, and rcti::xmin.
Referenced by mesh_circle_select(), paint_facesel_circle_select(), and paint_vertsel_circle_select().
uint* DRW_select_buffer_bitmap_from_poly | ( | struct Depsgraph * | depsgraph, |
struct ARegion * | region, | ||
struct View3D * | v3d, | ||
const int | poly[][2], | ||
const int | poly_len, | ||
const rcti * | rect, | ||
uint * | r_bitmap_len | ||
) |
Definition at line 212 of file draw_select_buffer.c.
References BLI_assert, BLI_bitmap_draw_2d_poly_v2i_n(), BLI_BITMAP_ENABLE, BLI_BITMAP_NEW, BLI_BITMAP_TEST, depsgraph, DRW_select_buffer_read(), DRW_select_engine_context_get(), drw_select_mask_px_cb(), SELECTID_Context::index_drawn_len, MEM_freeN, NULL, PolyMaskData::px, PolyMaskData::width, rcti::xmax, rcti::xmin, rcti::ymax, and rcti::ymin.
uint* DRW_select_buffer_bitmap_from_rect | ( | struct Depsgraph * | depsgraph, |
struct ARegion * | region, | ||
struct View3D * | v3d, | ||
const rcti * | rect, | ||
uint * | r_bitmap_len | ||
) |
Definition at line 109 of file draw_select_buffer.c.
References BLI_assert, BLI_BITMAP_ENABLE, BLI_BITMAP_NEW, depsgraph, DRW_select_buffer_read(), DRW_select_engine_context_get(), SELECTID_Context::index_drawn_len, MEM_freeN, NULL, rcti::xmax, and rcti::ymax.
Definition at line 460 of file draw_select_buffer.c.
References DRW_select_engine_context_get(), SELECTID_Context::index_offsets, MEM_reallocN, Base::object, SELECTID_Context::objects, SELECTID_Context::objects_drawn, SELECTID_Context::objects_len, SELECTID_Context::persmat, Object::runtime, Object_Runtime::select_id, and SELECTID_Context::select_mode.
Referenced by EDBM_edge_find_nearest_ex(), EDBM_face_find_nearest_ex(), EDBM_vert_find_nearest_ex(), editselect_buf_cache_init(), and validate_object_select_id().
uint DRW_select_buffer_context_offset_for_object_elem | ( | Depsgraph * | depsgraph, |
Object * | object, | ||
char | elem_type | ||
) |
Definition at line 424 of file draw_select_buffer.c.
References BLI_assert, DEG_get_evaluated_object(), depsgraph, draw_engine_select_type, SELECTID_ObjectData::drawn_index, DRW_drawdata_get(), DRW_select_engine_context_get(), ObjectOffsets::edge_start, ObjectOffsets::face_start, Object::id, SELECTID_Context::index_offsets, SELECTID_ObjectData::is_drawn, SCE_SELECT_EDGE, SCE_SELECT_FACE, SCE_SELECT_VERTEX, and ObjectOffsets::vert_start.
Referenced by do_lasso_select_mesh(), do_mesh_box_select(), edbm_backbuf_check_and_select_edges(), edbm_backbuf_check_and_select_faces(), and edbm_backbuf_check_and_select_verts().
bool DRW_select_buffer_elem_get | ( | const uint | sel_id, |
uint * | r_elem, | ||
uint * | r_base_index, | ||
char * | r_elem_type | ||
) |
Definition at line 375 of file draw_select_buffer.c.
References DEG_get_original_object(), DRW_select_engine_context_get(), ObjectOffsets::edge, ObjectOffsets::edge_start, ObjectOffsets::face, ObjectOffsets::face_start, SELECTID_Context::index_offsets, SELECTID_Context::objects_drawn, SELECTID_Context::objects_drawn_len, Object::runtime, SCE_SELECT_EDGE, SCE_SELECT_FACE, SCE_SELECT_VERTEX, Object_Runtime::select_id, ObjectOffsets::vert, and ObjectOffsets::vert_start.
Referenced by edbm_select_id_bm_elem_get().
uint DRW_select_buffer_find_nearest_to_point | ( | struct Depsgraph * | depsgraph, |
struct ARegion * | region, | ||
struct View3D * | v3d, | ||
const int | center[2], | ||
uint | id_min, | ||
uint | id_max, | ||
uint * | dist | ||
) |
Find the selection id closest to center.
dist | Use to initialize the distance, when found, this value is set to the distance of the selection that's returned. |
Definition at line 325 of file draw_select_buffer.c.
References blender::math::abs(), BLI_array_iter_spiral_square, BLI_rcti_init_pt_radius(), BLI_rcti_size_x(), center, data, depsgraph, DRW_select_buffer_read(), height, SelectReadData::id_max, SelectReadData::id_min, MEM_freeN, NULL, offset, select_buffer_test_fn(), width, rcti::xmax, and rcti::ymax.
Referenced by ED_mesh_pick_face(), ED_mesh_pick_vert(), EDBM_edge_find_nearest_ex(), EDBM_face_find_nearest_ex(), and EDBM_vert_find_nearest_ex().
uint* DRW_select_buffer_read | ( | struct Depsgraph * | depsgraph, |
struct ARegion * | region, | ||
struct View3D * | v3d, | ||
const rcti * | rect, | ||
uint * | r_buf_len | ||
) |
Main function to read a block of pixels from the select frame buffer.
Definition at line 35 of file draw_select_buffer.c.
References BLI_assert, BLI_rcti_compare(), BLI_rcti_isect(), BLI_rcti_size_x(), BLI_rcti_size_y(), depsgraph, DRW_draw_select_id(), DRW_engine_select_framebuffer_get(), DRW_engine_select_texture_get(), DRW_opengl_context_disable(), DRW_opengl_context_enable(), DRW_select_engine_context_get(), GPU_DATA_UINT, GPU_framebuffer_bind(), GPU_framebuffer_read_color(), GPU_framebuffer_restore(), GPU_select_buffer_stride_realign(), GPU_texture_height(), GPU_texture_width(), SELECTID_Context::index_drawn_len, MEM_mallocN, NULL, r, ARegion::winx, ARegion::winy, rcti::xmin, and rcti::ymin.
Referenced by DRW_select_buffer_bitmap_from_circle(), DRW_select_buffer_bitmap_from_poly(), DRW_select_buffer_bitmap_from_rect(), DRW_select_buffer_find_nearest_to_point(), and DRW_select_buffer_sample_point().
uint DRW_select_buffer_sample_point | ( | struct Depsgraph * | depsgraph, |
struct ARegion * | region, | ||
struct View3D * | v3d, | ||
const int | center[2] | ||
) |
Samples a single pixel.
Definition at line 280 of file draw_select_buffer.c.
References BLI_assert, center, depsgraph, DRW_select_buffer_read(), MEM_freeN, ret, and rcti::xmin.
Referenced by ED_mesh_pick_face(), ED_mesh_pick_vert(), EDBM_face_find_nearest_ex(), and imapaint_pick_face().
Definition at line 201 of file draw_select_buffer.c.
References BLI_BITMAP_ENABLE, data, PolyMaskData::px, user_data, x, and y.
Referenced by DRW_select_buffer_bitmap_from_poly().
|
static |
Definition at line 312 of file draw_select_buffer.c.
References data, and SelectReadData::id_max.
Referenced by DRW_select_buffer_find_nearest_to_point().