Fix T79260: Crash displaying the same mesh in two windows
This commit is contained in:
parent
4ca8f25fa8
commit
a8d058dbf4
Notes:
blender-bot
2023-02-14 04:07:50 +01:00
Referenced by issue #79260, Crash displaying the same mesh in two windows Referenced by issue #77348, Blender LTS: Maintenance Task 2.83
|
@ -95,6 +95,11 @@ BLI_INLINE void mesh_cd_layers_type_clear(DRW_MeshCDMask *a)
|
|||
*((uint64_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;
|
||||
|
@ -132,7 +137,7 @@ BLI_INLINE const CustomData *mesh_cd_vdata_get_from_mesh(const Mesh *me)
|
|||
|
||||
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 = mesh_cd_ldata_get_from_mesh(me_final);
|
||||
int layer = CustomData_get_active_layer(cd_ldata, CD_MLOOPUV);
|
||||
if (layer != -1) {
|
||||
|
@ -142,7 +147,7 @@ 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 = mesh_cd_ldata_get_from_mesh(me_final);
|
||||
int layer = CustomData_get_stencil_layer(cd_ldata, CD_MLOOPUV);
|
||||
if (layer != -1) {
|
||||
|
@ -152,7 +157,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_vdata = mesh_cd_vdata_get_from_mesh(me_final);
|
||||
|
||||
int layer = CustomData_get_active_layer(cd_vdata, CD_PROP_COLOR);
|
||||
|
@ -163,7 +168,7 @@ static void mesh_cd_calc_active_vcol_layer(const Mesh *me, DRW_MeshCDMask *cd_us
|
|||
|
||||
static void mesh_cd_calc_active_mloopcol_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);
|
||||
|
@ -176,7 +181,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 = mesh_cd_ldata_get_from_mesh(me_final);
|
||||
const CustomData *cd_vdata = mesh_cd_vdata_get_from_mesh(me_final);
|
||||
|
||||
|
|
Loading…
Reference in New Issue