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