Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-04-17 07:17:24 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-04-17 07:21:24 +0300
commite12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch)
tree8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/blenkernel/BKE_subdiv.h
parentb3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff)
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211. For details on usage and instructions for migrating branches without conflicts, see: https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'source/blender/blenkernel/BKE_subdiv.h')
-rw-r--r--source/blender/blenkernel/BKE_subdiv.h256
1 files changed, 126 insertions, 130 deletions
diff --git a/source/blender/blenkernel/BKE_subdiv.h b/source/blender/blenkernel/BKE_subdiv.h
index f14a11005e7..781c036d222 100644
--- a/source/blender/blenkernel/BKE_subdiv.h
+++ b/source/blender/blenkernel/BKE_subdiv.h
@@ -46,96 +46,98 @@ typedef enum eSubdivVtxBoundaryInterpolation {
} eSubdivVtxBoundaryInterpolation;
typedef enum eSubdivFVarLinearInterpolation {
- SUBDIV_FVAR_LINEAR_INTERPOLATION_NONE,
- SUBDIV_FVAR_LINEAR_INTERPOLATION_CORNERS_ONLY,
- SUBDIV_FVAR_LINEAR_INTERPOLATION_CORNERS_AND_JUNCTIONS,
- SUBDIV_FVAR_LINEAR_INTERPOLATION_CORNERS_JUNCTIONS_AND_CONCAVE,
- SUBDIV_FVAR_LINEAR_INTERPOLATION_BOUNDARIES,
- SUBDIV_FVAR_LINEAR_INTERPOLATION_ALL,
+ SUBDIV_FVAR_LINEAR_INTERPOLATION_NONE,
+ SUBDIV_FVAR_LINEAR_INTERPOLATION_CORNERS_ONLY,
+ SUBDIV_FVAR_LINEAR_INTERPOLATION_CORNERS_AND_JUNCTIONS,
+ SUBDIV_FVAR_LINEAR_INTERPOLATION_CORNERS_JUNCTIONS_AND_CONCAVE,
+ SUBDIV_FVAR_LINEAR_INTERPOLATION_BOUNDARIES,
+ SUBDIV_FVAR_LINEAR_INTERPOLATION_ALL,
} eSubdivFVarLinearInterpolation;
typedef struct SubdivSettings {
- bool is_simple;
- bool is_adaptive;
- int level;
- bool use_creases;
- eSubdivVtxBoundaryInterpolation vtx_boundary_interpolation;
- eSubdivFVarLinearInterpolation fvar_linear_interpolation;
+ bool is_simple;
+ bool is_adaptive;
+ int level;
+ bool use_creases;
+ eSubdivVtxBoundaryInterpolation vtx_boundary_interpolation;
+ eSubdivFVarLinearInterpolation fvar_linear_interpolation;
} SubdivSettings;
/* NOTE: Order of enumerators MUST match order of values in SubdivStats. */
typedef enum eSubdivStatsValue {
- SUBDIV_STATS_TOPOLOGY_REFINER_CREATION_TIME = 0,
- SUBDIV_STATS_SUBDIV_TO_MESH,
- SUBDIV_STATS_SUBDIV_TO_MESH_GEOMETRY,
- SUBDIV_STATS_EVALUATOR_CREATE,
- SUBDIV_STATS_EVALUATOR_REFINE,
- SUBDIV_STATS_SUBDIV_TO_CCG,
- SUBDIV_STATS_SUBDIV_TO_CCG_ELEMENTS,
- SUBDIV_STATS_TOPOLOGY_COMPARE,
-
- NUM_SUBDIV_STATS_VALUES,
+ SUBDIV_STATS_TOPOLOGY_REFINER_CREATION_TIME = 0,
+ SUBDIV_STATS_SUBDIV_TO_MESH,
+ SUBDIV_STATS_SUBDIV_TO_MESH_GEOMETRY,
+ SUBDIV_STATS_EVALUATOR_CREATE,
+ SUBDIV_STATS_EVALUATOR_REFINE,
+ SUBDIV_STATS_SUBDIV_TO_CCG,
+ SUBDIV_STATS_SUBDIV_TO_CCG_ELEMENTS,
+ SUBDIV_STATS_TOPOLOGY_COMPARE,
+
+ NUM_SUBDIV_STATS_VALUES,
} eSubdivStatsValue;
typedef struct SubdivStats {
- union {
- struct {
- /* Time spend on creating topology refiner, which includes time
- * spend on conversion from Blender data to OpenSubdiv data, and
- * time spend on topology orientation on OpenSubdiv C-API side. */
- double topology_refiner_creation_time;
- /* Total time spent in BKE_subdiv_to_mesh(). */
- double subdiv_to_mesh_time;
- /* Geometry (MVert and co) creation time during SUBDIV_TYO_MESH. */
- double subdiv_to_mesh_geometry_time;
- /* Time spent on evaluator creation from topology refiner. */
- double evaluator_creation_time;
- /* Time spent on evaluator->refine(). */
- double evaluator_refine_time;
- /* Total time spent on whole CCG creation. */
- double subdiv_to_ccg_time;
- /* Time spent on CCG elements evaluation/initialization. */
- double subdiv_to_ccg_elements_time;
- /* Time spent on CCG elements evaluation/initialization. */
- double topology_compare_time;
- };
- double values_[NUM_SUBDIV_STATS_VALUES];
- };
-
- /* Per-value timestamp on when corresponding BKE_subdiv_stats_begin() was
- * called. */
- double begin_timestamp_[NUM_SUBDIV_STATS_VALUES];
+ union {
+ struct {
+ /* Time spend on creating topology refiner, which includes time
+ * spend on conversion from Blender data to OpenSubdiv data, and
+ * time spend on topology orientation on OpenSubdiv C-API side. */
+ double topology_refiner_creation_time;
+ /* Total time spent in BKE_subdiv_to_mesh(). */
+ double subdiv_to_mesh_time;
+ /* Geometry (MVert and co) creation time during SUBDIV_TYO_MESH. */
+ double subdiv_to_mesh_geometry_time;
+ /* Time spent on evaluator creation from topology refiner. */
+ double evaluator_creation_time;
+ /* Time spent on evaluator->refine(). */
+ double evaluator_refine_time;
+ /* Total time spent on whole CCG creation. */
+ double subdiv_to_ccg_time;
+ /* Time spent on CCG elements evaluation/initialization. */
+ double subdiv_to_ccg_elements_time;
+ /* Time spent on CCG elements evaluation/initialization. */
+ double topology_compare_time;
+ };
+ double values_[NUM_SUBDIV_STATS_VALUES];
+ };
+
+ /* Per-value timestamp on when corresponding BKE_subdiv_stats_begin() was
+ * called. */
+ double begin_timestamp_[NUM_SUBDIV_STATS_VALUES];
} SubdivStats;
/* Functor which evaluates dispalcement at a given (u, v) of given ptex face. */
typedef struct SubdivDisplacement {
- /* Initialize displacement evaluator.
- *
- * Is called right before evaluation is actually needed. This allows to do
- * some lazy initialization, like allocate evaluator from a main thread but
- * then do actual evaluation from background job. */
- void (*initialize)(struct SubdivDisplacement *displacement);
-
- /* Return displacement which is to be added to the original coordinate.
- *
- * NOTE: This function is supposed to return "continuous" displacement for
- * each pf PTex faces created for special (non-quad) polygon. This means,
- * if displacement is stored on per-corner manner (like MDisps for multires)
- * this is up the displacement implementation to average boundaries of the
- * displacement grids if needed.
- *
- * Averaging of displacement for vertices created for over coarse vertices
- * and edges is done by subdiv code. */
- void (*eval_displacement)(struct SubdivDisplacement *displacement,
- const int ptex_face_index,
- const float u, const float v,
- const float dPdu[3], const float dPdv[3],
- float r_D[3]);
-
- /* Free the data, not the evaluator itself. */
- void (*free)(struct SubdivDisplacement *displacement);
-
- void *user_data;
+ /* Initialize displacement evaluator.
+ *
+ * Is called right before evaluation is actually needed. This allows to do
+ * some lazy initialization, like allocate evaluator from a main thread but
+ * then do actual evaluation from background job. */
+ void (*initialize)(struct SubdivDisplacement *displacement);
+
+ /* Return displacement which is to be added to the original coordinate.
+ *
+ * NOTE: This function is supposed to return "continuous" displacement for
+ * each pf PTex faces created for special (non-quad) polygon. This means,
+ * if displacement is stored on per-corner manner (like MDisps for multires)
+ * this is up the displacement implementation to average boundaries of the
+ * displacement grids if needed.
+ *
+ * Averaging of displacement for vertices created for over coarse vertices
+ * and edges is done by subdiv code. */
+ void (*eval_displacement)(struct SubdivDisplacement *displacement,
+ const int ptex_face_index,
+ const float u,
+ const float v,
+ const float dPdu[3],
+ const float dPdv[3],
+ float r_D[3]);
+
+ /* Free the data, not the evaluator itself. */
+ void (*free)(struct SubdivDisplacement *displacement);
+
+ void *user_data;
} SubdivDisplacement;
/* This structure contains everything needed to construct subdivided surface.
@@ -144,34 +146,33 @@ typedef struct SubdivDisplacement {
* buffers, GPU subdivision mesh, CPU side fully qualified mesh) from the same
* Subdiv structure. */
typedef struct Subdiv {
- /* Settings this subdivision surface is created for.
- *
- * It is read-only after assignment in BKE_subdiv_new_from_FOO(). */
- SubdivSettings settings;
- /* Topology refiner includes all the glue logic to feed Blender side
- * topology to OpenSubdiv. It can be shared by both evaluator and GL mesh
- * drawer. */
- struct OpenSubdiv_TopologyRefiner *topology_refiner;
- /* CPU side evaluator. */
- struct OpenSubdiv_Evaluator *evaluator;
- /* Optional displacement evaluator. */
- struct SubdivDisplacement *displacement_evaluator;
- /* Statistics for debugging. */
- SubdivStats stats;
-
- /* Cached values, are not supposed to be accessed directly. */
- struct {
- /* Indexed by base face index, element indicates total number of ptex
- * faces created for preceding base faces. */
- int *face_ptex_offset;
- } cache_;
+ /* Settings this subdivision surface is created for.
+ *
+ * It is read-only after assignment in BKE_subdiv_new_from_FOO(). */
+ SubdivSettings settings;
+ /* Topology refiner includes all the glue logic to feed Blender side
+ * topology to OpenSubdiv. It can be shared by both evaluator and GL mesh
+ * drawer. */
+ struct OpenSubdiv_TopologyRefiner *topology_refiner;
+ /* CPU side evaluator. */
+ struct OpenSubdiv_Evaluator *evaluator;
+ /* Optional displacement evaluator. */
+ struct SubdivDisplacement *displacement_evaluator;
+ /* Statistics for debugging. */
+ SubdivStats stats;
+
+ /* Cached values, are not supposed to be accessed directly. */
+ struct {
+ /* Indexed by base face index, element indicates total number of ptex
+ * faces created for preceding base faces. */
+ int *face_ptex_offset;
+ } cache_;
} Subdiv;
/* ========================== CONVERSION HELPERS ============================ */
/* NOTE: uv_smooth is eSubsurfUVSmooth. */
-eSubdivFVarLinearInterpolation
-BKE_subdiv_fvar_interpolation_from_uv_smooth(int uv_smooth);
+eSubdivFVarLinearInterpolation BKE_subdiv_fvar_interpolation_from_uv_smooth(int uv_smooth);
/* =============================== STATISTICS =============================== */
@@ -186,11 +187,9 @@ void BKE_subdiv_stats_print(const SubdivStats *stats);
/* ================================ SETTINGS ================================ */
-void BKE_subdiv_settings_validate_for_mesh(SubdivSettings *settings,
- const struct Mesh *mesh);
+void BKE_subdiv_settings_validate_for_mesh(SubdivSettings *settings, const struct Mesh *mesh);
-bool BKE_subdiv_settings_equal(const SubdivSettings *settings_a,
- const SubdivSettings *settings_b);
+bool BKE_subdiv_settings_equal(const SubdivSettings *settings_a, const SubdivSettings *settings_b);
/* ============================== CONSTRUCTION ============================== */
@@ -198,8 +197,7 @@ bool BKE_subdiv_settings_equal(const SubdivSettings *settings_a,
* settings and topology. */
Subdiv *BKE_subdiv_new_from_converter(const SubdivSettings *settings,
struct OpenSubdiv_Converter *converter);
-Subdiv *BKE_subdiv_new_from_mesh(const SubdivSettings *settings,
- const struct Mesh *mesh);
+Subdiv *BKE_subdiv_new_from_mesh(const SubdivSettings *settings, const struct Mesh *mesh);
/* Similar to above, but will not re-create descriptor if it was created for the
* same settings and topology.
@@ -209,23 +207,20 @@ Subdiv *BKE_subdiv_new_from_mesh(const SubdivSettings *settings,
* NOTE: It is allowed to pass NULL as an existing subdivision surface
* descriptor. This will create enw descriptor without any extra checks.
*/
-Subdiv *BKE_subdiv_update_from_converter(
- Subdiv *subdiv,
- const SubdivSettings *settings,
- struct OpenSubdiv_Converter *converter);
-Subdiv *BKE_subdiv_update_from_mesh(
- Subdiv *subdiv,
- const SubdivSettings *settings,
- const struct Mesh *mesh);
+Subdiv *BKE_subdiv_update_from_converter(Subdiv *subdiv,
+ const SubdivSettings *settings,
+ struct OpenSubdiv_Converter *converter);
+Subdiv *BKE_subdiv_update_from_mesh(Subdiv *subdiv,
+ const SubdivSettings *settings,
+ const struct Mesh *mesh);
void BKE_subdiv_free(Subdiv *subdiv);
/* ============================ DISPLACEMENT API ============================ */
-void BKE_subdiv_displacement_attach_from_multires(
- Subdiv *subdiv,
- struct Mesh *mesh,
- const struct MultiresModifierData *mmd);
+void BKE_subdiv_displacement_attach_from_multires(Subdiv *subdiv,
+ struct Mesh *mesh,
+ const struct MultiresModifierData *mmd);
void BKE_subdiv_displacement_detach(Subdiv *subdiv);
@@ -237,14 +232,16 @@ int *BKE_subdiv_face_ptex_offset_get(Subdiv *subdiv);
/* For a given (ptex_u, ptex_v) within a ptex face get corresponding
* (grid_u, grid_v) within a grid. */
-BLI_INLINE void BKE_subdiv_ptex_face_uv_to_grid_uv(
- const float ptex_u, const float ptex_v,
- float *r_grid_u, float *r_grid_v);
+BLI_INLINE void BKE_subdiv_ptex_face_uv_to_grid_uv(const float ptex_u,
+ const float ptex_v,
+ float *r_grid_u,
+ float *r_grid_v);
/* Inverse of above. */
-BLI_INLINE void BKE_subdiv_grid_uv_to_ptex_face_uv(
- const float grid_u, const float grid_v,
- float *r_ptex_u, float *r_ptex_v);
+BLI_INLINE void BKE_subdiv_grid_uv_to_ptex_face_uv(const float grid_u,
+ const float grid_v,
+ float *r_ptex_u,
+ float *r_ptex_v);
/* For a given subdivision level (which is NOT refinement level) get size of
* CCG grid (number of grid points on a side).
@@ -255,17 +252,16 @@ BLI_INLINE int BKE_subdiv_grid_size_from_level(const int level);
* works in normalized coordinates.
*
* NOTE: Output coordinates are in ptex coordinates. */
-BLI_INLINE int BKE_subdiv_rotate_quad_to_corner(
- const float quad_u, const float quad_v,
- float *r_corner_u, float *r_corner_v);
+BLI_INLINE int BKE_subdiv_rotate_quad_to_corner(const float quad_u,
+ const float quad_v,
+ float *r_corner_u,
+ float *r_corner_v);
/* Converts (u, v) coordinate from within a grid to a quad coordinate in
* normalized ptex coordinates. */
BLI_INLINE void BKE_subdiv_rotate_grid_to_quad(
- const int corner,
- const float grid_u, const float grid_v,
- float *r_quad_u, float *r_quad_v);
+ const int corner, const float grid_u, const float grid_v, float *r_quad_u, float *r_quad_v);
#include "intern/subdiv_inline.h"
-#endif /* __BKE_SUBDIV_H__ */
+#endif /* __BKE_SUBDIV_H__ */