Linked meshes: Unselected UVs stay orange instead of gray, cannot deselect all UVs #83187

Closed
opened 2020-11-29 14:46:33 +01:00 by Yaniv Gershoni · 16 comments

System Information
Operating system: Windows-10-10.0.19041-SP0 64 Bits
Graphics card: Quadro P2000/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 451.48

Blender Version
Broken: version: 2.91.0, branch: master, commit date: 2020-11-25 08:34, hash: 0f45cab862
Worked: version 2.90
Caused by 4212b6528a

Short description of error
Unselected vertices stay orange instead of gray.

Exact steps for others to reproduce the error
open Blender in Default setting
duplicate the default cube with Alt+D and move the new cube a little
go to UV Editing tab
enter to edit mode in the 3D View window
select all, now in the UV window you can see that every thing is selected.
try to unselect all in the UV window, it will be orange but darker a little instead of gray.
now, that the UV is unselected (but still in orange) unselect and select all vertex in the 3D View window, now it will show in the UV window in gray as should be.
it only occur when something is already selected in the UV and you select something (or All) in the 3D View and try to unselect in the UV window.

#83187.blend

  • Open file
  • {key A} in the UV Editor
  • {key A} in the 3D View
  • back in the UV Editor, not all UVs can be deselected
**System Information** Operating system: Windows-10-10.0.19041-SP0 64 Bits Graphics card: Quadro [P2000](https://archive.blender.org/developer/P2000.txt)/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 451.48 **Blender Version** Broken: version: 2.91.0, branch: master, commit date: 2020-11-25 08:34, hash: `0f45cab862` Worked: version 2.90 Caused by 4212b6528a **Short description of error** Unselected vertices stay orange instead of gray. **Exact steps for others to reproduce the error** open Blender in Default setting duplicate the default cube with Alt+D and move the new cube a little go to UV Editing tab enter to edit mode in the 3D View window select all, now in the UV window you can see that every thing is selected. try to unselect all in the UV window, it will be orange but darker a little instead of gray. now, that the UV is unselected (but still in orange) unselect and select all vertex in the 3D View window, now it will show in the UV window in gray as should be. it only occur when something is already selected in the UV and you select something (or All) in the 3D View and try to unselect in the UV window. [#83187.blend](https://archive.blender.org/developer/F9413130/T83187.blend) - Open file - {key A} in the UV Editor - {key A} in the 3D View - back in the UV Editor, not all UVs can be deselected
Author

Added subscriber: @YanivGershoni

Added subscriber: @YanivGershoni

#84567 was marked as duplicate of this issue

#84567 was marked as duplicate of this issue

#83180 was marked as duplicate of this issue

#83180 was marked as duplicate of this issue
Member

Changed status from 'Needs Triage' to: 'Confirmed'

Changed status from 'Needs Triage' to: 'Confirmed'
Member

Added subscriber: @Jeroen-Bakker

Added subscriber: @Jeroen-Bakker
Philipp Oeser changed title from Unselected vertices stay orange instead of gray. to Unselected UVs stay orange instead of gray. 2020-11-30 10:23:29 +01:00
Member

Added subscribers: @oren, @lichtwerk

Added subscribers: @oren, @lichtwerk
Philipp Oeser changed title from Unselected UVs stay orange instead of gray. to Linked meshes: Unselected UVs stay orange instead of gray, cannot deselect all UVs 2020-11-30 10:46:28 +01:00

Added subscriber: @rlneumiller

Added subscriber: @rlneumiller
Reproduces in 2.91.0 from https://download.blender.org/release/Blender2.91/blender-2.91.0-windows64.zip

[edit - fixed video link]
Recorded a short video of the repro here: https://drive.google.com/file/d/1MM-stpQXH52rYM2cTljwsGD-OaNrqy5b/view?usp=sharing

[edit - fixed video link] Recorded a short video of the repro here: https://drive.google.com/file/d/1MM-stpQXH52rYM2cTljwsGD-OaNrqy5b/view?usp=sharing

Issue appears in commit 4212b6528a

Issue appears in commit 4212b6528afb07d9b2962566ae9c4251282d387f
Philipp Oeser self-assigned this 2020-12-09 07:49:01 +01:00
Member

For linked meshes, UV batches are drawn multiple times (they are owned by the object, not the mesh it seems).
This wasnt the case prior to d6525e8d13,
ED_uvedit_draw_main would at that time only draw once for unique data see BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs

Now in contrast selecting (amongst other UV operations) is done only once (see BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs again), resulting in tagging BKE_MESH_BATCH_DIRTY_UVEDIT_SELECT only for one of the participating objects batches.

Now trying my guesswork on how this could be solved:

One thing would be to do the roundtrip through mesh flags [we'd be after MLOOPUV_VERTSEL] by tagging ID_RECALC_SELECT.
(In a way you can see this works by using operators that actually do this under the hood: transforming UVs will properly refresh, snapping also does this, select more/less would also do this)
Not sure though if this is desired, this is a bit like having Sync Selection enabled (and would probably make the whole BKE_MESH_BATCH_DIRTY_UVEDIT_SELECT obsolete)

P1837: #83187 snippet ID_RECALC_SELECT



diff --git a/source/blender/editors/uvedit/uvedit_select.c b/source/blender/editors/uvedit/uvedit_select.c
index a6b5aff4a44..748eb7c5268 100644
--- a/source/blender/editors/uvedit/uvedit_select.c
+++ b/source/blender/editors/uvedit/uvedit_select.c
@@ -2612,16 +2612,8 @@ static void uv_select_tag_update_for_object(Depsgraph *depsgraph,
                                             const ToolSettings *ts,
                                             Object *obedit)
 {
-  if (ts->uv_flag & UV_SYNC_SELECTION) {
-    DEG_id_tag_update(obedit->data, ID_RECALC_SELECT);
-    WM_main_add_notifier(NC_GEOM | ND_SELECT, obedit->data);
-  }
-  else {
-    Object *obedit_eval = DEG_get_evaluated_object(depsgraph, obedit);
-    BKE_mesh_batch_cache_dirty_tag(obedit_eval->data, BKE_MESH_BATCH_DIRTY_UVEDIT_SELECT);
-    /* Only for region redraw. */
-    WM_main_add_notifier(NC_GEOM | ND_SELECT, obedit->data);
-  }
+  DEG_id_tag_update(obedit->data, ID_RECALC_SELECT);
+  WM_main_add_notifier(NC_GEOM | ND_SELECT, obedit->data);
 }
 
 /** \} */

Or, we could try to not include linked meshes here in the first place?
This way we would not draw batches which are not up-to-date, we'd only draw the ones that would have been properly invalidated through BKE_MESH_BATCH_DIRTY_UVEDIT_SELECT.

P1838: #83187 snippet unique data



diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 988975bd399..720c5d6fd43 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2101,10 +2101,14 @@ void DRW_draw_render_loop_2d_ex(struct Depsgraph *depsgraph,
 
     /* Only iterate over objects when overlay uses object data. */
     if (do_populate_loop) {
-      DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (depsgraph, ob) {
-        drw_engines_cache_populate(ob);
+      uint objects_len = 0;
+      Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
+          view_layer, NULL, &objects_len);
+      for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
+        Object *obedit = objects[ob_index];
+        drw_engines_cache_populate(obedit);
       }
-      DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END;
+      MEM_freeN(objects);
     }
 
     drw_engines_cache_finish();

@Jeroen-Bakker: what do you think?

For linked meshes, UV batches are drawn multiple times (they are owned by the object, not the mesh it seems). This wasnt the case prior to d6525e8d13, `ED_uvedit_draw_main` would at that time only draw once for unique data see `BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs` Now in contrast selecting (amongst other UV operations) is done only once (see `BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs` again), resulting in tagging `BKE_MESH_BATCH_DIRTY_UVEDIT_SELECT` only for one of the participating objects batches. Now trying my guesswork on how this could be solved: One thing would be to do the roundtrip through mesh flags [we'd be after `MLOOPUV_VERTSEL`] by tagging `ID_RECALC_SELECT`. (In a way you can see this works by using operators that actually do this under the hood: transforming UVs will properly refresh, snapping also does this, select more/less would also do this) Not sure though if this is desired, this is a bit like having `Sync Selection` enabled (and would probably make the whole `BKE_MESH_BATCH_DIRTY_UVEDIT_SELECT` obsolete) [P1837: #83187 snippet ID_RECALC_SELECT](https://archive.blender.org/developer/P1837.txt) ``` diff --git a/source/blender/editors/uvedit/uvedit_select.c b/source/blender/editors/uvedit/uvedit_select.c index a6b5aff4a44..748eb7c5268 100644 --- a/source/blender/editors/uvedit/uvedit_select.c +++ b/source/blender/editors/uvedit/uvedit_select.c @@ -2612,16 +2612,8 @@ static void uv_select_tag_update_for_object(Depsgraph *depsgraph, const ToolSettings *ts, Object *obedit) { - if (ts->uv_flag & UV_SYNC_SELECTION) { - DEG_id_tag_update(obedit->data, ID_RECALC_SELECT); - WM_main_add_notifier(NC_GEOM | ND_SELECT, obedit->data); - } - else { - Object *obedit_eval = DEG_get_evaluated_object(depsgraph, obedit); - BKE_mesh_batch_cache_dirty_tag(obedit_eval->data, BKE_MESH_BATCH_DIRTY_UVEDIT_SELECT); - /* Only for region redraw. */ - WM_main_add_notifier(NC_GEOM | ND_SELECT, obedit->data); - } + DEG_id_tag_update(obedit->data, ID_RECALC_SELECT); + WM_main_add_notifier(NC_GEOM | ND_SELECT, obedit->data); } /** \} */ ``` Or, we could try to not include linked meshes here in the first place? This way we would not draw batches which are not up-to-date, we'd only draw the ones that would have been properly invalidated through BKE_MESH_BATCH_DIRTY_UVEDIT_SELECT. [P1838: #83187 snippet unique data](https://archive.blender.org/developer/P1838.txt) ``` diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 988975bd399..720c5d6fd43 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -2101,10 +2101,14 @@ void DRW_draw_render_loop_2d_ex(struct Depsgraph *depsgraph, /* Only iterate over objects when overlay uses object data. */ if (do_populate_loop) { - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (depsgraph, ob) { - drw_engines_cache_populate(ob); + uint objects_len = 0; + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs( + view_layer, NULL, &objects_len); + for (uint ob_index = 0; ob_index < objects_len; ob_index++) { + Object *obedit = objects[ob_index]; + drw_engines_cache_populate(obedit); } - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; + MEM_freeN(objects); } drw_engines_cache_finish(); ``` @Jeroen-Bakker: what do you think?
Member

I need to look into this. But -1 for the second solution as it doesn't use the render depsgraph.

I need to look into this. But -1 for the second solution as it doesn't use the render depsgraph.
Philipp Oeser removed their assignment 2020-12-11 17:45:51 +01:00
Member

In #83187#1073503, @Jeroen-Bakker wrote:
I need to look into this. But -1 for the second solution as it doesn't use the render depsgraph.

Thx having a look. Would strictly sticking to the render depsgraph mean there is no way to exclude duplis/linked meshes? (this sounds like waste -- drawing potentionally very often without real benefit?)

> In #83187#1073503, @Jeroen-Bakker wrote: > I need to look into this. But -1 for the second solution as it doesn't use the render depsgraph. Thx having a look. Would strictly sticking to the render depsgraph mean there is no way to exclude duplis/linked meshes? (this sounds like waste -- drawing potentionally very often without real benefit?)
Member

Added subscriber: @Stan_Pancakes

Added subscriber: @Stan_Pancakes

This issue was referenced by f83aa830cd

This issue was referenced by f83aa830cd00ad9b8656e2806620d80cb56b3172
Member

Changed status from 'Confirmed' to: 'Resolved'

Changed status from 'Confirmed' to: 'Resolved'
Jeroen Bakker self-assigned this 2021-01-27 16:42:19 +01:00
Thomas Dinges added this to the 2.92 milestone 2023-02-08 16:15:38 +01:00
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
5 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#83187
No description provided.