Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/draw/engines/overlay/overlay_edit_uv.c21
-rw-r--r--source/blender/draw/engines/overlay/overlay_engine.c3
-rw-r--r--source/blender/draw/engines/overlay/overlay_private.h1
3 files changed, 20 insertions, 5 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_edit_uv.c b/source/blender/draw/engines/overlay/overlay_edit_uv.c
index 53f517f12ca..d33136a3801 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_uv.c
+++ b/source/blender/draw/engines/overlay/overlay_edit_uv.c
@@ -26,6 +26,7 @@
#include "BKE_editmesh.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_mask.h"
#include "BKE_paint.h"
@@ -45,6 +46,9 @@
#include "overlay_private.h"
+/* Forward declarations. */
+static void overlay_edit_uv_cache_populate(OVERLAY_Data *vedata, Object *ob);
+
typedef struct OVERLAY_StretchingAreaTotals {
void *next, *prev;
float *total_area;
@@ -393,9 +397,24 @@ void OVERLAY_edit_uv_cache_init(OVERLAY_Data *vedata)
DRW_shgroup_uniform_vec4_copy(grp, "color", (float[4]){1.0f, 1.0f, 1.0f, 1.0f});
DRW_shgroup_call_obmat(grp, geom, NULL);
}
+
+ /* HACK: When editing objects that share the same mesh we should only draw the
+ * first one in the order that is used during uv editing. We can only trust that the first object
+ * has the correct batches with the correct selection state. See T83187. */
+ if (pd->edit_uv.do_uv_overlay || pd->edit_uv.do_uv_shadow_overlay) {
+ uint objects_len = 0;
+ Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
+ draw_ctx->view_layer, NULL, &objects_len);
+ for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
+ Object *object_eval = DEG_get_evaluated_object(draw_ctx->depsgraph, objects[ob_index]);
+ DRW_mesh_batch_cache_validate((Mesh *)object_eval->data);
+ overlay_edit_uv_cache_populate(vedata, object_eval);
+ }
+ MEM_freeN(objects);
+ }
}
-void OVERLAY_edit_uv_cache_populate(OVERLAY_Data *vedata, Object *ob)
+static void overlay_edit_uv_cache_populate(OVERLAY_Data *vedata, Object *ob)
{
OVERLAY_StorageList *stl = vedata->stl;
OVERLAY_PrivateData *pd = stl->pd;
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index f87f781b6ce..3e56ed7de5d 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -298,9 +298,6 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
OVERLAY_PrivateData *pd = data->stl->pd;
if (pd->space_type == SPACE_IMAGE) {
- if (ob->type == OB_MESH) {
- OVERLAY_edit_uv_cache_populate(vedata, ob);
- }
return;
}
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 3aee391c281..2975fe70796 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -555,7 +555,6 @@ void OVERLAY_edit_particle_draw(OVERLAY_Data *vedata);
void OVERLAY_edit_uv_init(OVERLAY_Data *vedata);
void OVERLAY_edit_uv_cache_init(OVERLAY_Data *vedata);
-void OVERLAY_edit_uv_cache_populate(OVERLAY_Data *vedata, Object *ob);
void OVERLAY_edit_uv_draw(OVERLAY_Data *vedata);
void OVERLAY_extra_cache_init(OVERLAY_Data *vedata);