26#define SELECT_ENGINE "SELECT_ENGINE"
56 if (
e_data.framebuffer_select_id ==
nullptr) {
64 e_data.texture_u32 =
nullptr;
71 if (
e_data.texture_u32 ==
nullptr) {
74 "select_buf_ids", size[0], size[1], 1,
GPU_R32UI, usage,
nullptr);
101 if (!
sh_data->select_id_uniform) {
130 if (
e_data.context.select_mode == -1) {
150 if (retopology_occlusion) {
183 for (
uint sel_id :
e_data.context.objects.index_range()) {
196 e_data.context.index_drawn_len = 1;
210 if (!sel_data || sel_data->
is_drawn) {
219 blender::gpu::Batch *geom_faces = DRW_mesh_batch_cache_get_surface(
231 e_data.context.select_mode,
237 ob_offsets->
offset = offset;
239 e_data.context.index_drawn_len = ob_offsets->
vert;
285 for (
int sh_data_index = 0; sh_data_index <
ARRAY_SIZE(
e_data.sh_data); sh_data_index++) {
362 return e_data.framebuffer_select_id;
368 return e_data.texture_u32;
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void copy_m4_m4(float m1[4][4], const float m2[4][4])
#define RV3D_CLIPPING_ENABLED(v3d, rv3d)
DrawDataList * DRW_drawdatalist_from_id(ID *id)
#define DRW_SHADER_FREE_SAFE(shader)
#define DRW_PASS_CREATE(pass, state)
#define DRW_shgroup_call_obmat(shgroup, geom, obmat)
#define DRW_VIEWPORT_DATA_SIZE(ty)
#define DRW_TEXTURE_FREE_SAFE(tex)
#define XRAY_ENABLED(v3d)
#define RETOPOLOGY_ENABLED(v3d)
#define RETOPOLOGY_OFFSET(v3d)
bool GPU_framebuffer_check_valid(GPUFrameBuffer *framebuffer, char err_out[256])
GPUFrameBuffer * GPU_framebuffer_create(const char *name)
#define GPU_FRAMEBUFFER_FREE_SAFE(fb)
void GPU_framebuffer_clear_color_depth(GPUFrameBuffer *fb, const float clear_col[4], float clear_depth)
void GPU_framebuffer_bind(GPUFrameBuffer *framebuffer)
void GPU_framebuffer_clear_depth(GPUFrameBuffer *fb, float clear_depth)
void GPU_framebuffer_texture_attach(GPUFrameBuffer *framebuffer, GPUTexture *texture, int slot, int mip)
GPUShader * GPU_shader_create_from_info_name(const char *info_name)
#define GPU_SHADER_CFG_LEN
int GPU_texture_height(const GPUTexture *texture)
GPUTexture * GPU_texture_create_2d(const char *name, int width, int height, int mip_len, eGPUTextureFormat format, eGPUTextureUsage usage, const float *data)
void GPU_texture_free(GPUTexture *texture)
int GPU_texture_width(const GPUTexture *texture)
@ GPU_TEXTURE_USAGE_SHADER_READ
@ GPU_TEXTURE_USAGE_ATTACHMENT
static struct @193 e_data
BASIC_Shaders sh_data[GPU_SHADER_CFG_LEN]
DRWView * DRW_view_create_with_zoffset(const DRWView *parent_view, const RegionView3D *rv3d, float offset)
DrawData * DRW_drawdata_get(ID *id, DrawEngineType *engine_type)
DefaultFramebufferList * DRW_viewport_framebuffer_list_get()
DrawData * DRW_drawdata_ensure(ID *id, DrawEngineType *engine_type, size_t size, DrawDataInitCb init_cb, DrawDataFreeCb free_cb)
DefaultTextureList * DRW_viewport_texture_list_get()
const DRWContextState * DRW_context_state_get()
const DRWView * DRW_view_default_get()
DRWShadingGroup * DRW_shgroup_create(GPUShader *shader, DRWPass *pass)
void DRW_shgroup_uniform_float_copy(DRWShadingGroup *shgroup, const char *name, const float value)
void DRW_shgroup_uniform_int_copy(DRWShadingGroup *shgroup, const char *name, const int value)
bool DRW_pass_is_empty(DRWPass *pass)
void DRW_draw_pass(DRWPass *pass)
void DRW_view_set_active(const DRWView *view)
@ DRW_STATE_FIRST_VERTEX_CONVENTION
#define DRW_STATE_DEFAULT
SHADOW_TILEMAP_RES tiles_buf[] statistics_buf render_view_buf[SHADOW_VIEW_MAX] GPU_R32UI
void *(* MEM_mallocN)(size_t len, const char *str)
short select_id_get_object_select_mode(Scene *scene, Object *ob)
void select_id_draw_object(void *vedata, View3D *v3d, Object *ob, short select_mode, uint initial_offset, uint *r_vert_offset, uint *r_edge_offset, uint *r_face_offset)
DrawEngineType draw_engine_select_type
static void select_engine_free()
static void select_cache_populate(void *vedata, Object *ob)
SELECTID_Context * DRW_select_engine_context_get()
static void select_cache_init(void *vedata)
GPUFrameBuffer * DRW_engine_select_framebuffer_get()
RenderEngineType DRW_engine_viewport_select_type
static const DrawEngineDataSize select_data_size
static void select_draw_scene(void *vedata)
static void select_engine_init(void *vedata)
static SelectEngineData & get_engine_data()
static void select_engine_framebuffer_setup()
GPUTexture * DRW_engine_select_texture_get()
GPUFrameBuffer * depth_only_fb
DRWPass * select_id_vert_pass
DRWPass * depth_only_pass
DRWPass * select_id_edge_pass
DRWPass * select_id_face_pass
DRWShadingGroup * shgrp_face_unif
DRWShadingGroup * shgrp_edge
DRWShadingGroup * shgrp_depth_only
DRWShadingGroup * shgrp_face_flat
DRWShadingGroup * shgrp_occlude
DRWShadingGroup * shgrp_vert
GPUShader * select_id_uniform
GPUShader * select_id_flat
struct SELECTID_PrivateData * g_data
GPUFrameBuffer * framebuffer_select_id
SELECTID_Shaders sh_data[GPU_SHADER_CFG_LEN]