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