[Bf-blender-cvs] [1b15eb7e71b] master: Subdiv: Cleanup, de-duplicate code

Sergey Sharybin noreply at git.blender.org
Mon Jan 7 17:24:19 CET 2019


Commit: 1b15eb7e71b3fbc9422aada31693c9e750506db6
Author: Sergey Sharybin
Date:   Mon Jan 7 15:31:09 2019 +0100
Branches: master
https://developer.blender.org/rB1b15eb7e71b3fbc9422aada31693c9e750506db6

Subdiv: Cleanup, de-duplicate code

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

M	source/blender/blenkernel/intern/subdiv_foreach.c

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

diff --git a/source/blender/blenkernel/intern/subdiv_foreach.c b/source/blender/blenkernel/intern/subdiv_foreach.c
index f049b23a9ef..48ce252c788 100644
--- a/source/blender/blenkernel/intern/subdiv_foreach.c
+++ b/source/blender/blenkernel/intern/subdiv_foreach.c
@@ -131,6 +131,34 @@ typedef struct SubdivForeachTaskContext {
 	BLI_bitmap *coarse_edges_used_map;
 } SubdivForeachTaskContext;
 
+/* =============================================================================
+ * Threading helpers.
+ */
+
+static void *subdiv_foreach_tls_alloc(SubdivForeachTaskContext *ctx)
+{
+	const SubdivForeachContext *foreach_context = ctx->foreach_context;
+	void *tls = NULL;
+	if (foreach_context->user_data_tls_size != 0) {
+		tls = MEM_mallocN(foreach_context->user_data_tls_size, "tls");
+		memcpy(tls,
+		       foreach_context->user_data_tls,
+		       foreach_context->user_data_tls_size);
+	}
+	return tls;
+}
+
+static void subdiv_foreach_tls_free(void *tls)
+{
+	if (tls != NULL) {
+		MEM_freeN(tls);
+	}
+}
+
+/* =============================================================================
+ * Initialization.
+ */
+
 /* NOTE: Expects edge map to be zeroed. */
 static void subdiv_foreach_ctx_count(SubdivForeachTaskContext *ctx)
 {
@@ -443,16 +471,9 @@ static void subdiv_foreach_every_corner_vertices(SubdivForeachTaskContext *ctx)
 	if (ctx->foreach_context->vertex_every_corner == NULL) {
 		return;
 	}
-	const SubdivForeachContext *foreach_context = ctx->foreach_context;
 	const Mesh *coarse_mesh = ctx->coarse_mesh;
 	const MPoly *coarse_mpoly = coarse_mesh->mpoly;
-	void *tls = NULL;
-	if (foreach_context->user_data_tls_size != 0) {
-		tls = MEM_mallocN(foreach_context->user_data_tls_size, "tls");
-		memcpy(tls,
-		       foreach_context->user_data_tls,
-		       foreach_context->user_data_tls_size);
-	}
+	void *tls = subdiv_foreach_tls_alloc(ctx);
 	for (int poly_index = 0; poly_index < coarse_mesh->totpoly; poly_index++) {
 		const MPoly *coarse_poly = &coarse_mpoly[poly_index];
 		if (coarse_poly->totloop == 4) {
@@ -462,9 +483,7 @@ static void subdiv_foreach_every_corner_vertices(SubdivForeachTaskContext *ctx)
 			subdiv_foreach_every_corner_vertices_special(ctx, tls, coarse_poly);
 		}
 	}
-	if (tls != NULL) {
-		MEM_freeN(tls);
-	}
+	subdiv_foreach_tls_free(tls);
 }
 
 /* Traverse of edge vertices. They are coming from coarse edges. */
@@ -675,16 +694,9 @@ static void subdiv_foreach_every_edge_vertices(SubdivForeachTaskContext *ctx)
 	if (ctx->foreach_context->vertex_every_edge == NULL) {
 		return;
 	}
-	const SubdivForeachContext *foreach_context = ctx->foreach_context;
 	const Mesh *coarse_mesh = ctx->coarse_mesh;
 	const MPoly *coarse_mpoly = coarse_mesh->mpoly;
-	void *tls = NULL;
-	if (foreach_context->user_data_tls_size != 0) {
-		tls = MEM_mallocN(foreach_context->user_data_tls_size, "tls");
-		memcpy(tls,
-		       foreach_context->user_data_tls,
-		       foreach_context->user_data_tls_size);
-	}
+	void *tls = subdiv_foreach_tls_alloc(ctx);
 	for (int poly_index = 0; poly_index < coarse_mesh->totpoly; poly_index++) {
 		const MPoly *coarse_poly = &coarse_mpoly[poly_index];
 		if (coarse_poly->totloop == 4) {
@@ -694,9 +706,7 @@ static void subdiv_foreach_every_edge_vertices(SubdivForeachTaskContext *ctx)
 			subdiv_foreach_every_edge_vertices_special(ctx, tls, coarse_poly);
 		}
 	}
-	if (tls != NULL) {
-		MEM_freeN(tls);
-	}
+	subdiv_foreach_tls_free(tls);
 }
 
 /* Traversal of inner vertices, they are coming from ptex patches. */



More information about the Bf-blender-cvs mailing list