Cleanup: Use functions for accessing mesh normal dirty state
It's better not to expose the details of where the dirty flags are stored to every place that wants to know if the normals are dirty. Some of these places are relics from before vertex normals were computed lazily anyway, so this is more of an incrememtal cleanup. This will make part of the fix for T95839 simpler.
This commit is contained in:
parent
eaa4aa8644
commit
969c4a45ce
Notes:
blender-bot
2023-02-14 00:13:36 +01:00
Referenced by commit b7171d1b82
, Cleanup: Use function to check if normals are dirty
|
@ -1981,9 +1981,8 @@ Mesh *mesh_get_eval_final(struct Depsgraph *depsgraph,
|
|||
mesh_eval = BKE_object_get_evaluated_mesh(ob);
|
||||
}
|
||||
|
||||
if (mesh_eval != nullptr) {
|
||||
BLI_assert(!(mesh_eval->runtime.cd_dirty_vert & CD_MASK_NORMAL));
|
||||
}
|
||||
BKE_mesh_assert_normals_dirty_or_calculated(mesh_eval);
|
||||
|
||||
return mesh_eval;
|
||||
}
|
||||
|
||||
|
|
|
@ -265,7 +265,7 @@ static DerivedMesh *cdDM_from_mesh_ex(Mesh *mesh,
|
|||
dm->deformedOnly = 1;
|
||||
dm->cd_flag = mesh->cd_flag;
|
||||
|
||||
if (mesh->runtime.cd_dirty_vert & CD_MASK_NORMAL) {
|
||||
if (BKE_mesh_vertex_normals_are_dirty(mesh)) {
|
||||
dm->dirty |= DM_DIRTY_NORMALS;
|
||||
}
|
||||
/* TODO: DM_DIRTY_TESS_CDLAYERS ? Maybe not though,
|
||||
|
|
|
@ -1116,11 +1116,9 @@ Mesh *BKE_mesh_new_nomain_from_template_ex(const Mesh *me_src,
|
|||
|
||||
/* Ensure that when no normal layers exist, they are marked dirty, because
|
||||
* normals might not have been included in the mask of copied layers. */
|
||||
if (!CustomData_has_layer(&me_dst->vdata, CD_NORMAL)) {
|
||||
me_dst->runtime.cd_dirty_vert |= CD_MASK_NORMAL;
|
||||
}
|
||||
if (!CustomData_has_layer(&me_dst->pdata, CD_NORMAL)) {
|
||||
me_dst->runtime.cd_dirty_poly |= CD_MASK_NORMAL;
|
||||
if (!CustomData_has_layer(&me_dst->vdata, CD_NORMAL) ||
|
||||
!CustomData_has_layer(&me_dst->pdata, CD_NORMAL)) {
|
||||
BKE_mesh_normals_tag_dirty(me_dst);
|
||||
}
|
||||
|
||||
/* The destination mesh should at least have valid primary CD layers,
|
||||
|
|
|
@ -1500,11 +1500,9 @@ void BKE_mesh_nomain_to_mesh(Mesh *mesh_src,
|
|||
|
||||
/* Ensure that when no normal layers exist, they are marked dirty, because
|
||||
* normals might not have been included in the mask of copied layers. */
|
||||
if (!CustomData_has_layer(&tmp.vdata, CD_NORMAL)) {
|
||||
tmp.runtime.cd_dirty_vert |= CD_MASK_NORMAL;
|
||||
}
|
||||
if (!CustomData_has_layer(&tmp.pdata, CD_NORMAL)) {
|
||||
tmp.runtime.cd_dirty_poly |= CD_MASK_NORMAL;
|
||||
if (!CustomData_has_layer(&tmp.vdata, CD_NORMAL) ||
|
||||
!CustomData_has_layer(&tmp.pdata, CD_NORMAL)) {
|
||||
BKE_mesh_normals_tag_dirty(&tmp);
|
||||
}
|
||||
|
||||
if (CustomData_has_layer(&mesh_src->vdata, CD_SHAPEKEY)) {
|
||||
|
|
|
@ -387,7 +387,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
|
|||
int tot_doubles;
|
||||
|
||||
const bool use_merge = (amd->flags & MOD_ARR_MERGE) != 0;
|
||||
const bool use_recalc_normals = (mesh->runtime.cd_dirty_vert & CD_MASK_NORMAL) || use_merge;
|
||||
const bool use_recalc_normals = BKE_mesh_vertex_normals_are_dirty(mesh) || use_merge;
|
||||
const bool use_offset_ob = ((amd->offset_type & MOD_ARR_OFF_OBJ) && amd->offset_ob != NULL);
|
||||
|
||||
int start_cap_nverts = 0, start_cap_nedges = 0, start_cap_npolys = 0, start_cap_nloops = 0;
|
||||
|
|
|
@ -329,8 +329,7 @@ static void displaceModifier_do(DisplaceModifierData *dmd,
|
|||
if (CustomData_has_layer(ldata, CD_CUSTOMLOOPNORMAL)) {
|
||||
float(*clnors)[3] = NULL;
|
||||
|
||||
if ((mesh->runtime.cd_dirty_vert & CD_MASK_NORMAL) ||
|
||||
!CustomData_has_layer(ldata, CD_NORMAL)) {
|
||||
if (!CustomData_has_layer(ldata, CD_NORMAL)) {
|
||||
BKE_mesh_calc_normals_split(mesh);
|
||||
}
|
||||
|
||||
|
|
|
@ -967,7 +967,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
|
|||
}
|
||||
|
||||
/* must recalculate normals with vgroups since they can displace unevenly T26888. */
|
||||
if ((mesh->runtime.cd_dirty_vert & CD_MASK_NORMAL) || do_rim || dvert) {
|
||||
if (BKE_mesh_vertex_normals_are_dirty(mesh) || do_rim || dvert) {
|
||||
BKE_mesh_normals_tag_dirty(result);
|
||||
}
|
||||
else if (do_shell) {
|
||||
|
@ -1023,9 +1023,9 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
|
|||
#define SOLIDIFY_SIDE_NORMALS
|
||||
|
||||
#ifdef SOLIDIFY_SIDE_NORMALS
|
||||
/* NOTE(@sybren): due to the code setting cd_dirty_vert a few lines above,
|
||||
/* NOTE(@sybren): due to the code setting normals dirty a few lines above,
|
||||
* do_side_normals is always false. */
|
||||
const bool do_side_normals = !(result->runtime.cd_dirty_vert & CD_MASK_NORMAL);
|
||||
const bool do_side_normals = !BKE_mesh_vertex_normals_are_dirty(result);
|
||||
/* annoying to allocate these since we only need the edge verts, */
|
||||
float(*edge_vert_nos)[3] = do_side_normals ?
|
||||
MEM_calloc_arrayN(numVerts, sizeof(float[3]), __func__) :
|
||||
|
|
Loading…
Reference in New Issue