d9cbed815fc12cf6f8403cf7778c2c1cb4350b85
[blender.git] / source / blender / blenkernel / BKE_dynamicpaint.h
1 /**
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * Contributor(s): Miika Hämäläinen
10  *
11  * ***** END GPL LICENSE BLOCK *****
12  */
13
14 #ifndef BKE_DYNAMIC_PAINT_H_
15 #define BKE_DYNAMIC_PAINT_H_
16
17 #include "DNA_dynamicpaint_types.h"
18
19 struct bContext;
20 struct wmOperator;
21
22 /* Actual surface point */
23 typedef struct PaintSurfaceData {
24         void *format_data; /* special data for each surface "format" */
25         void *type_data; /* data used by specific surface type */
26         struct PaintAdjData *adj_data; /* adjacency data for current surface */
27
28         struct PaintBakeData *bData; /* temporary per step data used for frame calculation */
29         unsigned int total_points;
30
31 } PaintSurfaceData;
32
33 /* Paint type surface point     */
34 typedef struct PaintPoint {
35
36         /* Wet paint is handled at effect layer only
37         *  and mixed to surface when drying */
38         float e_color[3];
39         float e_alpha;
40         float wetness;
41         short state;    /* -1 = doesn't exist (On UV mapped image
42                                         *           there can be points that doesn't exist on mesh surface)
43                                         *  0 = empty or dry
44                                         *  1 = wet paint
45                                         *  2 = new paint */
46         float color[3];
47         float alpha;
48 } PaintPoint;
49
50 /* heigh field waves    */
51 typedef struct PaintWavePoint {         
52
53         float height;
54         float velocity;
55         short state; /* 0 = neutral
56                                  *  1 = obstacle
57                                  *  2 = reflect only */
58 } PaintWavePoint;
59
60 struct DerivedMesh *dynamicPaint_Modifier_do(struct DynamicPaintModifierData *pmd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm);
61 void dynamicPaint_Modifier_free (struct DynamicPaintModifierData *pmd);
62 void dynamicPaint_Modifier_copy(struct DynamicPaintModifierData *pmd, struct DynamicPaintModifierData *tsmd);
63
64 int dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, struct Scene *scene);
65 struct DynamicPaintSurface *dynamicPaint_createNewSurface(struct DynamicPaintCanvasSettings *canvas, struct Scene *scene);
66 void dynamicPaint_clearSurface(struct DynamicPaintSurface *surface);
67 int  dynamicPaint_resetSurface(struct DynamicPaintSurface *surface);
68 void dynamicPaint_freeSurface(struct DynamicPaintSurface *surface);
69 void dynamicPaint_freeCanvas(struct DynamicPaintModifierData *pmd);
70 void dynamicPaint_freeBrush(struct DynamicPaintModifierData *pmd);
71 void dynamicPaint_freeSurfaceData(struct DynamicPaintSurface *surface);
72
73 void dynamicPaint_cacheUpdateFrames(struct DynamicPaintSurface *surface);
74 int  dynamicPaint_surfaceHasColorPreview(struct DynamicPaintSurface *surface);
75 int dynamicPaint_outputLayerExists(struct DynamicPaintSurface *surface, struct Object *ob, int index);
76 void dynamicPaintSurface_updateType(struct DynamicPaintSurface *surface);
77 void dynamicPaintSurface_setUniqueName(struct DynamicPaintSurface *surface, char *basename);
78 void dynamicPaint_resetPreview(struct DynamicPaintCanvasSettings *canvas);
79 struct DynamicPaintSurface *get_activeSurface(struct DynamicPaintCanvasSettings *canvas);
80
81 /* image sequence baking */
82 int dynamicPaint_createUVSurface(struct DynamicPaintSurface *surface);
83 int dynamicPaint_calculateFrame(struct DynamicPaintSurface *surface, struct Scene *scene, struct Object *cObject, int frame);
84 void dynamicPaint_outputImage(struct DynamicPaintSurface *surface, char* filename, short format, short type);
85
86
87 /* surface -> image file flags */
88 #define DPOUTPUT_JPEG 0
89 #define DPOUTPUT_PNG 1
90 #define DPOUTPUT_OPENEXR 2
91
92 #define DPOUTPUT_PAINT 0
93 #define DPOUTPUT_WET 1
94 #define DPOUTPUT_DISPLACE 2
95 #define DPOUTPUT_WAVES 3
96
97 #endif /* BKE_DYNAMIC_PAINT_H_ */