Fix #134634: Overlay: Mask not drawing on top of render result/viewer

Logical error in the overlay engine. Moved mask drawing before the early
exit for viewer/render results.

Pull Request: https://projects.blender.org/blender/blender/pulls/134660
This commit is contained in:
Jeroen Bakker
2025-02-17 14:14:12 +01:00
parent 78b5c47c46
commit ed5b077f92

View File

@@ -528,16 +528,6 @@ class MeshUVs : Overlay {
const ToolSettings *tool_setting = state.scene->toolsettings;
const SpaceImage *space_image = reinterpret_cast<const SpaceImage *>(state.space_data);
::Image *image = space_image->image;
const bool is_tiled_image = image && (image->source == IMA_SRC_TILED);
const bool is_viewer = image && ELEM(image->type, IMA_TYPE_R_RESULT, IMA_TYPE_COMPOSITE);
/* Only disable UV drawing on top of render results.
* Otherwise, show UVs even in the absence of active image. */
enabled_ = !is_viewer;
if (!enabled_) {
return;
}
const bool space_mode_is_paint = space_image->mode == SI_MODE_PAINT;
const bool space_mode_is_view = space_image->mode == SI_MODE_VIEW;
const bool space_mode_is_mask = space_image->mode == SI_MODE_MASK;
@@ -546,6 +536,31 @@ class MeshUVs : Overlay {
const bool object_mode_is_edit = state.object_mode & OB_MODE_EDIT;
const bool object_mode_is_paint = state.object_mode & OB_MODE_TEXTURE_PAINT;
const bool is_viewer = image && ELEM(image->type, IMA_TYPE_R_RESULT, IMA_TYPE_COMPOSITE);
const bool is_tiled_image = image && (image->source == IMA_SRC_TILED);
/* The mask overlay is always drawn when enabled, even on top of viewers. */
{
/* Mask Overlay. */
show_mask_ = space_mode_is_mask && space_image->mask_info.mask &&
space_image->mask_info.draw_flag & MASK_DRAWFLAG_OVERLAY;
if (show_mask_) {
mask_mode_ = eMaskOverlayMode(space_image->mask_info.overlay_mode);
mask_id_ = (Mask *)DEG_get_evaluated_id(state.depsgraph, &space_image->mask_info.mask->id);
}
else {
mask_id_ = nullptr;
}
}
/* Only disable UV drawing on top of render results.
* Otherwise, show UVs even in the absence of active image. */
enabled_ = !is_viewer || show_mask_;
if (!enabled_) {
return;
}
{
/* Edit UV Overlay. */
show_uv_edit = space_mode_is_uv && object_mode_is_edit;
@@ -605,18 +620,6 @@ class MeshUVs : Overlay {
(brush->image_brush_type == IMAGE_PAINT_BRUSH_TYPE_CLONE) &&
brush->clone.image;
}
{
/* Mask Overlay. */
show_mask_ = space_mode_is_mask && space_image->mask_info.mask &&
space_image->mask_info.draw_flag & MASK_DRAWFLAG_OVERLAY;
if (show_mask_) {
mask_mode_ = eMaskOverlayMode(space_image->mask_info.overlay_mode);
mask_id_ = (Mask *)DEG_get_evaluated_id(state.depsgraph, &space_image->mask_info.mask->id);
}
else {
mask_id_ = nullptr;
}
}
{
/* UDIM Overlay. */
/* TODO: Always enable this overlay even if overlays are disabled. */