Merged changes in the trunk up to revision 42116.
[blender.git] / source / blender / blenkernel / BKE_multires.h
index 8716794bbd40492df802c5fef74ffa5eb9e05cf6..4f1262cd52357770a02936ccec07f879638e0538 100644 (file)
@@ -1,6 +1,4 @@
 /*
 /*
- * $Id$
- *
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
 #ifndef BKE_MULTIRES_H
 #define BKE_MULTIRES_H
 
 #ifndef BKE_MULTIRES_H
 #define BKE_MULTIRES_H
 
+/** \file BKE_multires.h
+ *  \ingroup bke
+ */
+
 struct DerivedMesh;
 struct Mesh;
 struct MFace;
 struct DerivedMesh;
 struct Mesh;
 struct MFace;
@@ -37,6 +39,8 @@ struct Multires;
 struct MultiresModifierData;
 struct ModifierData;
 struct Object;
 struct MultiresModifierData;
 struct ModifierData;
 struct Object;
+struct Scene;
+struct MDisps;
 
 void multires_mark_as_modified(struct Object *ob);
 
 
 void multires_mark_as_modified(struct Object *ob);
 
@@ -44,18 +48,26 @@ void multires_force_update(struct Object *ob);
 void multires_force_render_update(struct Object *ob);
 void multires_force_external_reload(struct Object *ob);
 
 void multires_force_render_update(struct Object *ob);
 void multires_force_external_reload(struct Object *ob);
 
+void multiresModifier_set_levels_from_disps(struct MultiresModifierData *mmd, struct Object *ob);
+
 struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*,
        int local_mmd, struct DerivedMesh*, struct Object *, int, int);
 
 struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*,
        int local_mmd, struct DerivedMesh*, struct Object *, int, int);
 
-struct MultiresModifierData *find_multires_modifier(struct Object *ob);
-struct DerivedMesh *get_multires_dm(struct Object *ob);
-void multiresModifier_join(struct Object *);
+struct MultiresModifierData *find_multires_modifier_before(struct Scene *scene,
+       struct ModifierData *lastmd);
+struct MultiresModifierData *get_multires_modifier(struct Scene *scene, struct Object *ob, int use_first);
+struct DerivedMesh *get_multires_dm(struct Scene *scene, struct MultiresModifierData *mmd,
+                               struct Object *ob);
 void multiresModifier_del_levels(struct MultiresModifierData *, struct Object *, int direction);
 void multiresModifier_del_levels(struct MultiresModifierData *, struct Object *, int direction);
+void multiresModifier_base_apply(struct MultiresModifierData *mmd, struct Object *ob);
 void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob,
                                int updateblock, int simple);
 void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob,
                                int updateblock, int simple);
-int multiresModifier_reshape(struct Object *dst, struct Object *src);
-int multiresModifier_reshapeFromDM(struct Object *ob, struct DerivedMesh *srcdm);
-int multiresModifier_reshapeFromDeformMod(struct Object *ob, struct ModifierData *md);
+int multiresModifier_reshape(struct Scene *scene, struct MultiresModifierData *mmd,
+                               struct Object *dst, struct Object *src);
+int multiresModifier_reshapeFromDM(struct Scene *scene, struct MultiresModifierData *mmd,
+                               struct Object *ob, struct DerivedMesh *srcdm);
+int multiresModifier_reshapeFromDeformMod(struct Scene *scene, struct MultiresModifierData *mmd,
+                               struct Object *ob, struct ModifierData *md);
 
 void multires_stitch_grids(struct Object *);
 
 
 void multires_stitch_grids(struct Object *);
 
@@ -64,5 +76,23 @@ void multires_free(struct Multires *mr);
 void multires_load_old(struct Object *ob, struct Mesh *me);
 void multires_load_old_250(struct Mesh *);
 
 void multires_load_old(struct Object *ob, struct Mesh *me);
 void multires_load_old_250(struct Mesh *);
 
-#endif
+void multiresModifier_scale_disp(struct Scene *scene, struct Object *ob);
+void multiresModifier_prepare_join(struct Scene *scene, struct Object *ob, struct Object *to_ob);
+
+int multires_mdisp_corners(struct MDisps *s);
+void multires_mdisp_smooth_bounds(struct MDisps *disps);
+
+/* update multires data after topology changing */
+void multires_topology_changed(struct Scene *scene, struct Object *ob);
+
+/**** interpolation stuff ****/
+void old_mdisps_bilinear(float out[3], float (*disps)[3], const int st, float u, float v);
+void mdisp_rot_crn_to_face(const int S, const int corners, const int face_side, const float x, const float y, float *u, float *v);
+int mdisp_rot_face_to_crn(const int corners, const int face_side, const float u, const float v, float *x, float *y);
+int mdisp_rot_face_to_quad_crn(const int corners, const int face_side, const float u, const float v, float *x, float *y);
+void mdisp_apply_weight(const int S, const int corners, int x, int y, const int face_side, float crn_weight[4][2], float *u_r, float *v_r);
+void mdisp_flip_disp(const int S, const int corners, const float axis_x[2], const float axis_y[2], float disp[3]);
+void mdisp_join_tris(struct MDisps *dst, struct MDisps *tri1, struct MDisps *tri2);
+
+#endif // BKE_MULTIRES_H