Long waited feature: Render Baking
[blender.git] / source / blender / render / extern / include / RE_shader_ext.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2006 by Blender Foundation
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL/BL DUAL LICENSE BLOCK *****
28  */
29
30 #ifndef RE_SHADER_EXT_H
31 #define RE_SHADER_EXT_H
32
33 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
34 /* this include is for shading and texture exports            */
35 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
36
37 /* localized texture result data */
38 /* note; tr tg tb ta has to remain in this order */
39 typedef struct TexResult {
40         float tin, tr, tg, tb, ta;
41         int talpha;
42         float *nor;
43 } TexResult;
44
45 /* localized shade result data */
46 typedef struct ShadeResult 
47 {
48         float combined[4];
49         float col[4];
50         float alpha;
51         float diff[3];
52         float spec[3];
53         float shad[3];
54         float ao[3];
55         float ray[3];
56         float nor[3];
57         float winspeed[4];
58         
59 } ShadeResult;
60
61 /* localized renderloop data */
62 typedef struct ShadeInput
63 {
64         struct Material *mat;
65         struct VlakRen *vlr;
66         float co[3];
67         
68         /* copy from material, keep synced so we can do memcopy */
69         /* current size: 23*4 */
70         float r, g, b;
71         float specr, specg, specb;
72         float mirr, mirg, mirb;
73         float ambr, ambb, ambg;
74         
75         float amb, emit, ang, spectra, ray_mirror;
76         float alpha, refl, spec, zoffs, add;
77         float translucency;
78         /* end direct copy from material */
79         
80         /* individual copies: */
81         int har;
82         float layerfac;
83         
84         /* base material mode (OR-ed result of entire node tree) */
85         int mode;
86         
87         /* texture coordinates */
88         float lo[3], gl[3], uv[3], ref[3], orn[3], winco[3], sticky[3], vcol[3], rad[3];
89         float vn[3], vno[3], facenor[3], view[3], refcol[4], displace[3];
90         float strand, tang[3], stress, winspeed[4];
91         
92         /* dx/dy OSA coordinates */
93         float dxco[3], dyco[3];
94         float dxlo[3], dylo[3], dxgl[3], dygl[3], dxuv[3], dyuv[3];
95         float dxref[3], dyref[3], dxorn[3], dyorn[3];
96         float dxno[3], dyno[3], dxview, dyview;
97         float dxlv[3], dylv[3];
98         float dxwin[3], dywin[3];
99         float dxsticky[3], dysticky[3];
100         float dxrefract[3], dyrefract[3];
101         float dxstrand, dystrand;
102         
103         int xs, ys;                     /* pixel to be rendered */
104         short do_preview;       /* for nodes, in previewrender */
105         short thread;
106         short osatex, puno;
107         int mask;
108         int depth;                      /* 1 or larger on raytrace shading */
109         int facenr;
110         unsigned int lay;
111 } ShadeInput;
112
113
114 /* node shaders... */
115 struct Tex;
116 int     multitex_ext(struct Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, struct TexResult *texres);
117
118 /* shaded view and bake */
119 struct Render;
120 void RE_shade_external(struct Render *re, struct ShadeInput *shi, struct ShadeResult *shr);
121 void RE_bake_shade_all_selected(struct Render *re, int type);
122
123 #endif /* RE_SHADER_EXT_H */
124