Added custom vertex/edge/face data for meshes:
[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 };
35
36 // base material struct
37 class BL_Material
38 {
39 private:
40         int num_users;
41         bool share;
42
43 public:
44         // -----------------------------------
45         BL_Material();
46
47         int IdMode;
48         unsigned int ras_mode;
49
50         STR_String texname[MAXTEX];
51         unsigned int flag[MAXTEX];
52         int tile,tilexrep[MAXTEX],tileyrep[MAXTEX];
53         STR_String matname;
54         STR_String mtexname[MAXTEX];
55
56         float matcolor[4];
57         float speccolor[3];
58         short transp, pad;
59
60         float hard, spec_f;
61         float alpha, emit, color_blend[MAXTEX], ref;
62         float amb;
63
64         int blend_mode[MAXTEX];
65
66         int      mode;
67         int num_enabled;
68         
69         int material_index;
70
71         BL_Mapping      mapping[MAXTEX];
72         STR_String      imageId[MAXTEX];
73
74
75         Material*                       material;
76         MTFace*                         tface;
77         Image*                          img[MAXTEX];
78         EnvMap*                         cubemap[MAXTEX];
79
80         unsigned int rgb[4];
81         MT_Point2 uv[4];
82         
83         void SetConversionRGB(unsigned int *rgb);
84         void GetConversionRGB(unsigned int *rgb);
85
86         void SetConversionUV(MT_Point2 *uv);
87         void GetConversionUV(MT_Point2 *uv);
88
89         void SetSharedMaterial(bool v);
90         bool IsShared();
91         void SetUsers(int num);
92 };
93
94 // BL_Material::IdMode
95 enum BL_IdMode {
96         DEFAULT_BLENDER=-1,
97         TEXFACE,
98         ONETEX,
99         TWOTEX,
100         GREATERTHAN2
101 };
102
103 // BL_Material::blend_mode[index]
104 enum BL_BlendMode
105 {
106         BLEND_MIX=1,
107         BLEND_ADD,
108         BLEND_SUB,
109         BLEND_MUL,
110         BLEND_SCR
111 };
112
113 // -------------------------------------
114 // BL_Material::flag[index]
115 enum BL_flag
116 {
117         MIPMAP=1,               // set to use mipmaps
118         CALCALPHA=2,    // additive
119         USEALPHA=4,             // use actual alpha channel
120         TEXALPHA=8,             // use alpha combiner functions
121         TEXNEG=16,              // negate blending
122         HASIPO=32,
123         USENEGALPHA=64,
124         ALPHA_TEST=128
125 };
126
127 // BL_Material::ras_mode
128 enum BL_ras_mode
129 {
130         POLY_VIS=1,
131         COLLIDER=2,
132         ZSORT=4,
133         TRANSP=8,
134         TRIANGLE=16,
135         USE_LIGHT=32,
136         WIRE=64
137 };
138
139 // -------------------------------------
140 // BL_Material::mapping[index]::mapping
141 enum BL_MappingFlag
142 {
143         USEENV  =1,
144         // --
145         USEREFL =2,
146         USEOBJ  =4,
147         USENORM =8,
148         USEORCO =16,
149         USEUV   =32,
150         USETANG =64,
151         DISABLE =128
152 };
153
154 // BL_Material::BL_Mapping::projplane
155 enum BL_MappingProj
156 {
157         PROJN=0,
158         PROJX,
159         PROJY,
160         PROJZ
161 };
162
163 // ------------------------------------
164 //extern void initBL_Material(BL_Material* mat);
165 extern MTex* getImageFromMaterial(Material *mat, int index);
166 extern int  getNumTexChannels( Material *mat );
167 // ------------------------------------
168
169 #endif
170
171