optionally use guarded alloc for tiles compositor, also replace allocation functions...
[blender.git] / source / gameengine / Ketsji / BL_Material.h
index dbf482e2db39b69a61386e80e07ef5b0a2b9ba12..b67bd95f878b6af5f229f5f86b4f8e1fee3fdc4f 100644 (file)
@@ -1,26 +1,36 @@
+
+/** \file BL_Material.h
+ *  \ingroup ketsji
+ */
+
 #ifndef __BL_MATERIAL_H__
 #define __BL_MATERIAL_H__
 
 #include "STR_String.h"
 #include "MT_Point2.h"
+#include "DNA_meshdata_types.h"
+
+#ifdef WITH_CXX_GUARDEDALLOC
+#include "MEM_guardedalloc.h"
+#endif
 
 // --
 struct MTex;
 struct Material;
 struct Image;
-struct TFace;
+struct MTFace;
 struct MTex;
 struct Material;
 struct EnvMap;
 // --
 
 /** max units
      this will default to users available units
      to build with more available, just increment this value
      although the more you add the slower the search time will be.
      we will go for three, which should be enough
-*/
-#define MAXTEX                 3//match in RAS_TexVert & RAS_OpenGLRasterizer
* this will default to users available units
* to build with more available, just increment this value
* although the more you add the slower the search time will be.
* we will go for eight, which should be enough
+ */
+#define MAXTEX                 8       //match in RAS_TexVert & RAS_OpenGLRasterizer
 
 // different mapping modes
 class BL_Mapping
@@ -31,34 +41,35 @@ public:
        float offsets[3];
        int projplane[3];
        STR_String objconame;
+       STR_String uvCoName;
 };
 
 // base material struct
 class BL_Material
 {
 private:
-       unsigned int rgb[4];
-       MT_Point2 uv[4];
-       
        int num_users;
        bool share;
 
 public:
        // -----------------------------------
        BL_Material();
+       void Initialize();
 
        int IdMode;
        unsigned int ras_mode;
+       bool glslmat;
 
        STR_String texname[MAXTEX];
        unsigned int flag[MAXTEX];
        int tile,tilexrep[MAXTEX],tileyrep[MAXTEX];
        STR_String matname;
        STR_String mtexname[MAXTEX];
+       int materialindex;
 
        float matcolor[4];
        float speccolor[3];
-       short transp, pad;
+       short alphablend, pad;
 
        float hard, spec_f;
        float alpha, emit, color_blend[MAXTEX], ref;
@@ -66,29 +77,41 @@ public:
 
        int blend_mode[MAXTEX];
 
-       int      mode;
        int num_enabled;
        
-       int material_index;
-
        BL_Mapping      mapping[MAXTEX];
        STR_String      imageId[MAXTEX];
 
 
        Material*                       material;
-       TFace*                          tface;
+       MTFace                          tface; /* copy of the derived meshes tface */
        Image*                          img[MAXTEX];
        EnvMap*                         cubemap[MAXTEX];
-       
+
+       unsigned int rgb[4];
+       MT_Point2 uv[4];
+       MT_Point2 uv2[4];
+
+       STR_String uvName;
+       STR_String uv2Name;
+
        void SetConversionRGB(unsigned int *rgb);
        void GetConversionRGB(unsigned int *rgb);
 
-       void SetConversionUV(MT_Point2 *uv);
+       void SetConversionUV(const STR_String& name, MT_Point2 *uv);
        void GetConversionUV(MT_Point2 *uv);
 
+       void SetConversionUV2(const STR_String& name, MT_Point2 *uv);
+       void GetConversionUV2(MT_Point2 *uv);
+
        void SetSharedMaterial(bool v);
        bool IsShared();
        void SetUsers(int num);
+       
+       
+#ifdef WITH_CXX_GUARDEDALLOC
+       MEM_CXX_CLASS_ALLOC_FUNCS("GE:BL_Material")
+#endif
 };
 
 // BL_Material::IdMode
@@ -119,21 +142,23 @@ enum BL_flag
        USEALPHA=4,             // use actual alpha channel
        TEXALPHA=8,             // use alpha combiner functions
        TEXNEG=16,              // negate blending
-       HASIPO=32,
-       USENEGALPHA=64,
-       ALPHA_TEST=128
+       /*HASIPO=32,*/  // unused, commeted for now.
+       USENEGALPHA=64
 };
 
 // BL_Material::ras_mode
 enum BL_ras_mode
 {
-       POLY_VIS=1,
+       // POLY_VIS=1,
        COLLIDER=2,
        ZSORT=4,
-       TRANSP=8,
-       TRIANGLE=16,
+       ALPHA=8,
+       // TRIANGLE=16,
        USE_LIGHT=32,
-       WIRE=64
+       WIRE=64,
+       CAST_SHADOW=128,
+       TEX=256,
+       TWOSIDED=512
 };
 
 // -------------------------------------
@@ -148,7 +173,8 @@ enum BL_MappingFlag
        USEORCO =16,
        USEUV   =32,
        USETANG =64,
-       DISABLE =128
+       DISABLE =128,
+       USECUSTOMUV=256
 };
 
 // BL_Material::BL_Mapping::projplane