[Bf-blender-cvs] [f177eee7ace] temp-vert-normals-cleanup: Fix failing subdivision test

Hans Goudey noreply at git.blender.org
Sat Nov 13 21:00:42 CET 2021


Commit: f177eee7ace8b88cdb9558bbf156921339e5b58d
Author: Hans Goudey
Date:   Sat Nov 13 14:00:21 2021 -0600
Branches: temp-vert-normals-cleanup
https://developer.blender.org/rBf177eee7ace8b88cdb9558bbf156921339e5b58d

Fix failing subdivision test

===================================================================

M	source/blender/blenkernel/BKE_mesh.h
M	source/blender/blenkernel/intern/subdiv_mesh.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 7df1377f0d3..c130a5c56bc 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -635,7 +635,7 @@ void BKE_mesh_calc_edges_tessface(struct Mesh *mesh);
 
 /* In DerivedMesh.cc */
 void BKE_mesh_wrapper_deferred_finalize(struct Mesh *me_eval,
-                                        const CustomData_MeshMasks *cd_mask_finalize);
+                                        const struct CustomData_MeshMasks *cd_mask_finalize);
 
 /* **** Depsgraph evaluation **** */
 
diff --git a/source/blender/blenkernel/intern/subdiv_mesh.c b/source/blender/blenkernel/intern/subdiv_mesh.c
index e29e88a17b5..3490e42e617 100644
--- a/source/blender/blenkernel/intern/subdiv_mesh.c
+++ b/source/blender/blenkernel/intern/subdiv_mesh.c
@@ -21,6 +21,7 @@
  * \ingroup bke
  */
 
+#include "BKE_mesh.h"
 #include "BKE_subdiv_mesh.h"
 
 #include "atomic_ops.h"
@@ -100,14 +101,15 @@ static void subdiv_mesh_ctx_cache_custom_data_layers(SubdivMeshContext *ctx)
 
 static void subdiv_mesh_prepare_accumulator(SubdivMeshContext *ctx, int num_vertices)
 {
-  if (!ctx->can_evaluate_normals && !ctx->have_displacement) {
-    return;
-  }
+  /* TODO: Even though #can_evaluated_normals is false, a buffer for the normals is necessary,
+   * since previously the code was evaluating into Mert.no directly. */
+  ctx->accumulated_normals = BKE_mesh_vertex_normals_for_write(ctx->subdiv_mesh);
   /* TODO(sergey): Technically, this is overallocating, we don't need memory
    * for an inner subdivision vertices. */
-  ctx->accumulated_normals = (float(*)[3])CustomData_add_layer(
-      &ctx->subdiv_mesh->vdata, CD_NORMAL, CD_DEFAULT, NULL, num_vertices);
   memset(ctx->accumulated_normals, 0, sizeof(float[3]) * num_vertices);
+  if (!ctx->can_evaluate_normals && !ctx->have_displacement) {
+    return;
+  }
   ctx->accumulated_counters = MEM_calloc_arrayN(
       num_vertices, sizeof(*ctx->accumulated_counters), "subdiv accumulated counters");
 }



More information about the Bf-blender-cvs mailing list