Fix T69941 Assert selecting UVs

Was caused by DRW_mesh_batch_cache_get_edituv_faces_stretch_area called
after DRW_mesh_batch_cache_create_requested. So it was created on the wrong
object/mesh.
This commit is contained in:
Clément Foucault 2019-09-27 16:40:18 +02:00
parent b22afef72c
commit 7bbdc6996a
Notes: blender-bot 2023-02-14 00:47:21 +01:00
Referenced by issue #69941, Assert selecting UVs
3 changed files with 14 additions and 12 deletions

View File

@ -151,8 +151,8 @@ struct GPUBatch *DRW_mesh_batch_cache_get_verts_with_select_id(struct Mesh *me);
struct GPUBatch *DRW_mesh_batch_cache_get_wireframes_face(struct Mesh *me);
/* edit-mesh UV editor */
struct GPUBatch *DRW_mesh_batch_cache_get_edituv_faces_stretch_area(struct Mesh *me,
float *tot_area,
float *tot_uv_area);
float **tot_area,
float **tot_uv_area);
struct GPUBatch *DRW_mesh_batch_cache_get_edituv_faces_stretch_angle(struct Mesh *me);
struct GPUBatch *DRW_mesh_batch_cache_get_edituv_faces(struct Mesh *me);
struct GPUBatch *DRW_mesh_batch_cache_get_edituv_edges(struct Mesh *me);

View File

@ -882,18 +882,18 @@ GPUBatch *DRW_mesh_batch_cache_get_verts_with_select_id(Mesh *me)
* The `cache->tot_area` and cache->tot_uv_area` update are calculation are
* only valid after calling `DRW_mesh_batch_cache_create_requested`. */
GPUBatch *DRW_mesh_batch_cache_get_edituv_faces_stretch_area(Mesh *me,
float *tot_area,
float *tot_uv_area)
float **tot_area,
float **tot_uv_area)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
texpaint_request_active_uv(cache, me);
mesh_batch_cache_add_request(cache, MBC_EDITUV_FACES_STRETCH_AREA);
if (tot_area != NULL) {
*tot_area = cache->tot_area;
*tot_area = &cache->tot_area;
}
if (tot_uv_area != NULL) {
*tot_uv_area = cache->tot_uv_area;
*tot_uv_area = &cache->tot_uv_area;
}
return DRW_batch_request(&cache->batch.edituv_faces_stretch_area);
}

View File

@ -177,6 +177,7 @@ static void uvedit_get_batches(Object *ob,
float *tot_area,
float *tot_area_uv)
{
float *tmp_tot_area, *tmp_tot_area_uv;
int drawfaces = draw_uvs_face_check(scene->toolsettings);
const bool draw_stretch = (sima->flag & SI_DRAW_STRETCH) != 0;
const bool draw_faces = (sima->flag & SI_NO_DRAWFACES) == 0;
@ -193,7 +194,8 @@ static void uvedit_get_batches(Object *ob,
}
if (draw_stretch && (sima->dt_uvstretch == SI_UVDT_STRETCH_AREA)) {
batches->faces = DRW_mesh_batch_cache_get_edituv_faces_stretch_area(ob->data, NULL, NULL);
batches->faces = DRW_mesh_batch_cache_get_edituv_faces_stretch_area(
ob->data, &tmp_tot_area, &tmp_tot_area_uv);
}
else if (draw_stretch) {
batches->faces = DRW_mesh_batch_cache_get_edituv_faces_stretch_angle(ob->data);
@ -207,11 +209,11 @@ static void uvedit_get_batches(Object *ob,
DRW_mesh_batch_cache_create_requested(ob, ob->data, scene, false, false);
/* after create_requested we can load the actual areas */
float tmp_tot_area, tmp_tot_area_uv;
DRW_mesh_batch_cache_get_edituv_faces_stretch_area(ob->data, &tmp_tot_area, &tmp_tot_area_uv);
*tot_area += tmp_tot_area;
*tot_area_uv += tmp_tot_area_uv;
if (draw_stretch && (sima->dt_uvstretch == SI_UVDT_STRETCH_AREA)) {
/* after create_requested we can load the actual areas */
*tot_area += *tmp_tot_area;
*tot_area_uv += *tmp_tot_area_uv;
}
}
static void draw_uvs_shadow(SpaceImage *UNUSED(sima),