|
Blender
V2.59
|
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