merge with trunk r39834
[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
12 #ifdef WITH_CXX_GUARDEDALLOC
13 #include "MEM_guardedalloc.h"
14 #endif
15
16 // --
17 struct MTex;
18 struct Material;
19 struct Image;
20 struct MTFace;
21 struct MTex;
22 struct Material;
23 struct EnvMap;
24 // --
25
26 /** max units
27         this will default to users available units
28         to build with more available, just increment this value
29         although the more you add the slower the search time will be.
30         we will go for eight, which should be enough
31 */
32 #define MAXTEX                  8       //match in RAS_TexVert & RAS_OpenGLRasterizer
33
34 // different mapping modes
35 class BL_Mapping
36 {
37 public:
38         int mapping;
39         float scale[3];
40         float offsets[3];
41         int projplane[3];
42         STR_String objconame;
43         STR_String uvCoName;
44 };
45
46 // base material struct
47 class BL_Material
48 {
49 private:
50         int num_users;
51         bool share;
52
53 public:
54         // -----------------------------------
55         BL_Material();
56         void Initialize();
57
58         int IdMode;
59         unsigned int ras_mode;
60         bool glslmat;
61
62         STR_String texname[MAXTEX];
63         unsigned int flag[MAXTEX];
64         int tile,tilexrep[MAXTEX],tileyrep[MAXTEX];
65         STR_String matname;
66         STR_String mtexname[MAXTEX];
67         int materialindex;
68
69         float matcolor[4];
70         float speccolor[3];
71         short transp, pad;
72
73         float hard, spec_f;
74         float alpha, emit, color_blend[MAXTEX], ref;
75         float amb;
76
77         int blend_mode[MAXTEX];
78
79         int      mode;
80         int num_enabled;
81         
82         BL_Mapping      mapping[MAXTEX];
83         STR_String      imageId[MAXTEX];
84
85
86         Material*                       material;
87         MTFace*                         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 };
163
164 // -------------------------------------
165 // BL_Material::mapping[index]::mapping
166 enum BL_MappingFlag
167 {
168         USEENV  =1,
169         // --
170         USEREFL =2,
171         USEOBJ  =4,
172         USENORM =8,
173         USEORCO =16,
174         USEUV   =32,
175         USETANG =64,
176         DISABLE =128,
177         USECUSTOMUV=256
178 };
179
180 // BL_Material::BL_Mapping::projplane
181 enum BL_MappingProj
182 {
183         PROJN=0,
184         PROJX,
185         PROJY,
186         PROJZ
187 };
188
189 // ------------------------------------
190 //extern void initBL_Material(BL_Material* mat);
191 extern MTex* getImageFromMaterial(Material *mat, int index);
192 extern int  getNumTexChannels( Material *mat );
193 // ------------------------------------
194
195 #endif
196
197