Blender V5.0
BKE_subdiv_eval.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2018 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
12#include "BLI_span.hh"
13
14struct Mesh;
17
18namespace blender::bke::subdiv {
19
20struct Subdiv;
21
26
28bool eval_begin(Subdiv *subdiv,
29 eSubdivEvaluatorType evaluator_type,
30 OpenSubdiv_EvaluatorCache *evaluator_cache,
31 const OpenSubdiv_EvaluatorSettings *settings);
32
36bool eval_begin_from_mesh(Subdiv *subdiv,
37 const Mesh *mesh,
38 eSubdivEvaluatorType evaluator_type,
39 Span<float3> coarse_vert_positions = {},
40 OpenSubdiv_EvaluatorCache *evaluator_cache = nullptr);
41bool eval_refine_from_mesh(Subdiv *subdiv, const Mesh *mesh, Span<float3> coarse_vert_positions);
42
49void eval_init_displacement(Subdiv *subdiv);
50
51/* Single point queries. */
52
53/* Evaluate point at a limit surface, with optional derivatives and normal. */
54
55float3 eval_limit_point(Subdiv *subdiv, int ptex_face_index, float u, float v);
56void eval_limit_point_and_derivatives(Subdiv *subdiv,
57 int ptex_face_index,
58 float u,
59 float v,
60 float3 &r_P,
61 float3 &r_dPdu,
62 float3 &r_dPdv);
64 Subdiv *subdiv, int ptex_face_index, float u, float v, float3 &r_P, float3 &r_N);
65
68 Subdiv *subdiv, int ptex_face_index, float u, float v, float r_vertex_data[]);
69
71void eval_face_varying(Subdiv *subdiv,
72 int face_varying_channel,
73 int ptex_face_index,
74 float u,
75 float v,
76 float2 &r_face_varying);
77
86void eval_displacement(Subdiv *subdiv,
87 int ptex_face_index,
88 float u,
89 float v,
90 const float3 &dPdu,
91 const float3 &dPdv,
92 float3 &r_D);
93
95float3 eval_final_point(Subdiv *subdiv, int ptex_face_index, float u, float v);
96
97} // namespace blender::bke::subdiv
ATTR_WARN_UNUSED_RESULT const BMVert * v
void eval_init_displacement(Subdiv *subdiv)
float3 eval_final_point(Subdiv *subdiv, int ptex_face_index, float u, float v)
bool eval_begin_from_mesh(Subdiv *subdiv, const Mesh *mesh, eSubdivEvaluatorType evaluator_type, Span< float3 > coarse_vert_positions={}, OpenSubdiv_EvaluatorCache *evaluator_cache=nullptr)
float3 eval_limit_point(Subdiv *subdiv, int ptex_face_index, float u, float v)
bool eval_begin(Subdiv *subdiv, eSubdivEvaluatorType evaluator_type, OpenSubdiv_EvaluatorCache *evaluator_cache, const OpenSubdiv_EvaluatorSettings *settings)
void eval_limit_point_and_normal(Subdiv *subdiv, int ptex_face_index, float u, float v, float3 &r_P, float3 &r_N)
void eval_limit_point_and_derivatives(Subdiv *subdiv, int ptex_face_index, float u, float v, float3 &r_P, float3 &r_dPdu, float3 &r_dPdv)
void eval_displacement(Subdiv *subdiv, int ptex_face_index, float u, float v, const float3 &dPdu, const float3 &dPdv, float3 &r_D)
bool eval_refine_from_mesh(Subdiv *subdiv, const Mesh *mesh, Span< float3 > coarse_vert_positions)
void eval_face_varying(Subdiv *subdiv, int face_varying_channel, int ptex_face_index, float u, float v, float2 &r_face_varying)
void eval_vertex_data(Subdiv *subdiv, int ptex_face_index, float u, float v, float r_vertex_data[])
VecBase< float, 2 > float2
VecBase< float, 3 > float3