|
Blender V4.3
|
#include <cstdlib>#include <cstring>#include "DNA_userdef_types.h"#include "GPU_select.hh"#include "BLI_rect.h"#include "BLI_utildefines.h"#include "gpu_select_private.hh"Go to the source code of this file.
Classes | |
| struct | GPUSelectState |
Functions | |
Public API | |
| static void | gpu_select_begin_ex (GPUSelectBuffer *buffer, const rcti *input, eGPUSelectMode mode, int oldhits, bool use_select_next) |
| void | GPU_select_begin_next (GPUSelectBuffer *buffer, const rcti *input, eGPUSelectMode mode, int oldhits) |
| void | GPU_select_begin (GPUSelectBuffer *buffer, const rcti *input, eGPUSelectMode mode, int oldhits) |
| bool | GPU_select_load_id (uint id) |
| uint | GPU_select_end () |
Caching | |
Support multiple begin/end's as long as they are within the initial region. Currently only used by ALGO_GL_PICK. | |
| void | GPU_select_cache_begin () |
| void | GPU_select_cache_load_id () |
| void | GPU_select_cache_end () |
| bool | GPU_select_is_cached () |
Utilities | |
| const GPUSelectResult * | GPU_select_buffer_near (const blender::Span< GPUSelectResult > hit_results) |
| uint | GPU_select_buffer_remove_by_id (blender::MutableSpan< GPUSelectResult > hit_results, uint select_id) |
| void | GPU_select_buffer_stride_realign (const rcti *src, const rcti *dst, uint *r_buf) |
Internal Types | |
| enum | eGPUSelectAlgo { ALGO_GL_QUERY = 1 , ALGO_GL_PICK = 2 , ALGO_SELECT_NEXT = 3 } |
| static GPUSelectState | g_select_state = {false} |
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.cc.
| enum eGPUSelectAlgo |
| Enumerator | |
|---|---|
| ALGO_GL_QUERY |
|
| ALGO_GL_PICK | Read depth buffer for every drawing pass and extract depths, |
| ALGO_SELECT_NEXT | Use Select-Next draw engine. |
Definition at line 29 of file gpu_select.cc.
| void GPU_select_begin | ( | GPUSelectBuffer * | buffer, |
| const rcti * | input, | ||
| eGPUSelectMode | mode, | ||
| int | oldhits ) |
Initialize and provide buffer for results.
Definition at line 142 of file gpu_select.cc.
References gpu_select_begin_ex().
Referenced by gizmo_find_intersected_3d_intern().
|
static |
Definition at line 72 of file gpu_select.cc.
References ALGO_GL_PICK, ALGO_GL_QUERY, ALGO_SELECT_NEXT, GPUSelectState::algorithm, BLI_assert, ELEM, g_select_state, GPU_SELECT_NEAREST_SECOND_PASS, gpu_select_next_begin(), GPU_SELECT_PICK_ALL, gpu_select_pick_begin(), gpu_select_pick_cache_begin(), GPU_SELECT_PICK_NEAREST, gpu_select_query_begin(), GPUSelectState::mode, GPUSelectState::select_is_active, GPUSelectState::use_cache, and GPUSelectState::use_cache_needs_init.
Referenced by GPU_select_begin(), and GPU_select_begin_next().
| void GPU_select_begin_next | ( | GPUSelectBuffer * | buffer, |
| const rcti * | input, | ||
| eGPUSelectMode | mode, | ||
| int | oldhits ) |
Initialize and provide buffer for results. Uses the new Select-Next engine if enabled.
Definition at line 134 of file gpu_select.cc.
References gpu_select_begin_ex().
Referenced by drw_select_loop_pass(), and view3d_opengl_select_ex().
| const GPUSelectResult * GPU_select_buffer_near | ( | const blender::Span< GPUSelectResult > | hit_results | ) |
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 245 of file gpu_select.cc.
References BLI_assert.
Referenced by gizmo_find_intersected_3d_intern().
| uint GPU_select_buffer_remove_by_id | ( | blender::MutableSpan< GPUSelectResult > | hit_results, |
| uint | select_id ) |
Definition at line 259 of file gpu_select.cc.
Referenced by view3d_opengl_select_with_id_filter().
Part of the solution copied from rect_subregion_stride_calc.
Definition at line 278 of file gpu_select.cc.
References BLI_assert, BLI_rcti_size_x(), BLI_rcti_size_y(), rcti::xmax, rcti::xmin, rcti::ymax, and rcti::ymin.
Referenced by DRW_select_buffer_read().
| void GPU_select_cache_begin | ( | ) |
Definition at line 204 of file gpu_select.cc.
References BLI_assert, g_select_state, GPUSelectState::select_is_active, and GPUSelectState::use_cache_needs_init.
Referenced by view3d_opengl_select_cache_begin().
| void GPU_select_cache_end | ( | ) |
Definition at line 223 of file gpu_select.cc.
References ALGO_GL_PICK, GPUSelectState::algorithm, BLI_assert, g_select_state, gpu_select_pick_cache_end(), GPUSelectState::use_cache, and GPUSelectState::use_cache_needs_init.
Referenced by view3d_opengl_select_cache_end(), and view3d_opengl_select_ex().
| void GPU_select_cache_load_id | ( | ) |
Definition at line 215 of file gpu_select.cc.
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_ex().
| uint GPU_select_end | ( | ) |
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 170 of file gpu_select.cc.
References ALGO_GL_QUERY, ALGO_SELECT_NEXT, GPUSelectState::algorithm, g_select_state, gpu_select_next_end(), 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().
| bool GPU_select_is_cached | ( | ) |
Definition at line 234 of file gpu_select.cc.
References g_select_state, gpu_select_pick_is_cached(), and GPUSelectState::use_cache.
Referenced by view3d_opengl_select_ex().
| 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.
Definition at line 147 of file gpu_select.cc.
References ALGO_GL_QUERY, ALGO_SELECT_NEXT, GPUSelectState::algorithm, BLI_assert_unreachable, g_select_state, gpu_select_pick_load_id(), gpu_select_query_load_id(), and GPUSelectState::select_is_active.
Referenced by draw_call_indirect(), draw_call_single_do(), draw_select_buffer(), 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(), gizmo_primitive_draw_select(), and pygpu_select_load_id().
|
static |
Definition at line 64 of file gpu_select.cc.
Referenced by gpu_select_begin_ex(), 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().