Blender V4.3
draw_select_buffer.cc File Reference
#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.hh"
#include "DEG_depsgraph.hh"
#include "DEG_depsgraph_query.hh"
#include "DRW_engine.hh"
#include "DRW_select_buffer.hh"
#include "draw_manager_c.hh"
#include "../engines/select/select_engine.hh"

Go to the source code of this file.

Classes

struct  PolyMaskData
 
struct  SelectReadData
 

Functions

Buffer of select ID's
uintDRW_select_buffer_read (Depsgraph *depsgraph, ARegion *region, 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.

uintDRW_select_buffer_bitmap_from_rect (Depsgraph *depsgraph, ARegion *region, View3D *v3d, const rcti *rect, uint *r_bitmap_len)
 
uintDRW_select_buffer_bitmap_from_circle (Depsgraph *depsgraph, ARegion *region, 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)
 
uintDRW_select_buffer_bitmap_from_poly (Depsgraph *depsgraph, ARegion *region, View3D *v3d, const Span< int2 > poly, 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 (Depsgraph *depsgraph, ARegion *region, 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 (Depsgraph *depsgraph, ARegion *region, 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 (Depsgraph *depsgraph, const blender::Span< Base * > bases, short select_mode)
 

Detailed Description

Utilities to read id buffer created in select_engine.

Definition in file draw_select_buffer.cc.

Function Documentation

◆ DRW_select_buffer_bitmap_from_circle()

uint * DRW_select_buffer_bitmap_from_circle ( Depsgraph * depsgraph,
ARegion * region,
View3D * v3d,
const int center[2],
int radius,
uint * r_bitmap_len )
Parameters
centerCircle center.
radiusCircle radius.
r_bitmap_lenNumber of indices in the selection id buffer.
Returns
a BLI_bitmap the length of r_bitmap_len or NULL on failure.

Definition at line 169 of file draw_select_buffer.cc.

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(), and rcti::xmin.

Referenced by mesh_circle_select(), paint_facesel_circle_select(), and paint_vertsel_circle_select().

◆ DRW_select_buffer_bitmap_from_poly()

◆ DRW_select_buffer_bitmap_from_rect()

uint * DRW_select_buffer_bitmap_from_rect ( Depsgraph * depsgraph,
ARegion * region,
View3D * v3d,
const rcti * rect,
uint * r_bitmap_len )
Parameters
rectThe rectangle to sample indices from (min/max inclusive).
Returns
a BLI_bitmap the length of bitmap_len or NULL on failure.

Definition at line 133 of file draw_select_buffer.cc.

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(), rcti::xmax, and rcti::ymax.

Referenced by do_mesh_box_select(), do_paintface_box_select(), and do_paintvert_box_select().

◆ DRW_select_buffer_context_create()

◆ DRW_select_buffer_context_offset_for_object_elem()

◆ DRW_select_buffer_elem_get()

◆ DRW_select_buffer_find_nearest_to_point()

uint DRW_select_buffer_find_nearest_to_point ( Depsgraph * depsgraph,
ARegion * region,
View3D * v3d,
const int center[2],
uint id_min,
uint id_max,
uint * dist )

Find the selection id closest to center.

Parameters
distUse to initialize the distance, when found, this value is set to the distance of the selection that's returned.

Definition at line 342 of file draw_select_buffer.cc.

References abs(), BLI_array_iter_spiral_square, BLI_rcti_init_pt_radius(), BLI_rcti_size_x(), depsgraph, DRW_select_buffer_read(), MEM_freeN(), select_buffer_test_fn(), 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().

◆ DRW_select_buffer_read()

◆ DRW_select_buffer_sample_point()

uint DRW_select_buffer_sample_point ( Depsgraph * depsgraph,
ARegion * region,
View3D * v3d,
const int center[2] )

Samples a single pixel.

Definition at line 298 of file draw_select_buffer.cc.

References BLI_assert, depsgraph, DRW_select_buffer_read(), MEM_freeN(), ret, and rcti::xmin.

Referenced by ED_mesh_pick_face(), ED_mesh_pick_vert(), and EDBM_face_find_nearest_ex().

◆ drw_select_mask_px_cb()

static void drw_select_mask_px_cb ( int x,
int x_end,
int y,
void * user_data )
static

Definition at line 221 of file draw_select_buffer.cc.

References BLI_BITMAP_ENABLE, and PolyMaskData::px.

Referenced by DRW_select_buffer_bitmap_from_poly().

◆ select_buffer_test_fn()

static bool select_buffer_test_fn ( const void *__restrict value,
void *__restrict userdata )
static

Definition at line 329 of file draw_select_buffer.cc.

References SelectReadData::val_ptr.

Referenced by DRW_select_buffer_find_nearest_to_point().