|
Blender
V2.93
|
#include <stdlib.h>#include <string.h>#include "GPU_select.h"#include "MEM_guardedalloc.h"#include "BLI_rect.h"#include "DNA_userdef_types.h"#include "BLI_utildefines.h"#include "gpu_select_private.h"Go to the source code of this file.
Classes | |
| struct | GPUSelectState |
Typedefs | |
| typedef struct GPUSelectState | GPUSelectState |
Enumerations | |
| enum | { ALGO_GL_QUERY = 1 , ALGO_GL_PICK = 2 } |
Functions | |
| void | GPU_select_begin (uint *buffer, uint bufsize, const rcti *input, char mode, int oldhits) |
| bool | GPU_select_load_id (uint id) |
| uint | GPU_select_end (void) |
| void | GPU_select_cache_begin (void) |
| void | GPU_select_cache_load_id (void) |
| void | GPU_select_cache_end (void) |
| bool | GPU_select_is_cached (void) |
| const uint * | GPU_select_buffer_near (const uint *buffer, int hits) |
| uint | GPU_select_buffer_remove_by_id (uint *buffer, int hits, uint select_id) |
| void | GPU_select_buffer_stride_realign (const rcti *src, const rcti *dst, uint *r_buf) |
Variables | |
| static GPUSelectState | g_select_state = {0} |
Interface for accessing gpu-related methods for selection. The semantics are similar to glRenderMode(GL_SELECT) from older OpenGL versions.
Definition in file gpu_select.c.
| typedef struct GPUSelectState GPUSelectState |
| anonymous enum |
| Enumerator | |
|---|---|
| ALGO_GL_QUERY | glBegin/EndQuery(GL_SAMPLES_PASSED... ), |
| ALGO_GL_PICK | Read depth buffer for every drawing pass and extract depths, |
Definition at line 42 of file gpu_select.c.
initialize and provide buffer for results
Definition at line 67 of file gpu_select.c.
References ALGO_GL_PICK, ALGO_GL_QUERY, GPUSelectState::algorithm, BLI_assert, buffer, ELEM, g_select_state, GPU_SELECT_NEAREST_SECOND_PASS, GPU_SELECT_PICK_ALL, gpu_select_pick_begin(), GPU_SELECT_PICK_NEAREST, gpu_select_query_begin(), GPUSelectState::mode, GPUSelectState::select_is_active, and GPUSelectState::use_cache.
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 200 of file gpu_select.c.
References BLI_assert, buffer, and NULL.
Referenced by gizmo_find_intersected_3d_intern().
Definition at line 215 of file gpu_select.c.
References buffer.
Referenced by view3d_opengl_select_with_id_filter().
Definition at line 234 of file gpu_select.c.
References BLI_assert, BLI_rcti_size_x(), BLI_rcti_size_y(), x, rcti::xmax, rcti::xmin, y, rcti::ymax, and rcti::ymin.
| void GPU_select_cache_begin | ( | void | ) |
Definition at line 159 of file gpu_select.c.
References ALGO_GL_PICK, GPUSelectState::algorithm, BLI_assert, g_select_state, gpu_select_pick_cache_begin(), and GPUSelectState::use_cache.
Referenced by view3d_opengl_select_cache_begin().
| void GPU_select_cache_end | ( | void | ) |
Definition at line 177 of file gpu_select.c.
References ALGO_GL_PICK, GPUSelectState::algorithm, g_select_state, gpu_select_pick_cache_end(), and GPUSelectState::use_cache.
Referenced by view3d_opengl_select(), and view3d_opengl_select_cache_end().
| void GPU_select_cache_load_id | ( | void | ) |
Definition at line 169 of file gpu_select.c.
References ALGO_GL_PICK, GPUSelectState::algorithm, BLI_assert, g_select_state, gpu_select_pick_cache_load_id(), and GPUSelectState::use_cache.
Referenced by view3d_opengl_select().
| uint 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 131 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().
| bool GPU_select_is_cached | ( | void | ) |
Definition at line 185 of file gpu_select.c.
References g_select_state, gpu_select_pick_is_cached(), and GPUSelectState::use_cache.
Referenced by view3d_opengl_select().
| bool GPU_select_load_id | ( | uint | 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.
Definition at line 108 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().
|
static |
Definition at line 62 of file gpu_select.c.
Referenced by GPU_select_begin(), GPU_select_cache_begin(), GPU_select_cache_end(), GPU_select_cache_load_id(), GPU_select_end(), GPU_select_is_cached(), and GPU_select_load_id().