Merged changes in the trunk up to revision 53584.
[blender.git] / source / blender / blenkernel / BKE_pointcache.h
index fcfa6ccf9f4103c031e37d5d14d9e62fea617606..77b35e1a25cee85451ed15cf829cad7c00e8b8e6 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * ***** END GPL LICENSE BLOCK *****
  */
 
-#ifndef BKE_POINTCACHE_H
-#define BKE_POINTCACHE_H
+#ifndef __BKE_POINTCACHE_H__
+#define __BKE_POINTCACHE_H__
 
 /** \file BKE_pointcache.h
  *  \ingroup bke
  */
 
 #include "DNA_ID.h"
+#include "DNA_dynamicpaint_types.h"
 #include "DNA_object_force.h"
 #include "DNA_boid_types.h"
 #include <stdio.h> /* for FILE */
 
 /* 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 */
-#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_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 */
-#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_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 */
-#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 */
-#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;
@@ -115,7 +115,7 @@ typedef struct 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;
@@ -127,6 +127,9 @@ typedef struct PTCacheID {
        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;
 
@@ -140,7 +143,7 @@ typedef struct PTCacheID {
        /* copies point data to cache data */
        int (*write_stream)(PTCacheFile *pf, void *calldata);
        /* copies cache cata to point data */
-       void (*read_stream)(PTCacheFile *pf, void *calldata);
+       int (*read_stream)(PTCacheFile *pf, void *calldata);
 
        /* copies custom extradata to cache data */
        void (*write_extra_data)(void *calldata, struct PTCacheMem *pm, int cfra);
@@ -179,12 +182,12 @@ typedef struct PTCacheBaker {
 } 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;
@@ -197,10 +200,10 @@ typedef struct PTCacheEditKey{
 } 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;
@@ -239,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;
 
-       struct ParticleCacheKey **pathcache;    /* path cache (runtime) */
+       struct ParticleCacheKey **pathcache;    /* path cache (runtime) */
        ListBase pathcachebufs;
 
        int totpoint, totframes, totcached, edited;
@@ -256,6 +259,7 @@ void BKE_ptcache_id_from_softbody(PTCacheID *pid, struct Object *ob, struct Soft
 void BKE_ptcache_id_from_particles(PTCacheID *pid, struct Object *ob, struct ParticleSystem *psys);
 void BKE_ptcache_id_from_cloth(PTCacheID *pid, struct Object *ob, struct ClothModifierData *clmd);
 void BKE_ptcache_id_from_smoke(PTCacheID *pid, struct Object *ob, struct SmokeModifierData *smd);
+void BKE_ptcache_id_from_dynamicpaint(PTCacheID *pid, struct Object *ob, struct DynamicPaintSurface *surface);
 
 void BKE_ptcache_ids_from_object(struct ListBase *lb, struct Object *ob, struct Scene *scene, int duplis);
 
@@ -263,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_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. */
-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);
@@ -284,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);
 
-/* 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. */
-int            BKE_ptcache_read(PTCacheID *pid, float cfra);
+int     BKE_ptcache_read(PTCacheID *pid, float cfra);
 
 /* 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);
@@ -305,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);
-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 *********************/
 
@@ -313,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_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);
@@ -325,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_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);