Cleanup: use 'e' prefix for enum typedefs
[blender-staging.git] / source / blender / render / extern / include / RE_bake.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  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2010 Blender Foundation.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s):
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file RE_bake.h
29  *  \ingroup render
30  */
31
32 #ifndef __RE_BAKE_H__
33 #define __RE_BAKE_H__
34
35 struct ImBuf;
36 struct Render;
37 struct Mesh;
38
39 typedef struct BakeImage {
40         struct Image *image;
41         int width;
42         int height;
43         size_t offset;
44 } BakeImage;
45
46 typedef struct BakeImages {
47         BakeImage *data; /* all the images of an object */
48         int *lookup;     /* lookup table from Material to BakeImage */
49         int size;
50 } BakeImages;
51
52 typedef struct BakePixel {
53         int primitive_id, object_id;
54         float uv[2];
55         float du_dx, du_dy;
56         float dv_dx, dv_dy;
57 } BakePixel;
58
59 typedef struct BakeHighPolyData {
60         struct Object *ob;
61         struct ModifierData *tri_mod;
62         struct Mesh *me;
63         char restrict_flag;
64         bool is_flip_object;
65
66         float obmat[4][4];
67         float imat[4][4];
68 } BakeHighPolyData;
69
70 /* external_engine.c */
71 bool RE_bake_has_engine(struct Render *re);
72
73 bool RE_bake_engine(
74         struct Render *re, struct Object *object, const int object_id, const BakePixel pixel_array[],
75         const size_t num_pixels, const int depth, const eScenePassType pass_type, const int pass_filter, float result[]);
76
77 /* bake.c */
78 int RE_pass_depth(const eScenePassType pass_type);
79 bool RE_bake_internal(
80         struct Render *re, struct Object *object, const BakePixel pixel_array[],
81         const size_t num_pixels, const int depth, const eScenePassType pass_type, float result[]);
82
83 bool RE_bake_pixels_populate_from_objects(
84         struct Mesh *me_low, BakePixel pixel_array_from[], BakePixel pixel_array_to[],
85         BakeHighPolyData highpoly[], const int tot_highpoly, const size_t num_pixels, const bool is_custom_cage,
86         const float cage_extrusion, float mat_low[4][4], float mat_cage[4][4], struct Mesh *me_cage);
87
88 void RE_bake_pixels_populate(
89         struct Mesh *me, struct BakePixel *pixel_array,
90         const size_t num_pixels, const struct BakeImages *bake_images, const char *uv_layer);
91
92 void RE_bake_mask_fill(const BakePixel pixel_array[], const size_t num_pixels, char *mask);
93
94 void RE_bake_margin(struct ImBuf *ibuf, char *mask, const int margin);
95
96 void RE_bake_normal_world_to_object(
97         const BakePixel pixel_array[], const size_t num_pixels, const int depth, float result[],
98         struct Object *ob, const eBakeNormalSwizzle normal_swizzle[3]);
99 void RE_bake_normal_world_to_tangent(
100         const BakePixel pixel_array[], const size_t num_pixels, const int depth, float result[],
101         struct Mesh *me, const eBakeNormalSwizzle normal_swizzle[3], float mat[4][4]);
102 void RE_bake_normal_world_to_world(
103         const BakePixel pixel_array[], const size_t num_pixels, const int depth, float result[],
104         const eBakeNormalSwizzle normal_swizzle[3]);
105
106 void RE_bake_ibuf_clear(struct Image *image, const bool is_tangent);
107
108 #endif  /* __RE_BAKE_H__ */