Blender  V3.3
BKE_multires.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2007 by Nicholas Bishop. All rights reserved. */
3 
4 #pragma once
5 
10 #include "BKE_subsurf.h"
11 #include "BLI_compiler_compat.h"
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 struct Depsgraph;
18 struct DerivedMesh;
19 struct MDisps;
20 struct Mesh;
21 struct ModifierData;
23 struct Object;
24 struct Scene;
25 struct SubdivCCG;
26 
27 struct MLoop;
28 struct MLoopTri;
29 struct MPoly;
30 struct MVert;
31 
35 void multires_customdata_delete(struct Mesh *me);
36 
37 void multires_set_tot_level(struct Object *ob, struct MultiresModifierData *mmd, int lvl);
38 
40  struct Object *object,
41  enum MultiresModifiedFlags flags);
42 
43 void multires_flush_sculpt_updates(struct Object *object);
44 void multires_force_sculpt_rebuild(struct Object *object);
45 void multires_force_external_reload(struct Object *object);
46 
47 /* internal, only called in subsurf_ccg.c */
48 void multires_modifier_update_mdisps(struct DerivedMesh *dm, struct Scene *scene);
50 
55 
56 typedef enum {
62 
64  struct MultiresModifierData *mmd,
65  struct Scene *scene,
66  struct Object *ob,
67  MultiresFlags flags);
68 
70  struct ModifierData *lastmd);
76  struct Object *ob,
77  bool use_first);
78 int multires_get_level(const struct Scene *scene,
79  const struct Object *ob,
80  const struct MultiresModifierData *mmd,
81  bool render,
82  bool ignore_simplify);
83 
88  struct Object *object,
89  struct MultiresModifierData *mmd);
90 
96  struct Object *object,
97  struct MultiresModifierData *mmd,
98  int *r_num_deformed_verts))[3];
99 
104  struct Scene *scene,
105  struct Object *object,
106  int direction);
108  struct Object *object,
109  struct MultiresModifierData *mmd);
111  struct Object *object,
112  struct MultiresModifierData *mmd,
113  int rebuild_limit,
114  bool switch_view_to_lower_level);
119 void multiresModifier_sync_levels_ex(struct Object *ob_dst,
120  struct MultiresModifierData *mmd_src,
121  struct MultiresModifierData *mmd_dst);
122 
123 void multires_stitch_grids(struct Object *);
124 
126  struct Scene *scene,
127  struct Object *ob);
129  struct Scene *scene,
130  struct Object *ob,
131  struct Object *to_ob);
132 
133 int multires_mdisp_corners(const struct MDisps *s);
134 
138 void multires_topology_changed(struct Mesh *me);
139 
147 void multires_ensure_external_read(struct Mesh *mesh, int top_level);
149  const struct MultiresModifierData *mmd);
150 
151 /**** interpolation stuff ****/
152 /* Adapted from `sculptmode.c` */
153 
154 void old_mdisps_bilinear(float out[3], float (*disps)[3], int st, float u, float v);
159  struct MPoly *mpoly,
160  struct MLoop *mloop,
161  const struct MLoopTri *lt,
162  int face_side,
163  float u,
164  float v,
165  float *x,
166  float *y);
167 
168 /* Reshaping, define in multires_reshape.c */
169 
171  struct Object *object,
172  struct MultiresModifierData *mmd,
173  const float (*vert_coords)[3],
174  int num_vert_coords);
182  struct MultiresModifierData *mmd,
183  struct Object *dst,
184  struct Object *src);
186  struct Object *ob,
187  struct MultiresModifierData *mmd,
188  struct ModifierData *deform_md);
189 bool multiresModifier_reshapeFromCCG(int tot_level,
190  struct Mesh *coarse_mesh,
191  struct SubdivCCG *subdiv_ccg);
192 
193 /* Subdivide multi-res displacement once. */
194 
200 
201 void multiresModifier_subdivide(struct Object *object,
202  struct MultiresModifierData *mmd,
205  struct MultiresModifierData *mmd);
206 
211 void multiresModifier_subdivide_to_level(struct Object *object,
212  struct MultiresModifierData *mmd,
213  int top_level,
215 
216 /* Subdivision integration, defined in multires_subdiv.c */
217 
218 struct SubdivSettings;
219 struct SubdivToMeshSettings;
220 
222  const struct MultiresModifierData *mmd);
223 
224 /* TODO(sergey): Replace this set of boolean flags with bitmask. */
226  const struct Scene *scene,
227  const struct Object *object,
228  const struct MultiresModifierData *mmd,
229  bool use_render_params,
230  bool ignore_simplify,
231  bool ignore_control_edges);
232 
233 /* General helpers. */
234 
241 BLI_INLINE void BKE_multires_construct_tangent_matrix(float tangent_matrix[3][3],
242  const float dPdu[3],
243  const float dPdv[3],
244  int corner);
245 
246 /* Versioning. */
247 
253  struct MultiresModifierData *mmd);
254 
255 #ifdef __cplusplus
256 }
257 #endif
258 
259 #include "intern/multires_inline.h"
typedef float(TangentPoint)[2]
void multires_set_tot_level(struct Object *ob, struct MultiresModifierData *mmd, int lvl)
Definition: multires.c:365
void multiresModifier_prepare_join(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct Object *to_ob)
Definition: multires.c:1431
void multires_force_external_reload(struct Object *object)
Definition: multires.c:457
bool multiresModifier_reshapeFromCCG(int tot_level, struct Mesh *coarse_mesh, struct SubdivCCG *subdiv_ccg)
void multiresModifier_sync_levels_ex(struct Object *ob_dst, struct MultiresModifierData *mmd_src, struct MultiresModifierData *mmd_dst)
Definition: multires.c:1330
void multires_modifier_update_mdisps(struct DerivedMesh *dm, struct Scene *scene)
Definition: multires.c:1019
void multiresModifier_del_levels(struct MultiresModifierData *mmd, struct Scene *scene, struct Object *object, int direction)
Definition: multires.c:695
void multires_stitch_grids(struct Object *)
Definition: multires.c:1178
void multires_force_sculpt_rebuild(struct Object *object)
Definition: multires.c:437
struct MultiresModifierData * get_multires_modifier(struct Scene *scene, struct Object *ob, bool use_first)
Definition: multires.c:317
struct MultiresModifierData * find_multires_modifier_before(struct Scene *scene, struct ModifierData *lastmd)
Definition: multires.c:302
void multires_do_versions_simple_to_catmull_clark(struct Object *object, struct MultiresModifierData *mmd)
void multires_topology_changed(struct Mesh *me)
Definition: multires.c:1448
int mdisp_rot_face_to_crn(struct MVert *mvert, struct MPoly *mpoly, struct MLoop *mloop, const struct MLoopTri *lt, int face_side, float u, float v, float *x, float *y)
BLI_INLINE void BKE_multires_construct_tangent_matrix(float tangent_matrix[3][3], const float dPdu[3], const float dPdv[3], int corner)
void multiresModifier_set_levels_from_disps(struct MultiresModifierData *mmd, struct Object *ob)
Definition: multires.c:503
void old_mdisps_bilinear(float out[3], float(*disps)[3], int st, float u, float v)
Definition: multires.c:1277
void BKE_multires_subdiv_settings_init(struct SubdivSettings *settings, const struct MultiresModifierData *mmd)
int multires_get_level(const struct Scene *scene, const struct Object *ob, const struct MultiresModifierData *mmd, bool render, bool ignore_simplify)
void multiresModifier_base_apply(struct Depsgraph *depsgraph, struct Object *object, struct MultiresModifierData *mmd)
void multires_customdata_delete(struct Mesh *me)
Definition: multires.c:67
MultiresFlags
Definition: BKE_multires.h:56
@ MULTIRES_USE_RENDER_PARAMS
Definition: BKE_multires.h:58
@ MULTIRES_ALLOC_PAINT_MASK
Definition: BKE_multires.h:59
@ MULTIRES_USE_LOCAL_MMD
Definition: BKE_multires.h:57
@ MULTIRES_IGNORE_SIMPLIFY
Definition: BKE_multires.h:60
void BKE_multires_subdiv_mesh_settings_init(struct SubdivToMeshSettings *mesh_settings, const struct Scene *scene, const struct Object *object, const struct MultiresModifierData *mmd, bool use_render_params, bool ignore_simplify, bool ignore_control_edges)
bool multiresModifier_reshapeFromObject(struct Depsgraph *depsgraph, struct MultiresModifierData *mmd, struct Object *dst, struct Object *src)
void multires_ensure_external_read(struct Mesh *mesh, int top_level)
Definition: multires.c:1482
int multires_mdisp_corners(const struct MDisps *s)
bool multiresModifier_reshapeFromVertcos(struct Depsgraph *depsgraph, struct Object *object, struct MultiresModifierData *mmd, const float(*vert_coords)[3], int num_vert_coords)
void multiresModifier_ensure_external_read(struct Mesh *mesh, const struct MultiresModifierData *mmd)
int multiresModifier_rebuild_subdiv(struct Depsgraph *depsgraph, struct Object *object, struct MultiresModifierData *mmd, int rebuild_limit, bool switch_view_to_lower_level)
float(* BKE_multires_create_deformed_base_mesh_vert_coords(struct Depsgraph *depsgraph, struct Object *object, struct MultiresModifierData *mmd, int *r_num_deformed_verts))[3]
Definition: multires.c:249
struct DerivedMesh * multires_make_derived_from_derived(struct DerivedMesh *dm, struct MultiresModifierData *mmd, struct Scene *scene, struct Object *ob, MultiresFlags flags)
Definition: multires.c:1205
eMultiresSubdivideModeType
Definition: BKE_multires.h:195
@ MULTIRES_SUBDIVIDE_LINEAR
Definition: BKE_multires.h:198
@ MULTIRES_SUBDIVIDE_CATMULL_CLARK
Definition: BKE_multires.h:196
@ MULTIRES_SUBDIVIDE_SIMPLE
Definition: BKE_multires.h:197
void multiresModifier_scale_disp(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob)
Definition: multires.c:1421
void multiresModifier_subdivide_to_level(struct Object *object, struct MultiresModifierData *mmd, int top_level, eMultiresSubdivideModeType mode)
bool multiresModifier_reshapeFromDeformModifier(struct Depsgraph *depsgraph, struct Object *ob, struct MultiresModifierData *mmd, struct ModifierData *deform_md)
void multiresModifier_subdivide(struct Object *object, struct MultiresModifierData *mmd, eMultiresSubdivideModeType mode)
void multires_modifier_update_hidden(struct DerivedMesh *dm)
Definition: multires.c:1146
void multires_subdivide_create_tangent_displacement_linear_grids(struct Object *object, struct MultiresModifierData *mmd)
void multires_flush_sculpt_updates(struct Object *object)
Definition: multires.c:408
void multires_mark_as_modified(struct Depsgraph *depsgraph, struct Object *object, enum MultiresModifiedFlags flags)
Definition: multires.c:387
struct Mesh * BKE_multires_create_mesh(struct Depsgraph *depsgraph, struct Object *object, struct MultiresModifierData *mmd)
Definition: multires.c:226
MultiresModifiedFlags
Definition: BKE_subsurf.h:64
#define BLI_INLINE
struct Depsgraph Depsgraph
Definition: DEG_depsgraph.h:35
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
ATTR_WARN_UNUSED_RESULT const BMVert * v
Scene scene
const Depsgraph * depsgraph
SyclQueue void void * src
static const pxr::TfToken st("st", pxr::TfToken::Immortal)
static const pxr::TfToken out("out", pxr::TfToken::Immortal)
struct MVert * mvert
struct MLoop * mloop
struct MPoly * mpoly