patch by Charlie, related to recent changes of multi-uv/lightmap generation. This...
[blender.git] / source / gameengine / Ketsji / BL_Material.h
1 #ifndef __BL_MATERIAL_H__
2 #define __BL_MATERIAL_H__
3
4 #include "STR_String.h"
5 #include "MT_Point2.h"
6
7 // --
8 struct MTex;
9 struct Material;
10 struct Image;
11 struct MTFace;
12 struct MTex;
13 struct Material;
14 struct EnvMap;
15 // --
16
17 /** max units
18         this will default to users available units
19         to build with more available, just increment this value
20         although the more you add the slower the search time will be.
21         we will go for three, which should be enough
22 */
23 #define MAXTEX                  3//match in RAS_TexVert & RAS_OpenGLRasterizer
24
25 // different mapping modes
26 class BL_Mapping
27 {
28 public:
29         int mapping;
30         float scale[3];
31         float offsets[3];
32         int projplane[3];
33         STR_String objconame;
34         STR_String uvCoName;
35 };
36
37 // base material struct
38 class BL_Material
39 {
40 private:
41         int num_users;
42         bool share;
43
44 public:
45         // -----------------------------------
46         BL_Material();
47
48         int IdMode;
49         unsigned int ras_mode;
50
51         STR_String texname[MAXTEX];
52         unsigned int flag[MAXTEX];
53         int tile,tilexrep[MAXTEX],tileyrep[MAXTEX];
54         STR_String matname;
55         STR_String mtexname[MAXTEX];
56
57         float matcolor[4];
58         float speccolor[3];
59         short transp, pad;
60
61         float hard, spec_f;
62         float alpha, emit, color_blend[MAXTEX], ref;
63         float amb;
64
65         int blend_mode[MAXTEX];
66
67         int      mode;
68         int num_enabled;
69         
70         int material_index;
71
72         BL_Mapping      mapping[MAXTEX];
73         STR_String      imageId[MAXTEX];
74
75
76         Material*                       material;
77         MTFace*                         tface;
78         Image*                          img[MAXTEX];
79         EnvMap*                         cubemap[MAXTEX];
80
81         unsigned int rgb[4];
82         MT_Point2 uv[4];
83         MT_Point2 uv2[4];
84
85         void SetConversionRGB(unsigned int *rgb);
86         void GetConversionRGB(unsigned int *rgb);
87
88         void SetConversionUV(MT_Point2 *uv);
89         void GetConversionUV(MT_Point2 *uv);
90
91         void SetConversionUV2(MT_Point2 *uv);
92         void GetConversionUV2(MT_Point2 *uv);
93
94         void SetSharedMaterial(bool v);
95         bool IsShared();
96         void SetUsers(int num);
97 };
98
99 // BL_Material::IdMode
100 enum BL_IdMode {
101         DEFAULT_BLENDER=-1,
102         TEXFACE,
103         ONETEX,
104         TWOTEX,
105         GREATERTHAN2
106 };
107
108 // BL_Material::blend_mode[index]
109 enum BL_BlendMode
110 {
111         BLEND_MIX=1,
112         BLEND_ADD,
113         BLEND_SUB,
114         BLEND_MUL,
115         BLEND_SCR
116 };
117
118 // -------------------------------------
119 // BL_Material::flag[index]
120 enum BL_flag
121 {
122         MIPMAP=1,               // set to use mipmaps
123         CALCALPHA=2,    // additive
124         USEALPHA=4,             // use actual alpha channel
125         TEXALPHA=8,             // use alpha combiner functions
126         TEXNEG=16,              // negate blending
127         HASIPO=32,
128         USENEGALPHA=64,
129         ALPHA_TEST=128
130 };
131
132 // BL_Material::ras_mode
133 enum BL_ras_mode
134 {
135         POLY_VIS=1,
136         COLLIDER=2,
137         ZSORT=4,
138         TRANSP=8,
139         TRIANGLE=16,
140         USE_LIGHT=32,
141         WIRE=64
142 };
143
144 // -------------------------------------
145 // BL_Material::mapping[index]::mapping
146 enum BL_MappingFlag
147 {
148         USEENV  =1,
149         // --
150         USEREFL =2,
151         USEOBJ  =4,
152         USENORM =8,
153         USEORCO =16,
154         USEUV   =32,
155         USETANG =64,
156         DISABLE =128,
157         USECUSTOMUV=256
158 };
159
160 // BL_Material::BL_Mapping::projplane
161 enum BL_MappingProj
162 {
163         PROJN=0,
164         PROJX,
165         PROJY,
166         PROJZ
167 };
168
169 // ------------------------------------
170 //extern void initBL_Material(BL_Material* mat);
171 extern MTex* getImageFromMaterial(Material *mat, int index);
172 extern int  getNumTexChannels( Material *mat );
173 // ------------------------------------
174
175 #endif
176
177