Blender  V3.3
Classes | Typedefs | Enumerations | Functions
GPU_select.h File Reference
#include "BLI_sys_types.h"

Go to the source code of this file.

Classes

struct  GPUSelectResult
 

Typedefs

typedef enum eGPUSelectMode eGPUSelectMode
 
typedef struct GPUSelectResult GPUSelectResult
 

Enumerations

enum  eGPUSelectMode {
  GPU_SELECT_ALL = 1 , GPU_SELECT_NEAREST_FIRST_PASS = 2 , GPU_SELECT_NEAREST_SECOND_PASS = 3 , GPU_SELECT_PICK_ALL = 4 ,
  GPU_SELECT_PICK_NEAREST = 5
}
 

Functions

void GPU_select_begin (GPUSelectResult *buffer, unsigned int buffer_len, const struct rcti *input, eGPUSelectMode mode, int oldhits)
 
bool GPU_select_load_id (unsigned int id)
 
void GPU_select_finalize (void)
 
unsigned int GPU_select_end (void)
 
bool GPU_select_is_cached (void)
 
void GPU_select_cache_begin (void)
 
void GPU_select_cache_load_id (void)
 
void GPU_select_cache_end (void)
 
const GPUSelectResultGPU_select_buffer_near (const GPUSelectResult *buffer, int hits)
 
uint GPU_select_buffer_remove_by_id (GPUSelectResult *buffer, int hits, uint select_id)
 
void GPU_select_buffer_stride_realign (const struct rcti *src, const struct rcti *dst, uint *r_buf)
 

Typedef Documentation

◆ eGPUSelectMode

Flags for mode of operation.

◆ GPUSelectResult

The result of calling GPU_select_begin & GPU_select_end.

Enumeration Type Documentation

◆ eGPUSelectMode

Flags for mode of operation.

Enumerator
GPU_SELECT_ALL 
GPU_SELECT_NEAREST_FIRST_PASS 
GPU_SELECT_NEAREST_SECOND_PASS 
GPU_SELECT_PICK_ALL 
GPU_SELECT_PICK_NEAREST 

Definition at line 19 of file GPU_select.h.

Function Documentation

◆ GPU_select_begin()

void GPU_select_begin ( GPUSelectResult buffer,
unsigned int  buffer_len,
const struct rcti input,
eGPUSelectMode  mode,
int  oldhits 
)

Initialize and provide buffer for results.

Referenced by drw_select_loop_pass(), gizmo_find_intersected_3d_intern(), and view3d_opengl_select_ex().

◆ GPU_select_buffer_near()

const GPUSelectResult* GPU_select_buffer_near ( const GPUSelectResult buffer,
int  hits 
)

Helper function, nothing special but avoids doing inline since hits aren't sorted by depth and purpose of 4x buffer indices isn't so clear.

Note that comparing depth as uint is fine.

Definition at line 206 of file gpu_select.c.

References BLI_assert, buffer, and NULL.

Referenced by gizmo_find_intersected_3d_intern().

◆ GPU_select_buffer_remove_by_id()

uint GPU_select_buffer_remove_by_id ( GPUSelectResult buffer,
int  hits,
uint  select_id 
)

Definition at line 221 of file gpu_select.c.

References buffer, and GPUSelectResult::id.

Referenced by view3d_opengl_select_with_id_filter().

◆ GPU_select_buffer_stride_realign()

void GPU_select_buffer_stride_realign ( const struct rcti src,
const struct rcti dst,
uint r_buf 
)

Part of the solution copied from rect_subregion_stride_calc.

Referenced by DRW_select_buffer_read().

◆ GPU_select_cache_begin()

void GPU_select_cache_begin ( void  )

◆ GPU_select_cache_end()

void GPU_select_cache_end ( void  )

◆ GPU_select_cache_load_id()

void GPU_select_cache_load_id ( void  )

◆ GPU_select_end()

unsigned int GPU_select_end ( void  )

Cleanup and flush selection results to buffer. Return number of hits and hits in buffer. if dopass is true, we will do a second pass with occlusion queries to get the closest hit.

Definition at line 135 of file gpu_select.c.

References ALGO_GL_QUERY, GPUSelectState::algorithm, g_select_state, gpu_select_pick_end(), gpu_select_query_end(), and GPUSelectState::select_is_active.

Referenced by drw_select_loop_pass(), gizmo_find_intersected_3d_intern(), and view3d_opengl_select_ex().

◆ GPU_select_finalize()

void GPU_select_finalize ( void  )

◆ GPU_select_is_cached()

bool GPU_select_is_cached ( void  )

◆ GPU_select_load_id()

bool GPU_select_load_id ( unsigned int  id)

Loads a new selection id and ends previous query, if any. In second pass of selection it also returns if id has been hit on the first pass already. Thus we can skip drawing un-hit objects.

Warning
We rely on the order of object rendering on passes to be the same for this to work.

Definition at line 117 of file gpu_select.c.

References ALGO_GL_QUERY, GPUSelectState::algorithm, g_select_state, gpu_select_pick_load_id(), gpu_select_query_load_id(), and GPUSelectState::select_is_active.

Referenced by draw_call_single_do(), draw_select_buffer(), ED_gizmo_draw_preset_facemap(), ed_gizmo_draw_preset_geometry(), gizmo_arrow_draw_select(), gizmo_button2d_draw_select(), gizmo_cage2d_draw_intern(), gizmo_cage3d_draw_intern(), gizmo_dial_draw_select(), gizmo_move_draw_select(), and gizmo_primitive_draw_select().