Blender  V2.59
BL_Material.h
Go to the documentation of this file.
00001 
00006 #ifndef __BL_MATERIAL_H__
00007 #define __BL_MATERIAL_H__
00008 
00009 #include "STR_String.h"
00010 #include "MT_Point2.h"
00011 
00012 #ifdef WITH_CXX_GUARDEDALLOC
00013 #include "MEM_guardedalloc.h"
00014 #endif
00015 
00016 // --
00017 struct MTex;
00018 struct Material;
00019 struct Image;
00020 struct MTFace;
00021 struct MTex;
00022 struct Material;
00023 struct EnvMap;
00024 // --
00025 
00032 #define MAXTEX                  8       //match in RAS_TexVert & RAS_OpenGLRasterizer
00033 
00034 // different mapping modes
00035 class BL_Mapping
00036 {
00037 public:
00038         int mapping;
00039         float scale[3];
00040         float offsets[3];
00041         int projplane[3];
00042         STR_String objconame;
00043         STR_String uvCoName;
00044 };
00045 
00046 // base material struct
00047 class BL_Material
00048 {
00049 private:
00050         int num_users;
00051         bool share;
00052 
00053 public:
00054         // -----------------------------------
00055         BL_Material();
00056         void Initialize();
00057 
00058         int IdMode;
00059         unsigned int ras_mode;
00060         bool glslmat;
00061 
00062         STR_String texname[MAXTEX];
00063         unsigned int flag[MAXTEX];
00064         int tile,tilexrep[MAXTEX],tileyrep[MAXTEX];
00065         STR_String matname;
00066         STR_String mtexname[MAXTEX];
00067         int materialindex;
00068 
00069         float matcolor[4];
00070         float speccolor[3];
00071         short transp, pad;
00072 
00073         float hard, spec_f;
00074         float alpha, emit, color_blend[MAXTEX], ref;
00075         float amb;
00076 
00077         int blend_mode[MAXTEX];
00078 
00079         int      mode;
00080         int num_enabled;
00081         
00082         BL_Mapping      mapping[MAXTEX];
00083         STR_String      imageId[MAXTEX];
00084 
00085 
00086         Material*                       material;
00087         MTFace*                         tface;
00088         Image*                          img[MAXTEX];
00089         EnvMap*                         cubemap[MAXTEX];
00090 
00091         unsigned int rgb[4];
00092         MT_Point2 uv[4];
00093         MT_Point2 uv2[4];
00094 
00095         STR_String uvName;
00096         STR_String uv2Name;
00097 
00098         void SetConversionRGB(unsigned int *rgb);
00099         void GetConversionRGB(unsigned int *rgb);
00100 
00101         void SetConversionUV(const STR_String& name, MT_Point2 *uv);
00102         void GetConversionUV(MT_Point2 *uv);
00103 
00104         void SetConversionUV2(const STR_String& name, MT_Point2 *uv);
00105         void GetConversionUV2(MT_Point2 *uv);
00106 
00107         void SetSharedMaterial(bool v);
00108         bool IsShared();
00109         void SetUsers(int num);
00110         
00111         
00112 #ifdef WITH_CXX_GUARDEDALLOC
00113 public:
00114         void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, "GE:BL_Material"); }
00115         void operator delete( void *mem ) { MEM_freeN(mem); }
00116 #endif
00117 };
00118 
00119 // BL_Material::IdMode
00120 enum BL_IdMode {
00121         DEFAULT_BLENDER=-1,
00122         TEXFACE,
00123         ONETEX,
00124         TWOTEX,
00125         GREATERTHAN2
00126 };
00127 
00128 // BL_Material::blend_mode[index]
00129 enum BL_BlendMode
00130 {
00131         BLEND_MIX=1,
00132         BLEND_ADD,
00133         BLEND_SUB,
00134         BLEND_MUL,
00135         BLEND_SCR
00136 };
00137 
00138 // -------------------------------------
00139 // BL_Material::flag[index]
00140 enum BL_flag
00141 {
00142         MIPMAP=1,               // set to use mipmaps
00143         CALCALPHA=2,    // additive
00144         USEALPHA=4,             // use actual alpha channel
00145         TEXALPHA=8,             // use alpha combiner functions
00146         TEXNEG=16,              // negate blending
00147         /*HASIPO=32,*/  // unused, commeted for now.
00148         USENEGALPHA=64
00149 };
00150 
00151 // BL_Material::ras_mode
00152 enum BL_ras_mode
00153 {
00154         POLY_VIS=1,
00155         COLLIDER=2,
00156         ZSORT=4,
00157         ALPHA=8,
00158         // TRIANGLE=16,
00159         USE_LIGHT=32,
00160         WIRE=64
00161 };
00162 
00163 // -------------------------------------
00164 // BL_Material::mapping[index]::mapping
00165 enum BL_MappingFlag
00166 {
00167         USEENV  =1,
00168         // --
00169         USEREFL =2,
00170         USEOBJ  =4,
00171         USENORM =8,
00172         USEORCO =16,
00173         USEUV   =32,
00174         USETANG =64,
00175         DISABLE =128,
00176         USECUSTOMUV=256
00177 };
00178 
00179 // BL_Material::BL_Mapping::projplane
00180 enum BL_MappingProj
00181 {
00182         PROJN=0,
00183         PROJX,
00184         PROJY,
00185         PROJZ
00186 };
00187 
00188 // ------------------------------------
00189 //extern void initBL_Material(BL_Material* mat);
00190 extern MTex* getImageFromMaterial(Material *mat, int index);
00191 extern int  getNumTexChannels( Material *mat );
00192 // ------------------------------------
00193 
00194 #endif
00195 
00196