110 View view(
"OverlayView", view_legacy);
119 origins.begin_sync(
state);
125 layer.bounds.begin_sync();
128 layer.edit_text.begin_sync(
state);
132 layer.force_fields.begin_sync();
136 layer.lights.begin_sync();
138 layer.metaballs.begin_sync();
146 layer.speakers.begin_sync();
150 begin_sync_layer(regular);
151 begin_sync_layer(infront);
161 const bool in_edit_mode = object_is_edit_mode(ob_ref.
object);
162 const bool in_paint_mode = object_is_paint_mode(ob_ref.
object);
163 const bool in_sculpt_mode = object_is_sculpt_mode(ob_ref);
164 const bool in_particle_edit_mode = object_is_particle_edit_mode(ob_ref);
165 const bool in_edit_paint_mode = object_is_edit_paint_mode(
166 ob_ref, in_edit_mode, in_paint_mode, in_sculpt_mode);
167 const bool needs_prepass = object_needs_prepass(ob_ref, in_paint_mode);
171 layer.mode_transfer.object_sync(manager, ob_ref,
state);
177 if (in_particle_edit_mode) {
178 layer.particles.edit_object_sync(manager, ob_ref,
resources,
state);
185 layer.paints.object_sync(manager, ob_ref,
state);
188 layer.grease_pencil.paint_object_sync(manager, ob_ref,
state,
resources);
195 if (in_sculpt_mode) {
199 layer.sculpts.object_sync(manager, ob_ref,
state);
202 layer.grease_pencil.sculpt_object_sync(manager, ob_ref,
state,
resources);
214 layer.mesh_uvs.edit_object_sync(manager, ob_ref,
state);
221 layer.curves.edit_object_sync_legacy(manager, ob_ref,
resources);
224 layer.curves.edit_object_sync(manager, ob_ref,
resources);
227 layer.lattices.edit_object_sync(manager, ob_ref,
resources);
230 layer.metaballs.edit_object_sync(ob_ref,
resources);
233 layer.edit_text.edit_object_sync(ob_ref,
resources);
236 layer.grease_pencil.edit_object_sync(manager, ob_ref,
state,
resources);
242 layer.wireframe.object_sync(manager, ob_ref,
state,
resources, in_edit_paint_mode);
281 layer.attribute_viewer.object_sync(ob_ref,
state, manager);
283 layer.facing.object_sync(manager, ob_ref,
state);
284 layer.fade.object_sync(manager, ob_ref,
state);
293 if (object_is_selected(ob_ref) && !in_edit_paint_mode) {
319 end_sync_layer(regular);
320 end_sync_layer(infront);
334 {GPU_ATTACHMENT_TEXTURE(dtxl->depth_in_front), GPU_ATTACHMENT_TEXTURE(dtxl->color)});
351 View view(
"OverlayView", view_legacy);
455 layer.facing.draw(framebuffer, manager, view);
456 layer.fade.draw(framebuffer, manager, view);
457 layer.mode_transfer.draw(framebuffer, manager, view);
458 layer.edit_text.draw(framebuffer, manager, view);
459 layer.paints.draw(framebuffer, manager, view);
460 layer.particles.draw_no_line(framebuffer, manager, view);
464 layer.bounds.draw(framebuffer, manager, view);
465 layer.wireframe.draw(framebuffer, manager, view);
466 layer.cameras.draw(framebuffer, manager, view);
467 layer.empties.draw(framebuffer, manager, view);
468 layer.force_fields.draw(framebuffer, manager, view);
469 layer.lights.draw(framebuffer, manager, view);
470 layer.light_probes.draw(framebuffer, manager, view);
471 layer.speakers.draw(framebuffer, manager, view);
472 layer.lattices.draw(framebuffer, manager, view);
473 layer.metaballs.draw(framebuffer, manager, view);
474 layer.relations.draw(framebuffer, manager, view);
475 layer.fluids.draw(framebuffer, manager, view);
476 layer.particles.draw(framebuffer, manager, view);
477 layer.attribute_viewer.draw(framebuffer, manager, view);
478 layer.armatures.draw(framebuffer, manager, view);
479 layer.sculpts.draw(framebuffer, manager, view);
480 layer.grease_pencil.draw(framebuffer, manager, view);
481 layer.meshes.draw(framebuffer, manager, view);
482 layer.mesh_uvs.draw(framebuffer, manager, view);
483 layer.curves.draw(framebuffer, manager, view);
487 layer.light_probes.draw_color_only(framebuffer, manager, view);
488 layer.meshes.draw_color_only(framebuffer, manager, view);
489 layer.curves.draw_color_only(framebuffer, manager, view);
490 layer.grease_pencil.draw_color_only(framebuffer, manager, view);
532bool Instance::object_is_selected(
const ObjectRef &ob_ref)
537bool Instance::object_is_paint_mode(
const Object *
object)
546bool Instance::object_is_sculpt_mode(
const ObjectRef &ob_ref)
550 const bool is_active_object = ob_ref.object == active_object;
552 bool is_geonode_preview = ob_ref.dupli_object && ob_ref.dupli_object->preview_base_geometry;
553 bool is_active_dupli_parent = ob_ref.dupli_parent == active_object;
554 return is_active_object || (is_active_dupli_parent && is_geonode_preview);
559 const bool is_active_object = ob_ref.object == active_object;
560 return is_active_object;
566bool Instance::object_is_particle_edit_mode(
const ObjectRef &ob_ref)
571bool Instance::object_is_sculpt_mode(
const Object *
object)
573 if (object->sculpt && (object->sculpt->mode_type ==
OB_MODE_SCULPT)) {
579bool Instance::object_is_edit_paint_mode(
const ObjectRef &ob_ref,
584 bool in_edit_paint_mode = in_edit_mode || in_paint_mode || in_sculpt_mode;
587 in_edit_paint_mode |= ob_ref.dupli_parent && (object_is_edit_mode(ob_ref.dupli_parent) ||
588 object_is_sculpt_mode(ob_ref.dupli_parent) ||
589 object_is_paint_mode(ob_ref.dupli_parent));
591 return in_edit_paint_mode;
594bool Instance::object_is_edit_mode(
const Object *
object)
598 switch (object->type) {
627bool Instance::object_is_in_front(
const Object *
object,
const State &
state)
629 switch (object->type) {
648bool Instance::object_needs_prepass(
const ObjectRef &ob_ref,
bool in_paint_mode)
652 return object_is_rendered_transparent(ob_ref.object,
state);
656 return ob_ref.object->dt >=
OB_SOLID;
662bool Instance::object_is_rendered_transparent(
const Object *
object,
const State &
state)
687 return object->color[3] < 1.0f;
692 Mesh *mesh =
static_cast<Mesh *
>(
object->data);
693 for (
int i = 0; i < mesh->totcol; i++) {
695 if (mat && mat->
a < 1.0f) {
@ CTX_MODE_EDIT_POINT_CLOUD
@ CTX_MODE_EDIT_GREASE_PENCIL
enum eContextObjectMode CTX_data_mode_enum_ex(const Object *obedit, const Object *ob, eObjectMode object_mode)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Base * BKE_view_layer_active_base_get(ViewLayer *view_layer)
struct Material * BKE_object_material_get_eval(struct Object *ob, short act)
bool BKE_scene_uses_blender_workbench(const Scene *scene)
float DEG_get_ctime(const Depsgraph *graph)
#define OB_MODE_ALL_PAINT
#define OB_MODE_ALL_PAINT_GPENCIL
#define BASE_SELECTED(v3d, base)
@ SI_OVERLAY_SHOW_OVERLAYS
@ V3D_SHADING_MATERIAL_COLOR
@ V3D_SHADING_OBJECT_COLOR
@ V3D_OVERLAY_HIDE_OBJECT_ORIGINS
@ V3D_OVERLAY_HIDE_MOTION_PATHS
@ V3D_OVERLAY_HIDE_OBJECT_XTRAS
@ V3D_OVERLAY_BONE_SELECT
void ED_space_image_get_size(SpaceImage *sima, int *r_width, int *r_height)
void ED_space_image_get_uv_aspect(SpaceImage *sima, float *r_aspx, float *r_aspy)
void ED_space_image_get_aspect(SpaceImage *sima, float *r_aspx, float *r_aspy)
#define GPU_ATTACHMENT_TEXTURE(_texture)
#define GPU_ATTACHMENT_NONE
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_color(GPUFrameBuffer *fb, const float clear_col[4])
#define GPU_framebuffer_ensure_config(_fb,...)
@ GPU_TEXTURE_USAGE_SHADER_READ
@ GPU_TEXTURE_USAGE_SHADER_WRITE
@ GPU_TEXTURE_USAGE_ATTACHMENT
void GPU_texture_update_sub(GPUTexture *texture, eGPUDataFormat data_format, const void *pixels, int offset_x, int offset_y, int offset_z, int width, int height, int depth)
void ensure(GPUAttachment depth=GPU_ATTACHMENT_NONE, GPUAttachment color1=GPU_ATTACHMENT_NONE, GPUAttachment color2=GPU_ATTACHMENT_NONE, GPUAttachment color3=GPU_ATTACHMENT_NONE, GPUAttachment color4=GPU_ATTACHMENT_NONE, GPUAttachment color5=GPU_ATTACHMENT_NONE, GPUAttachment color6=GPU_ATTACHMENT_NONE, GPUAttachment color7=GPU_ATTACHMENT_NONE, GPUAttachment color8=GPU_ATTACHMENT_NONE)
void acquire(int2 extent, eGPUTextureFormat format, eGPUTextureUsage usage=GPU_TEXTURE_USAGE_GENERAL)
void wrap(GPUTexture *tex)
bool ensure_2d(eGPUTextureFormat format, int2 extent, eGPUTextureUsage usage=GPU_TEXTURE_USAGE_GENERAL, const float *data=nullptr, int mip_len=1)
int3 size(int miplvl=0) const
void begin_sync(Resources &res)
void draw(Framebuffer &framebuffer, Manager &manager, View &)
static bool is_pose_mode(const Object *armature_ob, const State &state)
void draw(Manager &manager)
AntiAliasing anti_aliasing
void object_sync(ObjectRef &ob_ref, Manager &manager)
void begin_sync(Resources &res, const State &state)
void draw_color_only(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(const ObjectRef &ob_ref, Resources &, const State &state)
void begin_sync(Resources &res, const State &state)
void draw(Resources &res, Manager &manager, View &view)
void object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state)
void begin_sync(Resources &res, State &state)
void draw(Framebuffer &framebuffer, Manager &manager, View &)
Simple API to draw debug shapes and log in the viewport.
DefaultFramebufferList * DRW_viewport_framebuffer_list_get()
bool DRW_object_is_in_edit_mode(const Object *ob)
DRWTextStore * DRW_text_cache_ensure()
DefaultTextureList * DRW_viewport_texture_list_get()
const DRWContextState * DRW_context_state_get()
const DRWView * DRW_view_default_get()
void DRW_texture_ensure_fullscreen_2d(GPUTexture **tex, eGPUTextureFormat format, DRWTextureFlag flags)
RAYTRACE_GROUP_SIZE additional_info("eevee_shared", "eevee_gbuffer_data", "eevee_global_ubo", "eevee_sampling_data", "eevee_utility_texture", "eevee_hiz_data", "draw_view") .specialization_constant(Type RAYTRACE_GROUP_SIZE in_sh_0_tx in_sh_2_tx screen_normal_tx GPU_RGBA8
VecBase< int32_t, 2 > int2
GPUUniformBuf * block_ubo
GPUFrameBuffer * in_front_fb
GPUFrameBuffer * default_fb
GPUTexture * depth_in_front
SpaceImageOverlay overlay
float wireframe_threshold
Framebuffer overlay_line_in_front_fb
TextureRef weight_ramp_tx
Framebuffer overlay_line_only_fb
TextureRef depth_target_tx
Framebuffer overlay_color_only_fb
GPUUniformBuf * globals_buf
TextureFromPool color_render_alloc_tx
TextureRef depth_target_in_front_tx
Framebuffer overlay_output_fb
TextureFromPool xray_depth_tx
GPUFrameBuffer * render_in_front_fb
TextureFromPool overlay_tx
Framebuffer overlay_in_front_fb
TextureRef color_render_tx
TextureRef color_overlay_tx
TextureFromPool depth_in_front_alloc_tx
GlobalsUboStorage theme_settings
TextureRef depth_in_front_tx
GPUFrameBuffer * render_fb
TextureFromPool color_overlay_alloc_tx
Framebuffer overlay_line_fb
const ViewLayer * view_layer
bool xray_enabled_and_not_wire
const SpaceLink * space_data
const Object * object_active
eContextObjectMode ctx_mode
const RegionView3D * rv3d
const SelectionType selection_type