Merged changes in the trunk up to revision 42116.
[blender.git] / source / blender / blenkernel / BKE_multires.h
index 53ead3a5eda21e8ac062ce7d9a034d79bc05862a..4f1262cd52357770a02936ccec07f879638e0538 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
@@ -15,7 +13,7 @@
  *
  * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
  * The Original Code is Copyright (C) 2007 by Nicholas Bishop
  * All rights reserved.
  * ***** END GPL LICENSE BLOCK *****
  */ 
 
+#ifndef BKE_MULTIRES_H
+#define BKE_MULTIRES_H
+
+/** \file BKE_multires.h
+ *  \ingroup bke
+ */
+
 struct DerivedMesh;
 struct Mesh;
 struct MFace;
+struct Multires;
 struct MultiresModifierData;
+struct ModifierData;
 struct Object;
-
-typedef struct MultiresSubsurf {
-       struct MultiresModifierData *mmd;
-       struct Object *ob;
-       int local_mmd;
-} MultiresSubsurf;
+struct Scene;
+struct MDisps;
 
 void multires_mark_as_modified(struct Object *ob);
 
 void multires_force_update(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);
-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_base_apply(struct MultiresModifierData *mmd, struct Object *ob);
 void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob,
                                int updateblock, int simple);
-int multiresModifier_reshape(struct MultiresModifierData *mmd, struct Object *dst, struct Object *src);
+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 *);
 
 /* Related to the old multires */
-struct Multires;
-void multires_load_old(struct DerivedMesh *, struct Multires *);
-void multires_free(struct Multires*);
+void multires_free(struct Multires *mr);
+void multires_load_old(struct Object *ob, struct Mesh *me);
+void multires_load_old_250(struct Mesh *);
+
+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
+