Commit: 4f60bf26d5e85488f960bec5119a53bce0a9ba30 Author: Hans Goudey Date: Sun Sep 12 22:41:41 2021 -0500 Branches: temp-vert-normals-cleanup https://developer.blender.org/rB4f60bf26d5e85488f960bec5119a53bce0a9ba30
Further changes and fixes to move normals out of MVert =================================================================== M source/blender/blenkernel/BKE_mesh_tangent.h M source/blender/blenkernel/intern/DerivedMesh.cc M source/blender/blenkernel/intern/dynamicpaint.c M source/blender/blenkernel/intern/mesh_normals.cc M source/blender/blenkernel/intern/mesh_remap.c M source/blender/blenkernel/intern/object_dupli.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc M source/blender/modifiers/intern/MOD_displace.c M source/blender/modifiers/intern/MOD_solidify_extrude.c M source/blender/modifiers/intern/MOD_weighted_normal.c M source/blender/nodes/geometry/nodes/node_geo_input_normal.cc M source/blender/render/intern/bake.c =================================================================== diff --git a/source/blender/blenkernel/BKE_mesh_tangent.h b/source/blender/blenkernel/BKE_mesh_tangent.h index 96eaa23ce71..b73886767c6 100644 --- a/source/blender/blenkernel/BKE_mesh_tangent.h +++ b/source/blender/blenkernel/BKE_mesh_tangent.h @@ -51,6 +51,7 @@ void BKE_mesh_calc_loop_tangent_ex(const struct MVert *mvert, bool calc_active_tangent, const char (*tangent_names)[64], int tangent_names_len, + const float (*vert_normals)[3], const float (*poly_normals)[3], const float (*loop_normals)[3], const float (*vert_orco)[3], diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc index 30f7c79a3d0..ffca219fbb6 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.cc +++ b/source/blender/blenkernel/intern/DerivedMesh.cc @@ -2303,6 +2303,7 @@ void DM_calc_loop_tangents(DerivedMesh *dm, calc_active_tangent, tangent_names, tangent_names_len, + (const float(*)[3])CustomData_get_layer(&dm->vertData, CD_NORMAL), (const float(*)[3])CustomData_get_layer(&dm->polyData, CD_NORMAL), (const float(*)[3])dm->getLoopDataArray(dm, CD_NORMAL), (const float(*)[3])dm->getVertDataArray(dm, CD_ORCO), /* may be nullptr */ diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index ef4ac67bae3..4e9fee0fdce 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -1913,7 +1913,7 @@ static void dynamic_paint_apply_surface_wave_cb(void *__restrict userdata, PaintWavePoint *wPoint = (PaintWavePoint *)data->surface->data->type_data; MVert *mvert = data->mvert; - madd_v3_v3fl(mvert[i].co, data->vert_normals, wPoint[i].height); + madd_v3_v3fl(mvert[i].co, data->vert_normals[i], wPoint[i].height); } /* @@ -5946,7 +5946,6 @@ static void dynamic_paint_generate_bake_data_cb(void *__restrict userdata, Object *ob = data->ob; - const MVert *mvert = data->mvert; const Vec3f *canvas_verts = data->canvas_verts; const bool do_velocity_data = data->do_velocity_data; diff --git a/source/blender/blenkernel/intern/mesh_normals.cc b/source/blender/blenkernel/intern/mesh_normals.cc index e95457372fa..643ae607525 100644 --- a/source/blender/blenkernel/intern/mesh_normals.cc +++ b/source/blender/blenkernel/intern/mesh_normals.cc @@ -303,14 +303,14 @@ const float (*BKE_mesh_ensure_vertex_normals(const Mesh *mesh))[3] const float (*BKE_mesh_ensure_face_normals(const Mesh *mesh))[3] { if (!(mesh->runtime.cd_dirty_poly & CD_MASK_NORMAL)) { - BLI_assert(CustomData_has_layer(mesh->vdata, CD_NORMAL)); + BLI_assert(CustomData_has_layer(&mesh->vdata, CD_NORMAL)); return (const float(*)[3])CustomData_get_layer(&mesh->vdata, CD_NORMAL); } ThreadMutex *mesh_eval_mutex = (ThreadMutex *)mesh->runtime.eval_mutex; BLI_mutex_lock(mesh_eval_mutex); if (!(mesh->runtime.cd_dirty_poly & CD_MASK_NORMAL)) { - BLI_assert(CustomData_has_layer(mesh->vdata, CD_NORMAL)); + BLI_assert(CustomData_has_layer(&mesh->vdata, CD_NORMAL)); return (const float(*)[3])CustomData_get_layer(&mesh->vdata, CD_NORMAL); } diff --git a/source/blender/blenkernel/intern/mesh_remap.c b/source/blender/blenkernel/intern/mesh_remap.c index 2fd1fce0ccc..caac770fb64 100644 --- a/source/blender/blenkernel/intern/mesh_remap.c +++ b/source/blender/blenkernel/intern/mesh_remap.c @@ -607,6 +607,7 @@ void BKE_mesh_remap_calc_verts_from_mesh(const int mode, MPoly *polys_src = me_src->mpoly; MLoop *loops_src = me_src->mloop; float(*vcos_src)[3] = BKE_mesh_vert_coords_alloc(me_src, NULL); + const float(*vert_normals_src)[3] = BKE_mesh_ensure_vertex_normals(me_src); size_t tmp_buff_size = MREMAP_DEFAULT_BUFSIZE; float(*vcos)[3] = MEM_mallocN(sizeof(*vcos) * tmp_buff_size, __func__); @@ -618,7 +619,7 @@ void BKE_mesh_remap_calc_verts_from_mesh(const int mode, if (mode == MREMAP_MODE_VERT_POLYINTERP_VNORPROJ) { for (i = 0; i < numverts_dst; i++) { copy_v3_v3(tmp_co, verts_dst[i].co); - normal_short_to_float_v3(tmp_no, verts_dst[i].no); + copy_v3_v3(tmp_no, vert_normals_src[i]); /* Convert the vertex to tree coordinates, if needed. */ if (space_transform) { @@ -964,6 +965,8 @@ void BKE_mesh_remap_calc_edges_from_mesh(const int mode, BKE_bvhtree_from_mesh_get(&treedata, me_src, BVHTREE_FROM_EDGES, 2); + const float(*vert_normals_dst)[3] = BKE_mesh_ensure_vertex_normals(me_src); + for (i = 0; i < numedges_dst; i++) { /* For each dst edge, we sample some rays from it (interpolated from its vertices) * and use their hits to interpolate from source edges. */ @@ -983,8 +986,8 @@ void BKE_mesh_remap_calc_edges_from_mesh(const int mode, copy_v3_v3(v1_co, verts_dst[me->v1].co); copy_v3_v3(v2_co, verts_dst[me->v2].co); - normal_short_to_float_v3(v1_no, verts_dst[me->v1].no); - normal_short_to_float_v3(v2_no, verts_dst[me->v2].no); + copy_v3_v3(v1_no, vert_normals_dst[me->v1]); + copy_v3_v3(v2_no, vert_normals_dst[me->v2]); /* We do our transform here, allows to interpolate from normals already in src space. */ if (space_transform) { @@ -1409,7 +1412,7 @@ void BKE_mesh_remap_calc_loops_from_mesh(const int mode, numloops_dst, polys_dst, (const float(*)[3])poly_nors_dst, - BKE_mesh_ensure_vertex_normals(mesh_dst), + vert_normals_dst, numpolys_dst, use_split_nors_dst, split_angle_dst, diff --git a/source/blender/blenkernel/intern/object_dupli.cc b/source/blender/blenkernel/intern/object_dupli.cc index 04739ec19d3..6700071e4c7 100644 --- a/source/blender/blenkernel/intern/object_dupli.cc +++ b/source/blender/blenkernel/intern/object_dupli.cc @@ -448,6 +448,7 @@ struct VertexDupliData_Mesh { int totvert; const MVert *mvert; + const float (*vert_normals)[3]; const float (*orco)[3]; }; @@ -545,12 +546,9 @@ static void make_child_duplis_verts_from_mesh(const DupliContext *ctx, float child_imat[4][4]; mul_m4_m4m4(child_imat, inst_ob->imat, ctx->object->obmat); - const MVert *mv = mvert; - for (int i = 0; i < totvert; i++, mv++) { - const float *co = mv->co; - float no[3]; - normal_short_to_float_v3(no, mv->no); - DupliObject *dob = vertex_dupli(vdd->params.ctx, inst_ob, child_imat, i, co, no, use_rotation); + for (int i = 0; i < totvert; i++) { + DupliObject *dob = vertex_dupli( + vdd->params.ctx, inst_ob, child_imat, i, mvert[i].co, vdd->vert_normals[i], use_rotation); if (vdd->orco) { copy_v3_v3(dob->orco, vdd->orco[i]); } @@ -627,6 +625,7 @@ static void make_duplis_verts(const DupliContext *ctx) vdd.params = vdd_params; vdd.totvert = me_eval->totvert; vdd.mvert = me_eval->mvert; + vdd.vert_normals = BKE_mesh_ensure_vertex_normals(me_eval); vdd.orco = (const float(*)[3])CustomData_get_layer(&me_eval->vdata, CD_ORCO); make_child_duplis(ctx, &vdd, make_child_duplis_verts_from_mesh); diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc index 1f8776fc98e..1c9ca46f154 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc @@ -131,6 +131,7 @@ static void extract_tan_ex_init(const MeshRenderData *mr, calc_active_tangent, tangent_names, tan_len, + mr->vert_normals, mr->poly_normals, mr->loop_normals, orco, diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c index 40b8cddc70a..0e5470208aa 100644 --- a/source/blender/modifiers/intern/MOD_displace.c +++ b/source/blender/modifiers/intern/MOD_displace.c @@ -195,7 +195,6 @@ static void displaceModifier_do_task(void *__restrict userdata, bool use_global_direction = data->use_global_direction; float(*tex_co)[3] = data->tex_co; float(*vertexCos)[3] = data->vertexCos; - MVert *mvert = data->mvert; float(*vert_clnors)[3] = data->vert_clnors; const float delta_fixed = 1.0f - diff --git a/source/blender/modifiers/intern/MOD_solidify_extrude.c b/source/blender/modifiers/intern/MOD_solidify_extrude.c index 6a01231e0d9..22e33c7b210 100644 --- a/source/blender/modifiers/intern/MOD_solidify_extrude.c +++ b/source/blender/modifiers/intern/MOD_solidify_extrude.c @@ -1196,7 +1196,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex copy_v3_v3(nor, mesh_vert_normals[*(&ed->v1 + k)]); add_v3_v3(nor, nor_cpy); normalize_v3(nor); - copy_v3_v3(mesh_vert_normals[*(&ed->v1 + k)], nor); + copy_v3_v3((float *)mesh_vert_normals[*(&ed->v1 + k)], nor); } } diff --git a/source/blender/modifiers/intern/MOD_weighted_normal.c b/source/blender/modifiers/intern/MOD_weighted_normal.c index 59a8daffeef..a1b1a4af4a0 100644 --- a/source/blender/modifiers/intern/MOD_weighted_normal.c +++ b/source/blender/modifiers/intern/MOD_weighted_normal.c @@ -393,6 +393,7 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, } BKE_mesh_normals_loop_custom_from_vertices_set(mvert, + wn_data->vert_normals, @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs