diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-09-04 16:26:58 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-09-04 16:34:52 +0300 |
commit | 916edab639616001c04b091d00d30e65d033f332 (patch) | |
tree | a45485fa77c1be8525c6845f03fab968239b7835 /source | |
parent | f1508cc8d56489d5ab024531beb6056470beb0a4 (diff) |
Subdiv: Move evaluation functionality to own header
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_subdiv.h | 88 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_subdiv_eval.h | 127 | ||||
-rw-r--r-- | source/blender/blenkernel/CMakeLists.txt | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/multires_reshape.c | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/subdiv_eval.c | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/subdiv_mesh.c | 1 |
6 files changed, 132 insertions, 89 deletions
diff --git a/source/blender/blenkernel/BKE_subdiv.h b/source/blender/blenkernel/BKE_subdiv.h index 8205864ddae..111f04915ad 100644 --- a/source/blender/blenkernel/BKE_subdiv.h +++ b/source/blender/blenkernel/BKE_subdiv.h @@ -171,94 +171,6 @@ Subdiv *BKE_subdiv_new_from_mesh(const SubdivSettings *settings, void BKE_subdiv_free(Subdiv *subdiv); -/* ============================= EVALUATION API ============================= */ - -/* Returns true if evaluator is ready for use. */ -bool BKE_subdiv_eval_begin(Subdiv *subdiv); -bool BKE_subdiv_eval_update_from_mesh(Subdiv *subdiv, const struct Mesh *mesh); - -/* Single point queries. */ - -void BKE_subdiv_eval_limit_point( - Subdiv *subdiv, - const int ptex_face_index, - const float u, const float v, - float r_P[3]); -void BKE_subdiv_eval_limit_point_and_derivatives( - Subdiv *subdiv, - const int ptex_face_index, - const float u, const float v, - float r_P[3], float r_dPdu[3], float r_dPdv[3]); -void BKE_subdiv_eval_limit_point_and_normal( - Subdiv *subdiv, - const int ptex_face_index, - const float u, const float v, - float r_P[3], float r_N[3]); -void BKE_subdiv_eval_limit_point_and_short_normal( - Subdiv *subdiv, - const int ptex_face_index, - const float u, const float v, - float r_P[3], short r_N[3]); - -void BKE_subdiv_eval_face_varying( - Subdiv *subdiv, - const int face_varying_channel, - const int ptex_face_index, - const float u, const float v, - float r_varying[2]); - -/* NOTE: Expects derivatives to be correct. - * - * TODO(sergey): This is currently used together with - * BKE_subdiv_eval_final_point() which cas easily evaluate derivatives. - * Would be nice to have dispalcement evaluation function which does not require - * knowing derivatives ahead of a time. - */ -void BKE_subdiv_eval_displacement( - Subdiv *subdiv, - const int ptex_face_index, - const float u, const float v, - const float dPdu[3], const float dPdv[3], - float r_D[3]); - -void BKE_subdiv_eval_final_point( - Subdiv *subdiv, - const int ptex_face_index, - const float u, const float v, - float r_P[3]); - -/* Patch queries at given resolution. - * - * Will evaluate patch at uniformly distributed (u, v) coordinates on a grid - * of given resolution, producing resolution^2 evaluation points. The order - * goes as u in rows, v in columns. - */ - -void BKE_subdiv_eval_limit_patch_resolution_point( - Subdiv *subdiv, - const int ptex_face_index, - const int resolution, - void *buffer, const int offset, const int stride); -void BKE_subdiv_eval_limit_patch_resolution_point_and_derivatives( - Subdiv *subdiv, - const int ptex_face_index, - const int resolution, - void *point_buffer, const int point_offset, const int point_stride, - void *du_buffer, const int du_offset, const int du_stride, - void *dv_buffer, const int dv_offset, const int dv_stride); -void BKE_subdiv_eval_limit_patch_resolution_point_and_normal( - Subdiv *subdiv, - const int ptex_face_index, - const int resolution, - void *point_buffer, const int point_offset, const int point_stride, - void *normal_buffer, const int normal_offset, const int normal_stride); -void BKE_subdiv_eval_limit_patch_resolution_point_and_short_normal( - Subdiv *subdiv, - const int ptex_face_index, - const int resolution, - void *point_buffer, const int point_offset, const int point_stride, - void *normal_buffer, const int normal_offset, const int normal_stride); - /* =========================== SUBDIV TO MESH API =========================== */ typedef struct SubdivToMeshSettings { diff --git a/source/blender/blenkernel/BKE_subdiv_eval.h b/source/blender/blenkernel/BKE_subdiv_eval.h new file mode 100644 index 00000000000..26c13643808 --- /dev/null +++ b/source/blender/blenkernel/BKE_subdiv_eval.h @@ -0,0 +1,127 @@ +/* + * ***** 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_eval.h + * \ingroup bke + * \since July 2018 + * \author Sergey Sharybin + */ + +#ifndef __BKE_SUBDIV_EVAL_H__ +#define __BKE_SUBDIV_EVAL_H__ + +#include "BLI_sys_types.h" + +struct Mesh; +struct Subdiv; + +/* Returns true if evaluator is ready for use. */ +bool BKE_subdiv_eval_begin(struct Subdiv *subdiv); +bool BKE_subdiv_eval_update_from_mesh(struct Subdiv *subdiv, + const struct Mesh *mesh); + +/* Single point queries. */ + +void BKE_subdiv_eval_limit_point( + struct Subdiv *subdiv, + const int ptex_face_index, + const float u, const float v, + float r_P[3]); +void BKE_subdiv_eval_limit_point_and_derivatives( + struct Subdiv *subdiv, + const int ptex_face_index, + const float u, const float v, + float r_P[3], float r_dPdu[3], float r_dPdv[3]); +void BKE_subdiv_eval_limit_point_and_normal( + struct Subdiv *subdiv, + const int ptex_face_index, + const float u, const float v, + float r_P[3], float r_N[3]); +void BKE_subdiv_eval_limit_point_and_short_normal( + struct Subdiv *subdiv, + const int ptex_face_index, + const float u, const float v, + float r_P[3], short r_N[3]); + +void BKE_subdiv_eval_face_varying( + struct Subdiv *subdiv, + const int face_varying_channel, + const int ptex_face_index, + const float u, const float v, + float r_varying[2]); + +/* NOTE: Expects derivatives to be correct. + * + * TODO(sergey): This is currently used together with + * BKE_subdiv_eval_final_point() which cas easily evaluate derivatives. + * Would be nice to have dispalcement evaluation function which does not require + * knowing derivatives ahead of a time. + */ +void BKE_subdiv_eval_displacement( + struct Subdiv *subdiv, + const int ptex_face_index, + const float u, const float v, + const float dPdu[3], const float dPdv[3], + float r_D[3]); + +void BKE_subdiv_eval_final_point( + struct Subdiv *subdiv, + const int ptex_face_index, + const float u, const float v, + float r_P[3]); + +/* Patch queries at given resolution. + * + * Will evaluate patch at uniformly distributed (u, v) coordinates on a grid + * of given resolution, producing resolution^2 evaluation points. The order + * goes as u in rows, v in columns. + */ + +void BKE_subdiv_eval_limit_patch_resolution_point( + struct Subdiv *subdiv, + const int ptex_face_index, + const int resolution, + void *buffer, const int offset, const int stride); +void BKE_subdiv_eval_limit_patch_resolution_point_and_derivatives( + struct Subdiv *subdiv, + const int ptex_face_index, + const int resolution, + void *point_buffer, const int point_offset, const int point_stride, + void *du_buffer, const int du_offset, const int du_stride, + void *dv_buffer, const int dv_offset, const int dv_stride); +void BKE_subdiv_eval_limit_patch_resolution_point_and_normal( + struct Subdiv *subdiv, + const int ptex_face_index, + const int resolution, + void *point_buffer, const int point_offset, const int point_stride, + void *normal_buffer, const int normal_offset, const int normal_stride); +void BKE_subdiv_eval_limit_patch_resolution_point_and_short_normal( + struct Subdiv *subdiv, + const int ptex_face_index, + const int resolution, + void *point_buffer, const int point_offset, const int point_stride, + void *normal_buffer, const int normal_offset, const int normal_stride); + +#endif /* __BKE_SUBDIV_EVAL_H__ */ diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index 723cbc6ea8c..0c5428aad57 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -325,6 +325,7 @@ set(SRC BKE_speaker.h BKE_studiolight.h BKE_subdiv.h + BKE_subdiv_eval.h BKE_subdiv_foreach.h BKE_subsurf.h BKE_suggestions.h diff --git a/source/blender/blenkernel/intern/multires_reshape.c b/source/blender/blenkernel/intern/multires_reshape.c index 3a4bb5e5980..182e957ce4a 100644 --- a/source/blender/blenkernel/intern/multires_reshape.c +++ b/source/blender/blenkernel/intern/multires_reshape.c @@ -42,6 +42,7 @@ #include "BKE_modifier.h" #include "BKE_multires.h" #include "BKE_subdiv.h" +#include "BKE_subdiv_eval.h" #include "BKE_subdiv_foreach.h" #include "DEG_depsgraph_query.h" diff --git a/source/blender/blenkernel/intern/subdiv_eval.c b/source/blender/blenkernel/intern/subdiv_eval.c index 7b234683102..f4a9e1a95fd 100644 --- a/source/blender/blenkernel/intern/subdiv_eval.c +++ b/source/blender/blenkernel/intern/subdiv_eval.c @@ -27,7 +27,7 @@ * \ingroup bke */ -#include "BKE_subdiv.h" +#include "BKE_subdiv_eval.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" @@ -37,6 +37,7 @@ #include "BLI_math_vector.h" #include "BKE_customdata.h" +#include "BKE_subdiv.h" #include "MEM_guardedalloc.h" diff --git a/source/blender/blenkernel/intern/subdiv_mesh.c b/source/blender/blenkernel/intern/subdiv_mesh.c index a719fe9c23b..7e8dd06ce9b 100644 --- a/source/blender/blenkernel/intern/subdiv_mesh.c +++ b/source/blender/blenkernel/intern/subdiv_mesh.c @@ -42,6 +42,7 @@ #include "BKE_mesh.h" #include "BKE_key.h" +#include "BKE_subdiv_eval.h" #include "BKE_subdiv_foreach.h" #include "MEM_guardedalloc.h" |