Cycles: svn merge -r36495:36747 https://svn.blender.org/svnroot/bf-blender/trunk...
[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 };
162
163 // -------------------------------------
164 // BL_Material::mapping[index]::mapping
165 enum BL_MappingFlag
166 {
167         USEENV  =1,
168         // --
169         USEREFL =2,
170         USEOBJ  =4,
171         USENORM =8,
172         USEORCO =16,
173         USEUV   =32,
174         USETANG =64,
175         DISABLE =128,
176         USECUSTOMUV=256
177 };
178
179 // BL_Material::BL_Mapping::projplane
180 enum BL_MappingProj
181 {
182         PROJN=0,
183         PROJX,
184         PROJY,
185         PROJZ
186 };
187
188 // ------------------------------------
189 //extern void initBL_Material(BL_Material* mat);
190 extern MTex* getImageFromMaterial(Material *mat, int index);
191 extern int  getNumTexChannels( Material *mat );
192 // ------------------------------------
193
194 #endif
195
196