Commit: 287d5e8305c2899578ba21a541cc2745bc7a5dcf
Author: Campbell Barton
Date: Sat Jul 25 21:30:08 2020 +1000
Branches: blender-v2.83-release
https://developer.blender.org/rB287d5e8305c2899578ba21a541cc2745bc7a5dcf
Fix T79260: Crash displaying the same mesh in two windows
===================================================================
M source/blender/draw/intern/draw_cache_impl_mesh.c
===================================================================
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c
b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 1aaead27ee7..9339927926d 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -91,6 +91,11 @@ BLI_INLINE void mesh_cd_layers_type_clear(DRW_MeshCDMask *a)
*((uint32_t *)a) = 0;
}
+BLI_INLINE const Mesh *editmesh_final_or_this(const Mesh *me)
+{
+ return (me->edit_mesh && me->edit_mesh->mesh_eval_final) ?
me->edit_mesh->mesh_eval_final : me;
+}
+
static void mesh_cd_calc_edit_uv_layer(const Mesh *UNUSED(me), DRW_MeshCDMask
*cd_used)
{
cd_used->edit_uv = 1;
@@ -98,9 +103,8 @@ static void mesh_cd_calc_edit_uv_layer(const Mesh
*UNUSED(me), DRW_MeshCDMask *c
static void mesh_cd_calc_active_uv_layer(const Mesh *me, DRW_MeshCDMask
*cd_used)
{
- const Mesh *me_final = (me->edit_mesh) ? me->edit_mesh->mesh_eval_final : me;
+ const Mesh *me_final = editmesh_final_or_this(me);
const CustomData *cd_ldata = &me_final->ldata;
-
int layer = CustomData_get_active_layer(cd_ldata, CD_MLOOPUV);
if (layer != -1) {
cd_used->uv |= (1 << layer);
@@ -109,9 +113,8 @@ static void mesh_cd_calc_active_uv_layer(const Mesh *me,
DRW_MeshCDMask *cd_used
static void mesh_cd_calc_active_mask_uv_layer(const Mesh *me, DRW_MeshCDMask
*cd_used)
{
- const Mesh *me_final = (me->edit_mesh) ? me->edit_mesh->mesh_eval_final : me;
+ const Mesh *me_final = editmesh_final_or_this(me);
const CustomData *cd_ldata = &me_final->ldata;
-
int layer = CustomData_get_stencil_layer(cd_ldata, CD_MLOOPUV);
if (layer != -1) {
cd_used->uv |= (1 << layer);
@@ -120,7 +123,7 @@ static void mesh_cd_calc_active_mask_uv_layer(const Mesh
*me, DRW_MeshCDMask *cd
static void mesh_cd_calc_active_vcol_layer(const Mesh *me, DRW_MeshCDMask
*cd_used)
{
- const Mesh *me_final = (me->edit_mesh) ? me->edit_mesh->mesh_eval_final : me;
+ const Mesh *me_final = editmesh_final_or_this(me);
const CustomData *cd_ldata = &me_final->ldata;
int layer = CustomData_get_active_layer(cd_ldata, CD_MLOOPCOL);
@@ -133,7 +136,7 @@ static DRW_MeshCDMask mesh_cd_calc_used_gpu_layers(const
Mesh *me,
struct GPUMaterial
**gpumat_array,
int gpumat_array_len)
{
- const Mesh *me_final = (me->edit_mesh) ? me->edit_mesh->mesh_eval_final : me;
+ const Mesh *me_final = editmesh_final_or_this(me);
const CustomData *cd_ldata = &me_final->ldata;
/* See: DM_vertex_attributes_from_gpu for similar logic */
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs