[Bf-blender-cvs] [f1508cc8d56] blender2.8: Subdiv: Move FOREACH functionality to own header

Sergey Sharybin noreply at git.blender.org
Tue Sep 4 15:35:01 CEST 2018


Commit: f1508cc8d56489d5ab024531beb6056470beb0a4
Author: Sergey Sharybin
Date:   Tue Sep 4 15:22:36 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBf1508cc8d56489d5ab024531beb6056470beb0a4

Subdiv: Move FOREACH functionality to own header

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

M	source/blender/blenkernel/BKE_subdiv.h
A	source/blender/blenkernel/BKE_subdiv_foreach.h
M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/multires_reshape.c
M	source/blender/blenkernel/intern/subdiv_foreach.c
M	source/blender/blenkernel/intern/subdiv_mesh.c

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

diff --git a/source/blender/blenkernel/BKE_subdiv.h b/source/blender/blenkernel/BKE_subdiv.h
index 3b21fd889e0..8205864ddae 100644
--- a/source/blender/blenkernel/BKE_subdiv.h
+++ b/source/blender/blenkernel/BKE_subdiv.h
@@ -23,6 +23,12 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+/** \file BKE_subdiv.h
+ *  \ingroup bke
+ *  \since July 2018
+ *  \author Sergey Sharybin
+ */
+
 #ifndef __BKE_SUBDIV_H__
 #define __BKE_SUBDIV_H__
 
@@ -37,12 +43,6 @@ struct OpenSubdiv_TopologyRefiner;
 struct Subdiv;
 struct SubdivToMeshSettings;
 
-/** \file BKE_subdiv.h
- *  \ingroup bke
- *  \since July 2018
- *  \author Sergey Sharybin
- */
-
 typedef enum {
 	SUBDIV_FVAR_LINEAR_INTERPOLATION_NONE,
 	SUBDIV_FVAR_LINEAR_INTERPOLATION_CORNERS_ONLY,
@@ -259,149 +259,6 @@ void BKE_subdiv_eval_limit_patch_resolution_point_and_short_normal(
         void *point_buffer, const int point_offset, const int point_stride,
         void *normal_buffer, const int normal_offset, const int normal_stride);
 
-/* ========================== FOREACH/TRAVERSE API ========================== */
-
-struct SubdivForeachContext;
-
-typedef bool (*SubdivForeachTopologyInformationCb)(
-        const struct SubdivForeachContext *context,
-        const int num_vertices,
-        const int num_edges,
-        const int num_loops,
-        const int num_polygons);
-
-typedef void (*SubdivForeachVertexFromCornerCb)(
-        const struct SubdivForeachContext *context,
-        void *tls,
-        const int ptex_face_index,
-        const float u, const float v,
-        const int coarse_vertex_index,
-        const int coarse_poly_index,
-        const int coarse_corner,
-        const int subdiv_vertex_index);
-
-typedef void (*SubdivForeachVertexFromEdgeCb)(
-        const struct SubdivForeachContext *context,
-        void *tls,
-        const int ptex_face_index,
-        const float u, const float v,
-        const int coarse_edge_index,
-        const int coarse_poly_index,
-        const int coarse_corner,
-        const int subdiv_vertex_index);
-
-typedef void (*SubdivForeachVertexInnerCb)(
-        const struct SubdivForeachContext *context,
-        void *tls,
-        const int ptex_face_index,
-        const float u, const float v,
-        const int coarse_poly_index,
-        const int coarse_corner,
-        const int subdiv_vertex_index);
-
-typedef void (*SubdivForeachEdgeCb)(
-        const struct SubdivForeachContext *context,
-        void *tls,
-        const int coarse_edge_index,
-        const int subdiv_edge_index,
-        const int subdiv_v1, const int subdiv_v2);
-
-typedef void (*SubdivForeachLoopCb)(
-        const struct SubdivForeachContext *context,
-        void *tls,
-        const int ptex_face_index,
-        const float u, const float v,
-        const int coarse_loop_index,
-        const int coarse_poly_index,
-        const int coarse_corner,
-        const int subdiv_loop_index,
-        const int subdiv_vertex_index, const int subdiv_edge_index);
-
-typedef void (*SubdivForeachPolygonCb)(
-        const struct SubdivForeachContext *context,
-        void *tls,
-        const int coarse_poly_index,
-        const int subdiv_poly_index,
-        const int start_loop_index, const int num_loops);
-
-typedef void (*SubdivForeachLooseCb)(
-        const struct SubdivForeachContext *context,
-        void *tls,
-        const int coarse_vertex_index,
-        const int subdiv_vertex_index);
-
-typedef void (*SubdivForeachVertexOfLooseEdgeCb)(
-        const struct SubdivForeachContext *context,
-        void *tls,
-        const int coarse_edge_index,
-        const float u,
-        const int subdiv_vertex_index);
-
-typedef struct SubdivForeachContext {
-	/* Is called when topology information becomes available.
-	 * Is only called once.
-	 *
-	 * NOTE: If this callback returns false, the foreach loop is aborted.
-	 */
-	SubdivForeachTopologyInformationCb topology_info;
-	/* These callbacks are called from every ptex which shares "emitting"
-	 * vertex or edge.
-	 */
-	SubdivForeachVertexFromCornerCb vertex_every_corner;
-	SubdivForeachVertexFromEdgeCb vertex_every_edge;
-	/* Those callbacks are run once per subdivision vertex, ptex is undefined
-	 * as in it will be whatever first ptex face happened to be tarversed in
-	 * the multi-threaded environment ahd which shares "emitting" vertex or
-	 * edge.
-	 */
-	SubdivForeachVertexFromCornerCb vertex_corner;
-	SubdivForeachVertexFromEdgeCb vertex_edge;
-	/* Called exactly once, always corresponds to a single ptex face. */
-	SubdivForeachVertexInnerCb vertex_inner;
-	/* Called once for each loose vertex. One loose coarse vertexcorresponds
-	 * to a single subdivision vertex.
-	 */
-	SubdivForeachLooseCb vertex_loose;
-	/* Called once per vertex created for loose edge. */
-	SubdivForeachVertexOfLooseEdgeCb vertex_of_loose_edge;
-	/* NOTE: If subdivided edge does not come from coarse edge, ORIGINDEX_NONE
-	 * will be passed as coarse_edge_index.
-	 */
-	SubdivForeachEdgeCb edge;
-	/* NOTE: If subdivided loop does not come from coarse loop, ORIGINDEX_NONE
-	 * will be passed as coarse_loop_index.
-	 */
-	SubdivForeachLoopCb loop;
-	SubdivForeachPolygonCb poly;
-
-	/* User-defined pointer, to allow callbacks know something about context the
-	 * traversal is happening for,
-	 */
-	void *user_data;
-
-	/* Initial value of TLS data. */
-	void *user_data_tls;
-	/* Size of TLS data. */
-	size_t user_data_tls_size;
-	/* Function to free TLS storage. */
-	void (*user_data_tls_free)(void *tls);
-} SubdivForeachContext;
-
-/* Invokes callbacks in the order and with values which corresponds to creation
- * of final subdivided mesh.
- *
- * Returns truth if the whole topology was traversed, without any early exits.
- *
- * TODO(sergey): Need to either get rid of subdiv or of coarse_mesh.
- * The main point here is th be abel to get base level topology, which can be
- * done with either of those. Having both of them is kind of redundant.
- */
-bool BKE_subdiv_foreach_subdiv_geometry(
-        struct Subdiv *subdiv,
-        const struct SubdivForeachContext *context,
-        const struct SubdivToMeshSettings *mesh_settings,
-        const struct Mesh *coarse_mesh);
-
 /* =========================== SUBDIV TO MESH API =========================== */
 
 typedef struct SubdivToMeshSettings {
diff --git a/source/blender/blenkernel/BKE_subdiv_foreach.h b/source/blender/blenkernel/BKE_subdiv_foreach.h
new file mode 100644
index 00000000000..3697d4e654f
--- /dev/null
+++ b/source/blender/blenkernel/BKE_subdiv_foreach.h
@@ -0,0 +1,181 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2018 by Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Sergey Sharybin.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file BKE_subdiv_foreach.h
+ *  \ingroup bke
+ *  \since July 2018
+ *  \author Sergey Sharybin
+ */
+
+#ifndef __BKE_SUBDIV_FOREACH_H__
+#define __BKE_SUBDIV_FOREACH_H__
+
+#include "BLI_sys_types.h"
+
+struct Mesh;
+struct Subdiv;
+struct SubdivForeachContext;
+struct SubdivToMeshSettings;
+
+typedef bool (*SubdivForeachTopologyInformationCb)(
+        const struct SubdivForeachContext *context,
+        const int num_vertices,
+        const int num_edges,
+        const int num_loops,
+        const int num_polygons);
+
+typedef void (*SubdivForeachVertexFromCornerCb)(
+        const struct SubdivForeachContext *context,
+        void *tls,
+        const int ptex_face_index,
+        const float u, const float v,
+        const int coarse_vertex_index,
+        const int coarse_poly_index,
+        const int coarse_corner,
+        const int subdiv_vertex_index);
+
+typedef void (*SubdivForeachVertexFromEdgeCb)(
+        const struct SubdivForeachContext *context,
+        void *tls,
+        const int ptex_face_index,
+        const float u, const float v,
+        const int coarse_edge_index,
+        const int coarse_poly_index,
+        const int coarse_corner,
+        const int subdiv_vertex_index);
+
+typedef void (*SubdivForeachVertexInnerCb)(
+        const struct SubdivForeachContext *context,
+        void *tls,
+        const int ptex_face_index,
+        const float u, const float v,
+        const int coarse_poly_index,
+        const int coarse_corner,
+        const int subdiv_vertex_index);
+
+typedef void (*SubdivForeachEdgeCb)(
+        const struct SubdivForeachContext *context,
+        void *tls,
+        const int coarse_edge_index,
+        const int subdiv_edge_index,
+        const int subdiv_v1, const int subdiv_v2);
+
+typedef void (*SubdivForeachLoopCb)(
+        const struct SubdivForeachContext *context,
+        void *tls,
+        const int ptex_face_index,
+        const float u, const float v,
+        const int coarse_loop_index,
+        const int coarse_poly_index,
+        const int coarse_corner,
+        const int subdiv_loop_index,
+        const int subdiv_vertex_index, const int subdiv_edge_index);
+
+typedef void (*SubdivForeachPolygonCb)(
+        const struct SubdivForeachContext *context,
+        void *tls,
+        const int coarse_poly_index,
+        const int subdiv_poly_index,
+        const int start_loop_index, const int num_loops);
+
+typedef void (*SubdivForeachLooseCb)(
+        const struct SubdivForeachContext *context,
+        void *tls,
+        const int coarse_vertex_index,
+        const int subdiv_vertex_index);
+
+typedef void (*SubdivForeachVertexOfLooseEdgeCb)(
+ 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list