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