Blender  V3.3
BKE_subdiv_eval.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2018 Blender Foundation. All rights reserved. */
3 
8 #pragma once
9 
10 #include "BLI_sys_types.h"
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 struct Mesh;
19 struct Subdiv;
20 
21 typedef enum eSubdivEvaluatorType {
25 
26 /* Returns true if evaluator is ready for use. */
27 bool BKE_subdiv_eval_begin(struct Subdiv *subdiv,
28  eSubdivEvaluatorType evaluator_type,
29  struct OpenSubdiv_EvaluatorCache *evaluator_cache,
31 
32 /* coarse_vertex_cos is an optional argument which allows to override coordinates of the coarse
33  * mesh. */
35  const struct Mesh *mesh,
36  const float (*coarse_vertex_cos)[3],
37  eSubdivEvaluatorType evaluator_type,
38  struct OpenSubdiv_EvaluatorCache *evaluator_cache);
40  const struct Mesh *mesh,
41  const float (*coarse_vertex_cos)[3]);
42 
43 /* Makes sure displacement evaluator is initialized.
44  *
45  * NOTE: This function must be called once before evaluating displacement or
46  * final surface position. */
47 void BKE_subdiv_eval_init_displacement(struct Subdiv *subdiv);
48 
49 /* Single point queries. */
50 
51 /* Evaluate point at a limit surface, with optional derivatives and normal. */
52 
54  struct Subdiv *subdiv, int ptex_face_index, float u, float v, float r_P[3]);
56  int ptex_face_index,
57  float u,
58  float v,
59  float r_P[3],
60  float r_dPdu[3],
61  float r_dPdv[3]);
63  struct Subdiv *subdiv, int ptex_face_index, float u, float v, float r_P[3], float r_N[3]);
64 
65 /* Evaluate smoothly interpolated vertex data (such as ORCO). */
66 void BKE_subdiv_eval_vertex_data(struct Subdiv *subdiv,
67  const int ptex_face_index,
68  const float u,
69  const float v,
70  float r_vertex_data[]);
71 
72 /* Evaluate face-varying layer (such as UV). */
73 void BKE_subdiv_eval_face_varying(struct Subdiv *subdiv,
74  int face_varying_channel,
75  int ptex_face_index,
76  float u,
77  float v,
78  float r_face_varying[2]);
79 
80 /* NOTE: Expects derivatives to be correct.
81  *
82  * TODO(sergey): This is currently used together with
83  * BKE_subdiv_eval_final_point() which can easily evaluate derivatives.
84  * Would be nice to have displacement evaluation function which does not require
85  * knowing derivatives ahead of a time. */
86 void BKE_subdiv_eval_displacement(struct Subdiv *subdiv,
87  int ptex_face_index,
88  float u,
89  float v,
90  const float dPdu[3],
91  const float dPdv[3],
92  float r_D[3]);
93 
94 /* Evaluate point on a limit surface with displacement applied to it. */
96  struct Subdiv *subdiv, int ptex_face_index, float u, float v, float r_P[3]);
97 
98 #ifdef __cplusplus
99 }
100 #endif
void BKE_subdiv_eval_limit_point_and_normal(struct Subdiv *subdiv, int ptex_face_index, float u, float v, float r_P[3], float r_N[3])
Definition: subdiv_eval.c:320
eSubdivEvaluatorType
@ SUBDIV_EVALUATOR_TYPE_GPU
@ SUBDIV_EVALUATOR_TYPE_CPU
bool BKE_subdiv_eval_begin(struct Subdiv *subdiv, eSubdivEvaluatorType evaluator_type, struct OpenSubdiv_EvaluatorCache *evaluator_cache, const struct OpenSubdiv_EvaluatorSettings *settings)
bool BKE_subdiv_eval_refine_from_mesh(struct Subdiv *subdiv, const struct Mesh *mesh, const float(*coarse_vertex_cos)[3])
void BKE_subdiv_eval_init_displacement(struct Subdiv *subdiv)
Definition: subdiv_eval.c:265
void BKE_subdiv_eval_vertex_data(struct Subdiv *subdiv, const int ptex_face_index, const float u, const float v, float r_vertex_data[])
Definition: subdiv_eval.c:333
void BKE_subdiv_eval_displacement(struct Subdiv *subdiv, int ptex_face_index, float u, float v, const float dPdu[3], const float dPdv[3], float r_D[3])
Definition: subdiv_eval.c:350
void BKE_subdiv_eval_final_point(struct Subdiv *subdiv, int ptex_face_index, float u, float v, float r_P[3])
Definition: subdiv_eval.c:366
void BKE_subdiv_eval_limit_point(struct Subdiv *subdiv, int ptex_face_index, float u, float v, float r_P[3])
Definition: subdiv_eval.c:280
void BKE_subdiv_eval_face_varying(struct Subdiv *subdiv, int face_varying_channel, int ptex_face_index, float u, float v, float r_face_varying[2])
Definition: subdiv_eval.c:339
bool BKE_subdiv_eval_begin_from_mesh(struct Subdiv *subdiv, const struct Mesh *mesh, const float(*coarse_vertex_cos)[3], eSubdivEvaluatorType evaluator_type, struct OpenSubdiv_EvaluatorCache *evaluator_cache)
void BKE_subdiv_eval_limit_point_and_derivatives(struct Subdiv *subdiv, int ptex_face_index, float u, float v, float r_P[3], float r_dPdu[3], float r_dPdv[3])
Definition: subdiv_eval.c:286
ATTR_WARN_UNUSED_RESULT const BMVert * v
SubdivSettings settings
Definition: BKE_subdiv.h:160