41 state.clipping_plane_count = clipping_enabled_ ? 6 : 0;
43 state.pixelsize =
U.pixelsize;
47 if (
state.v3d !=
nullptr) {
57 if (!
state.hide_overlays) {
63 memset(&
state.overlay, 0,
sizeof(
state.overlay));
65 state.v3d_gridflag = 0;
69 state.overlay.wireframe_threshold =
state.v3d->overlay.wireframe_threshold;
70 state.overlay.wireframe_opacity =
state.v3d->overlay.wireframe_opacity;
80 state.clear_in_front =
false;
81 state.use_in_front =
false;
82 state.is_wireframe_mode =
false;
84 state.xray_enabled =
false;
110 View view(
"OverlayView", view_legacy);
112 state.camera_position =
view.viewinv().location();
113 state.camera_forward =
view.viewinv().z_axis();
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);
177 if (in_particle_edit_mode) {
195 if (in_sculpt_mode) {
209 if (in_edit_mode && !
state.hide_overlays) {
241 if (
state.is_wireframe_mode || !
state.hide_overlays) {
245 if (!
state.hide_overlays) {
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);
354 if (!
resources.depth_in_front_tx.is_valid()) {
359 if (
state.xray_enabled) {
371 if (!
resources.color_overlay_tx.is_valid()) {
401 resources.overlay_line_in_front_fb.ensure(
418 if (
resources.selection_type != SelectionType::DISABLED) {
425 regular.sculpts.draw_on_render(
resources.render_fb, manager,
view);
426 regular.mesh_uvs.draw_on_render(
resources.render_fb, manager,
view);
427 infront.sculpts.draw_on_render(
resources.render_in_front_fb, manager,
view);
428 regular.mesh_uvs.draw_on_render(
resources.render_in_front_fb, manager,
view);
432 if (
state.xray_enabled) {
440 regular.cameras.draw_scene_background_images(
resources.overlay_color_only_fb, manager,
view);
441 infront.cameras.draw_scene_background_images(
resources.overlay_color_only_fb, manager,
view);
443 regular.empties.draw_background_images(
resources.overlay_color_only_fb, manager,
view);
444 regular.cameras.draw_background_images(
resources.overlay_color_only_fb, manager,
view);
445 infront.cameras.draw_background_images(
resources.overlay_color_only_fb, manager,
view);
447 regular.empties.draw_images(
resources.overlay_fb, manager,
view);
449 regular.prepass.draw(
resources.overlay_line_fb, manager,
view);
450 infront.prepass.draw(
resources.overlay_line_in_front_fb, manager,
view);
464 layer.
bounds.draw(framebuffer, manager,
view);
493 overlay_fb_draw(regular,
resources.overlay_fb);
494 draw_layer(regular,
resources.overlay_line_fb);
496 overlay_fb_draw(infront,
resources.overlay_in_front_fb);
497 draw_layer(infront,
resources.overlay_line_in_front_fb);
503 draw_layer_color_only(regular,
resources.overlay_color_only_fb);
504 draw_layer_color_only(infront,
resources.overlay_color_only_fb);
506 infront.empties.draw_in_front_images(
resources.overlay_color_only_fb, manager,
view);
507 regular.cameras.draw_in_front(
resources.overlay_color_only_fb, manager,
view);
508 infront.cameras.draw_in_front(
resources.overlay_color_only_fb, manager,
view);
518 resources.depth_in_front_alloc_tx.release();
519 resources.color_overlay_alloc_tx.release();
520 resources.color_render_alloc_tx.release();
524 if (
resources.selection_type != SelectionType::DISABLED) {
532bool Instance::object_is_selected(
const ObjectRef &ob_ref)
537bool Instance::object_is_paint_mode(
const Object *
object)
542 return state.active_base && (
object ==
state.active_base->object) &&
546bool Instance::object_is_sculpt_mode(
const ObjectRef &ob_ref)
549 const Object *active_object =
state.active_base->object;
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);
558 const Object *active_object =
state.active_base->object;
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)
574 return object ==
state.active_base->object;
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) {
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);
655 if (!
state.xray_enabled || (selection_type_ != SelectionType::DISABLED)) {
656 return ob_ref.object->dt >=
OB_SOLID;
662bool Instance::object_is_rendered_transparent(
const Object *
object,
const State &
state)
664 if (
state.v3d ==
nullptr) {
668 if (
state.xray_enabled) {
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
struct View3DShading View3DShading
@ 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)
static bool is_pose_mode(const Object *armature_ob, const State &state)
void edit_object_sync(const ObjectRef &ob_ref, Resources &res, ShapeCache &shapes, const State &state)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(const ObjectRef &ob_ref, Resources &res, const ShapeCache &shapes, const State &state)
void object_sync(const ObjectRef &ob_ref, const State &state, Manager &manager)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(const ObjectRef &ob_ref, ShapeCache &shapes, Manager &manager, Resources &res, State &state)
void draw_color_only(Framebuffer &framebuffer, Manager &manager, View &view)
void edit_object_sync_legacy(Manager &manager, const ObjectRef &ob_ref, Resources &)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void edit_object_sync(Manager &manager, const ObjectRef &ob_ref, Resources &)
void edit_object_sync(const ObjectRef &ob_ref, const Resources &res)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(const ObjectRef &ob_ref, ShapeCache &shapes, Manager &manager, Resources &res, const State &state)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state)
void object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(Manager &manager, const ObjectRef &ob_ref, Resources &res, const State &state)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(const ObjectRef &ob_ref, Resources &res, const State &state)
void object_sync(const ObjectRef &ob_ref, Resources &, State &state)
void sculpt_object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state, Resources &res)
void paint_object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state, Resources &res)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void edit_object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state, Resources &)
void draw_color_only(Framebuffer &framebuffer, Manager &manager, View &view)
void draw(Manager &manager)
AntiAliasing anti_aliasing
void object_sync(ObjectRef &ob_ref, Manager &manager)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void edit_object_sync(Manager &manager, const ObjectRef &ob_ref, Resources &res)
void object_sync(Manager &manager, const ObjectRef &ob_ref, Resources &res, const State &state)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(const ObjectRef &ob_ref, Resources &res, const State &state)
void draw_color_only(Framebuffer &framebuffer, Manager &manager, View &view)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(const ObjectRef &ob_ref, Resources &res, const State &state)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void edit_object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state)
void draw_color_only(Framebuffer &framebuffer, Manager &manager, View &view)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void edit_object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state, Resources &)
void object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void draw(GPUFrameBuffer *framebuffer, Manager &manager, View &view)
void object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state)
void edit_object_sync(Manager &manager, const ObjectRef &ob_ref, Resources &, const State &state)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void draw_no_line(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(Manager &manager, const ObjectRef &ob_ref, Resources &res, const State &state)
void object_sync(Manager &manager, const ObjectRef &ob_ref, Resources &res, const State &state)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(const ObjectRef &ob_ref, Resources &res, const State &state)
void object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state)
void draw(GPUFrameBuffer *framebuffer, Manager &manager, View &view)
void object_sync(const ObjectRef &ob_ref, Resources &res, const State &state)
void draw(Framebuffer &framebuffer, Manager &manager, View &view)
void object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state, Resources &res, const bool in_edit_paint_mode)
void draw(Framebuffer &framebuffer, Manager &manager, View &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< float, 4 > float4
VecBase< int32_t, 2 > int2
GPUFrameBuffer * in_front_fb
GPUFrameBuffer * default_fb
GPUTexture * depth_in_front
struct SculptSession * sculpt
SpaceImageOverlay overlay
ModeTransfer mode_transfer
AttributeViewer attribute_viewer
GreasePencil grease_pencil