Merged changes in the trunk up to revision 53584.
[blender.git] / source / blender / blenkernel / BKE_pointcache.h
index b7f60af38a6eec53563dc3f93eef03edd081bcf3..77b35e1a25cee85451ed15cf829cad7c00e8b8e6 100644 (file)
@@ -1,33 +1,32 @@
 /*
 /*
-*
-* ***** BEGIN GPL LICENSE BLOCK *****
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-* The Original Code is Copyright (C) 2006 Blender Foundation.
-* All rights reserved.
-*
-* The Original Code is: all of this file.
-*
-* Contributor(s): Campbell Barton <ideasman42@gmail.com>
-*
-* ***** END GPL LICENSE BLOCK *****
-*/
-
-#ifndef BKE_POINTCACHE_H
-#define BKE_POINTCACHE_H
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2006 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Campbell Barton <ideasman42@gmail.com>
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BKE_POINTCACHE_H__
+#define __BKE_POINTCACHE_H__
 
 /** \file BKE_pointcache.h
  *  \ingroup bke
 
 /** \file BKE_pointcache.h
  *  \ingroup bke
 
 /* Point cache clearing option, for BKE_ptcache_id_clear, before
  * and after are non inclusive (they wont remove the cfra) */
 
 /* Point cache clearing option, for BKE_ptcache_id_clear, before
  * and after are non inclusive (they wont remove the cfra) */
-#define PTCACHE_CLEAR_ALL              0
-#define PTCACHE_CLEAR_FRAME            1
-#define PTCACHE_CLEAR_BEFORE   2
-#define PTCACHE_CLEAR_AFTER            3
+#define PTCACHE_CLEAR_ALL       0
+#define PTCACHE_CLEAR_FRAME     1
+#define PTCACHE_CLEAR_BEFORE    2
+#define PTCACHE_CLEAR_AFTER     3
 
 /* Point cache reset options */
 
 /* Point cache reset options */
-#define PTCACHE_RESET_DEPSGRAPH                0
-#define PTCACHE_RESET_BAKED                    1
-#define PTCACHE_RESET_OUTDATED         2
+#define PTCACHE_RESET_DEPSGRAPH     0
+#define PTCACHE_RESET_BAKED         1
+#define PTCACHE_RESET_OUTDATED      2
 /* #define PTCACHE_RESET_FREE                  3 */ /*UNUSED*/
 
 /* Add the blendfile name after blendcache_ */
 /* #define PTCACHE_RESET_FREE                  3 */ /*UNUSED*/
 
 /* Add the blendfile name after blendcache_ */
 #define PTCACHE_PATH "blendcache_"
 
 /* File open options, for BKE_ptcache_file_open */
 #define PTCACHE_PATH "blendcache_"
 
 /* File open options, for BKE_ptcache_file_open */
-#define PTCACHE_FILE_READ      0
-#define PTCACHE_FILE_WRITE     1
-#define PTCACHE_FILE_UPDATE    2
+#define PTCACHE_FILE_READ   0
+#define PTCACHE_FILE_WRITE  1
+#define PTCACHE_FILE_UPDATE 2
 
 /* PTCacheID types */
 
 /* PTCacheID types */
-#define PTCACHE_TYPE_SOFTBODY                  0
-#define PTCACHE_TYPE_PARTICLES                 1
-#define PTCACHE_TYPE_CLOTH                             2
-#define PTCACHE_TYPE_SMOKE_DOMAIN              3
-#define PTCACHE_TYPE_SMOKE_HIGHRES             4
-#define PTCACHE_TYPE_DYNAMICPAINT              5
+#define PTCACHE_TYPE_SOFTBODY           0
+#define PTCACHE_TYPE_PARTICLES          1
+#define PTCACHE_TYPE_CLOTH              2
+#define PTCACHE_TYPE_SMOKE_DOMAIN       3
+#define PTCACHE_TYPE_SMOKE_HIGHRES      4
+#define PTCACHE_TYPE_DYNAMICPAINT       5
 
 /* high bits reserved for flags that need to be stored in file */
 
 /* high bits reserved for flags that need to be stored in file */
-#define PTCACHE_TYPEFLAG_COMPRESS              (1<<16)
-#define PTCACHE_TYPEFLAG_EXTRADATA             (1<<17)
+#define PTCACHE_TYPEFLAG_COMPRESS       (1 << 16)
+#define PTCACHE_TYPEFLAG_EXTRADATA      (1 << 17)
 
 
-#define PTCACHE_TYPEFLAG_TYPEMASK                      0x0000FFFF
-#define PTCACHE_TYPEFLAG_FLAGMASK                      0xFFFF0000
+#define PTCACHE_TYPEFLAG_TYPEMASK           0x0000FFFF
+#define PTCACHE_TYPEFLAG_FLAGMASK           0xFFFF0000
 
 /* PTCache read return code */
 
 /* PTCache read return code */
-#define PTCACHE_READ_EXACT                             1
-#define PTCACHE_READ_INTERPOLATED              2
-#define PTCACHE_READ_OLD                               3
+#define PTCACHE_READ_EXACT              1
+#define PTCACHE_READ_INTERPOLATED       2
+#define PTCACHE_READ_OLD                3
 
 /* Structs */
 struct ClothModifierData;
 
 /* Structs */
 struct ClothModifierData;
@@ -116,7 +115,7 @@ typedef struct PTCacheFile {
        void *cur[BPHYS_TOT_DATA];
 } PTCacheFile;
 
        void *cur[BPHYS_TOT_DATA];
 } PTCacheFile;
 
-#define PTCACHE_VEL_PER_SEC            1
+#define PTCACHE_VEL_PER_SEC     1
 
 typedef struct PTCacheID {
        struct PTCacheID *next, *prev;
 
 typedef struct PTCacheID {
        struct PTCacheID *next, *prev;
@@ -128,6 +127,9 @@ typedef struct PTCacheID {
        unsigned int stack_index;
        unsigned int flag;
 
        unsigned int stack_index;
        unsigned int flag;
 
+       unsigned int default_step;
+       unsigned int max_step;
+
        /* flags defined in DNA_object_force.h */
        unsigned int data_types, info_types;
 
        /* flags defined in DNA_object_force.h */
        unsigned int data_types, info_types;
 
@@ -180,12 +182,12 @@ typedef struct PTCacheBaker {
 } PTCacheBaker;
 
 /* PTCacheEditKey->flag */
 } PTCacheBaker;
 
 /* PTCacheEditKey->flag */
-#define PEK_SELECT             1
-#define PEK_TAG                        2
-#define PEK_HIDE               4
-#define PEK_USE_WCO            8
+#define PEK_SELECT      1
+#define PEK_TAG         2
+#define PEK_HIDE        4
+#define PEK_USE_WCO     8
 
 
-typedef struct PTCacheEditKey{
+typedef struct PTCacheEditKey {
        float *co;
        float *vel;
        float *rot;
        float *co;
        float *vel;
        float *rot;
@@ -198,10 +200,10 @@ typedef struct PTCacheEditKey{
 } PTCacheEditKey;
 
 /* PTCacheEditPoint->flag */
 } PTCacheEditKey;
 
 /* PTCacheEditPoint->flag */
-#define PEP_TAG                                1
-#define PEP_EDIT_RECALC                2
-#define PEP_TRANSFORM          4
-#define PEP_HIDE                       8
+#define PEP_TAG             1
+#define PEP_EDIT_RECALC     2
+#define PEP_TRANSFORM       4
+#define PEP_HIDE            8
 
 typedef struct PTCacheEditPoint {
        struct PTCacheEditKey *keys;
 
 typedef struct PTCacheEditPoint {
        struct PTCacheEditKey *keys;
@@ -240,7 +242,7 @@ typedef struct PTCacheEdit {
        float *emitter_cosnos; /* localspace face centers and normals (average of its verts), from the derived mesh */
        int *mirror_cache;
 
        float *emitter_cosnos; /* localspace face centers and normals (average of its verts), from the derived mesh */
        int *mirror_cache;
 
-       struct ParticleCacheKey **pathcache;    /* path cache (runtime) */
+       struct ParticleCacheKey **pathcache;    /* path cache (runtime) */
        ListBase pathcachebufs;
 
        int totpoint, totframes, totcached, edited;
        ListBase pathcachebufs;
 
        int totpoint, totframes, totcached, edited;
@@ -265,18 +267,18 @@ void BKE_ptcache_ids_from_object(struct ListBase *lb, struct Object *ob, struct
 void BKE_ptcache_remove(void);
 
 /************ ID specific functions ************************/
 void BKE_ptcache_remove(void);
 
 /************ ID specific functions ************************/
-void   BKE_ptcache_id_clear(PTCacheID *id, int mode, unsigned int cfra);
-int            BKE_ptcache_id_exist(PTCacheID *id, int cfra);
-int            BKE_ptcache_id_reset(struct Scene *scene, PTCacheID *id, int mode);
-void   BKE_ptcache_id_time(PTCacheID *pid, struct Scene *scene, float cfra, int *startframe, int *endframe, float *timescale);
-int            BKE_ptcache_object_reset(struct Scene *scene, struct Object *ob, int mode);
+void    BKE_ptcache_id_clear(PTCacheID *id, int mode, unsigned int cfra);
+int     BKE_ptcache_id_exist(PTCacheID *id, int cfra);
+int     BKE_ptcache_id_reset(struct Scene *scene, PTCacheID *id, int mode);
+void    BKE_ptcache_id_time(PTCacheID *pid, struct Scene *scene, float cfra, int *startframe, int *endframe, float *timescale);
+int     BKE_ptcache_object_reset(struct Scene *scene, struct Object *ob, int mode);
 
 void BKE_ptcache_update_info(PTCacheID *pid);
 
 /*********** General cache reading/writing ******************/
 
 /* Size of cache data type. */
 
 void BKE_ptcache_update_info(PTCacheID *pid);
 
 /*********** General cache reading/writing ******************/
 
 /* Size of cache data type. */
-int            BKE_ptcache_data_size(int data_type);
+int     BKE_ptcache_data_size(int data_type);
 
 /* Is point with indes in memory cache */
 int BKE_ptcache_mem_index_find(struct PTCacheMem *pm, unsigned int index);
 
 /* Is point with indes in memory cache */
 int BKE_ptcache_mem_index_find(struct PTCacheMem *pm, unsigned int index);
@@ -286,17 +288,11 @@ void BKE_ptcache_mem_pointers_init(struct PTCacheMem *pm);
 void BKE_ptcache_mem_pointers_incr(struct PTCacheMem *pm);
 int  BKE_ptcache_mem_pointers_seek(int point_index, struct PTCacheMem *pm);
 
 void BKE_ptcache_mem_pointers_incr(struct PTCacheMem *pm);
 int  BKE_ptcache_mem_pointers_seek(int point_index, struct PTCacheMem *pm);
 
-/* Copy a specific data type from cache data to point data. */
-void   BKE_ptcache_data_get(void **data, int type, int index, void *to);
-
-/* Copy a specific data type from point data to cache data. */
-void   BKE_ptcache_data_set(void **data, int type, void *from);
-
 /* Main cache reading call. */
 /* Main cache reading call. */
-int            BKE_ptcache_read(PTCacheID *pid, float cfra);
+int     BKE_ptcache_read(PTCacheID *pid, float cfra);
 
 /* Main cache writing call. */
 
 /* Main cache writing call. */
-int            BKE_ptcache_write(PTCacheID *pid, unsigned int cfra);
+int     BKE_ptcache_write(PTCacheID *pid, unsigned int cfra);
 
 /****************** Continue physics ***************/
 void BKE_ptcache_set_continue_physics(struct Main *bmain, struct Scene *scene, int enable);
 
 /****************** Continue physics ***************/
 void BKE_ptcache_set_continue_physics(struct Main *bmain, struct Scene *scene, int enable);
@@ -307,7 +303,7 @@ struct PointCache *BKE_ptcache_add(struct ListBase *ptcaches);
 void BKE_ptcache_free_mem(struct ListBase *mem_cache);
 void BKE_ptcache_free(struct PointCache *cache);
 void BKE_ptcache_free_list(struct ListBase *ptcaches);
 void BKE_ptcache_free_mem(struct ListBase *mem_cache);
 void BKE_ptcache_free(struct PointCache *cache);
 void BKE_ptcache_free_list(struct ListBase *ptcaches);
-struct PointCache *BKE_ptcache_copy_list(struct ListBase *ptcaches_new, struct ListBase *ptcaches_old);
+struct PointCache *BKE_ptcache_copy_list(struct ListBase *ptcaches_new, struct ListBase *ptcaches_old, int copy_data);
 
 /********************** Baking *********************/
 
 
 /********************** Baking *********************/
 
@@ -315,7 +311,7 @@ struct PointCache *BKE_ptcache_copy_list(struct ListBase *ptcaches_new, struct L
 void BKE_ptcache_quick_cache_all(struct Main *bmain, struct Scene *scene);
 
 /* Bake cache or simulate to current frame with settings defined in the baker. */
 void BKE_ptcache_quick_cache_all(struct Main *bmain, struct Scene *scene);
 
 /* Bake cache or simulate to current frame with settings defined in the baker. */
-void BKE_ptcache_bake(struct PTCacheBakerbaker);
+void BKE_ptcache_bake(struct PTCacheBaker *baker);
 
 /* Convert disk cache to memory cache. */
 void BKE_ptcache_disk_to_mem(struct PTCacheID *pid);
 
 /* Convert disk cache to memory cache. */
 void BKE_ptcache_disk_to_mem(struct PTCacheID *pid);
@@ -327,7 +323,7 @@ void BKE_ptcache_mem_to_disk(struct PTCacheID *pid);
 void BKE_ptcache_toggle_disk_cache(struct PTCacheID *pid);
 
 /* Rename all disk cache files with a new name. Doesn't touch the actual content of the files. */
 void BKE_ptcache_toggle_disk_cache(struct PTCacheID *pid);
 
 /* Rename all disk cache files with a new name. Doesn't touch the actual content of the files. */
-void BKE_ptcache_disk_cache_rename(struct PTCacheID *pid, char *from, char *to);
+void BKE_ptcache_disk_cache_rename(struct PTCacheID *pid, const char *name_src, const char *name_dst);
 
 /* Loads simulation from external (disk) cache files. */
 void BKE_ptcache_load_external(struct PTCacheID *pid);
 
 /* Loads simulation from external (disk) cache files. */
 void BKE_ptcache_load_external(struct PTCacheID *pid);