[Bf-blender-cvs] [63058490a3d] blender2.8: Subsurf: Cleanup, remove unused mappings and topology queries

Sergey Sharybin noreply at git.blender.org
Wed Aug 1 18:43:33 CEST 2018


Commit: 63058490a3da932d2c9224aa4555f23eebb77264
Author: Sergey Sharybin
Date:   Wed Aug 1 15:21:14 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB63058490a3da932d2c9224aa4555f23eebb77264

Subsurf: Cleanup, remove unused mappings and topology queries

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

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

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

diff --git a/source/blender/blenkernel/intern/subdiv_converter_mesh.c b/source/blender/blenkernel/intern/subdiv_converter_mesh.c
index 83b1e4a6ce9..5e320678814 100644
--- a/source/blender/blenkernel/intern/subdiv_converter_mesh.c
+++ b/source/blender/blenkernel/intern/subdiv_converter_mesh.c
@@ -45,31 +45,15 @@
 #  include "opensubdiv_converter_capi.h"
 #endif
 
-/* Use mesh element mapping structures during conversion.
- * Uses more memory but is much faster than naive algorithm.
- */
-#define USE_MESH_ELEMENT_MAPPING
-
 #ifdef WITH_OPENSUBDIV
 typedef struct ConverterStorage {
 	SubdivSettings settings;
 	const Mesh *mesh;
-
-#ifdef USE_MESH_ELEMENT_MAPPING
-	MeshElemMap *vert_edge_map;
-	MeshElemMap *vert_poly_map;
-	MeshElemMap *edge_poly_map;
-	int *vert_edge_mem;
-	int *vert_poly_mem;
-	int *edge_poly_mem;
-#endif
-
 	/* Indexed by loop index, value denotes index of face-varying vertex
 	 * which corresponds to the UV coordinate.
 	 */
 	int *loop_uv_indices;
 	int num_uv_coordinates;
-
 	/* Indexed by coarse mesh elements, gives index of corresponding element
 	 * with ignoring all non-manifold entities.
 	 *
@@ -78,7 +62,6 @@ typedef struct ConverterStorage {
 	 * or vertices in the mesh.
 	 */
 	int *manifold_vertex_index;
-	int *manifold_edge_index;
 	/* Indexed by vertex index from mesh, corresponds to whether this vertex has
 	 * infinite sharpness due to non-manifol topology.
 	 */
@@ -154,19 +137,6 @@ static void get_face_vertices(const OpenSubdiv_Converter *converter,
 	}
 }
 
-static void get_face_edges(const OpenSubdiv_Converter *converter,
-                           int manifold_face_index,
-                           int *manifold_face_edges)
-{
-	ConverterStorage *storage = converter->user_data;
-	const MPoly *poly = &storage->mesh->mpoly[manifold_face_index];
-	const MLoop *mloop = storage->mesh->mloop;
-	for (int corner = 0; corner < poly->totloop; corner++) {
-		manifold_face_edges[corner] =
-		        storage->manifold_edge_index[mloop[poly->loopstart + corner].e];
-	}
-}
-
 static void get_edge_vertices(const OpenSubdiv_Converter *converter,
                               int manifold_edge_index,
                               int *manifold_edge_vertices)
@@ -179,68 +149,6 @@ static void get_edge_vertices(const OpenSubdiv_Converter *converter,
 	manifold_edge_vertices[1] = storage->manifold_vertex_index[edge->v2];
 }
 
-static int get_num_edge_faces(const OpenSubdiv_Converter *converter,
-                              int manifold_edge_index)
-{
-	ConverterStorage *storage = converter->user_data;
-	const int edge_index =
-	        storage->manifold_edge_index_reverse[manifold_edge_index];
-#ifdef USE_MESH_ELEMENT_MAPPING
-	return storage->edge_poly_map[edge_index].count;
-#else
-	const Mesh *mesh = storage->mesh;
-	const MPoly *mpoly = mesh->mpoly;
-	const MLoop *mloop = mesh->mloop;
-	int num = 0;
-	for (int poly_index = 0; poly_index < mesh->totpoly; poly_index++) {
-		const MPoly *poly = &mpoly[poly_index];
-		for (int corner = 0; corner < poly->totloop; corner++) {
-			const MLoop *loop = &mloop[poly->loopstart + corner];
-			if (storage->manifold_edge_index[loop->e] == -1) {
-				continue;
-			}
-			if (loop->e == edge_index) {
-				++num;
-				break;
-			}
-		}
-	}
-	return num;
-#endif
-}
-
-static void get_edge_faces(const OpenSubdiv_Converter *converter,
-                           int manifold_edge_index,
-                           int *manifold_edge_faces)
-{
-	ConverterStorage *storage = converter->user_data;
-	const int edge_index =
-	        storage->manifold_edge_index_reverse[manifold_edge_index];
-#ifdef USE_MESH_ELEMENT_MAPPING
-	memcpy(manifold_edge_faces,
-	       storage->edge_poly_map[edge_index].indices,
-	       sizeof(int) * storage->edge_poly_map[edge_index].count);
-#else
-	const Mesh *mesh = storage->mesh;
-	const MPoly *mpoly = mesh->mpoly;
-	const MLoop *mloop = mesh->mloop;
-	int num = 0;
-	for (int poly_index = 0; poly_index < mesh->totpoly; poly_index++) {
-		const MPoly *poly = &mpoly[poly_index];
-		for (int corner = 0; corner < mpoly->totloop; corner++) {
-			const MLoop *loop = &mloop[poly->loopstart + corner];
-			if (storage->manifold_edge_index[loop->e] == -1) {
-				continue;
-			}
-			if (loop->e == edge_index) {
-				manifold_edge_faces[num++] = poly_index;
-				break;
-			}
-		}
-	}
-#endif
-}
-
 static float get_edge_sharpness(const OpenSubdiv_Converter *converter,
                                 int manifold_edge_index)
 {
@@ -252,134 +160,6 @@ static float get_edge_sharpness(const OpenSubdiv_Converter *converter,
 	return edge_crease * storage->settings.level;
 }
 
-static int get_num_vertex_edges(const OpenSubdiv_Converter *converter,
-                                int manifold_vertex_index)
-{
-	ConverterStorage *storage = converter->user_data;
-	const int vertex_index =
-	        storage->manifold_vertex_index_reverse[manifold_vertex_index];
-#ifdef USE_MESH_ELEMENT_MAPPING
-	const int num_vertex_edges = storage->vert_edge_map[vertex_index].count;
-	int num_manifold_vertex_edges = 0;
-	for (int i = 0; i < num_vertex_edges; i++) {
-		const int edge_index = storage->vert_edge_map[vertex_index].indices[i];
-		const int manifold_edge_index =
-		        storage->manifold_edge_index[edge_index];
-		if (manifold_edge_index == -1) {
-			continue;
-		}
-		num_manifold_vertex_edges++;
-	}
-	return num_manifold_vertex_edges;
-#else
-	const Mesh *mesh = storage->mesh;
-	const MEdge *medge = mesh->medge;
-	int num = 0;
-	for (int edge_index = 0; edge_index < mesh->totedge; edge_index++) {
-		const MEdge *edge = &medge[edge_index];
-		if (storage->manifold_edge_index[edge_index] == -1) {
-			continue;
-		}
-		if (edge->v1 == vertex_index || edge->v2 == vertex_index) {
-			++num;
-		}
-	}
-	return num;
-#endif
-}
-
-static void get_vertex_edges(const OpenSubdiv_Converter *converter,
-                             int manifold_vertex_index,
-                             int *manifold_vertex_edges)
-{
-	ConverterStorage *storage = converter->user_data;
-	const int vertex_index =
-	        storage->manifold_vertex_index_reverse[manifold_vertex_index];
-#ifdef USE_MESH_ELEMENT_MAPPING
-	const int num_vertex_edges = storage->vert_edge_map[vertex_index].count;
-	int num_manifold_vertex_edges = 0;
-	for (int i = 0; i < num_vertex_edges; i++) {
-		const int edge_index = storage->vert_edge_map[vertex_index].indices[i];
-		const int manifold_edge_index =
-		        storage->manifold_edge_index[edge_index];
-		if (manifold_edge_index == -1) {
-			continue;
-		}
-		manifold_vertex_edges[num_manifold_vertex_edges] = manifold_edge_index;
-		num_manifold_vertex_edges++;
-	}
-#else
-	const Mesh *mesh = storage->mesh;
-	const MEdge *medge = mesh->medge;
-	int num = 0;
-	for (int edge_index = 0; edge_index < mesh->totedge; edge_index++) {
-		const MEdge *edge = &medge[edge_index];
-		if (storage->manifold_edge_index[edge_index] == -1) {
-			continue;
-		}
-		if (edge->v1 == vertex_index || edge->v2 == vertex_index) {
-			manifold_vertex_edges[num++] =
-			        storage->manifold_edge_index[edge_index];
-		}
-	}
-#endif
-}
-
-static int get_num_vertex_faces(const OpenSubdiv_Converter *converter,
-                                int manifold_vertex_index)
-{
-	ConverterStorage *storage = converter->user_data;
-	const int vertex_index =
-	        storage->manifold_vertex_index_reverse[manifold_vertex_index];
-#ifdef USE_MESH_ELEMENT_MAPPING
-	return storage->vert_poly_map[vertex_index].count;
-#else
-	const Mesh *mesh = storage->mesh;
-	const MPoly *mpoly = mesh->mpoly;
-	const MLoop *mloop = mesh->mloop;
-	int num = 0;
-	for (int poly_index = 0; poly_index < mesh->totpoly; poly_index++) {
-		const MPoly *poly = &mpoly[poly_index];
-		for (int corner = 0; corner < mpoly->totloop; corner++) {
-			const MLoop *loop = &mloop[poly->loopstart + corner];
-			if (loop->v == vertex_index) {
-				++num;
-				break;
-			}
-		}
-	}
-	return num;
-#endif
-}
-
-static void get_vertex_faces(const OpenSubdiv_Converter *converter,
-                            int manifold_vertex_index,
-                            int *manifold_vertex_faces)
-{
-	ConverterStorage *storage = converter->user_data;
-	const int vertex_index =
-	        storage->manifold_vertex_index_reverse[manifold_vertex_index];
-#ifdef USE_MESH_ELEMENT_MAPPING
-	memcpy(manifold_vertex_faces,
-	       storage->vert_poly_map[vertex_index].indices,
-	       sizeof(int) * storage->vert_poly_map[vertex_index].count);
-#else
-	const Mesh *mesh = storage->mesh;
-	const MPoly *mpoly = mesh->mpoly;
-	const MLoop *mloop = mesh->mloop;
-	int num = 0;
-	for (int poly_index = 0; poly_index < mesh->totpoly; poly_index++) {
-		const MPoly *poly = &mpoly[poly_index];
-		for (int corner = 0; corner < mpoly->totloop; corner++) {
-			const MLoop *loop = &mloop[poly->loopstart + corner];
-			if (loop->v == vertex_index) {
-				manifold_vertex_faces[num++] = poly_index;
-				break;
-			}
-		}
-	}
-#endif
-}
 
 static bool is_infinite_sharp_vertex(const OpenSubdiv_Converter *converter,
                                      int manifold_vertex_index)
@@ -467,16 +247,7 @@ static void free_user_data(const OpenSubdiv_Converter *converter)
 {
 	ConverterStorage *user_data = converter->user_data;
 	MEM_SAFE_FREE(user_data->loop_uv_indices);
-#ifdef USE_MESH_ELEMENT_MAPPING
-	MEM_freeN(user_data->vert_edge_map);
-	MEM_freeN(user_data->vert_edge_mem);
-	MEM_freeN(user_data->vert_poly_map);
-	MEM_freeN(user_data->vert_poly_mem);
-	MEM_freeN(user_data->edge_poly_map);
-	MEM_freeN(user_data->edge_poly_mem);
-#endif
 	MEM_freeN(user_data->manifold_vertex_index);
-	MEM_freeN(user_data->manifold_edge_index);
 	MEM_freeN(user_data->infinite_sharp_vertices_map);
 	MEM_freeN(user_data->manifold_vertex_index_reverse);
 	MEM_freeN(user_data->manifold_edge_index_reverse);
@@ -495,17 +266,17 @@ static void init_functions(OpenSubdiv_Converter *converter)
 
 	converter->getNumFaceVertices = get_num_face_vertices;
 	converter->getFaceVertices = get_face_vertices;
-	converter->getFaceEdges = get_face_edges;
+	converter->getFaceEdges = NULL;
 
 	converter->getEdgeVertices = get_edge_vertices;
-	converter->getNumEdgeFaces = get_num_edge_faces;
-	converter->getEdgeFaces = get_edge_faces;
+	converter

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list