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