bf6d2095e7c9b4e35c9dce144860be562d3576ef
[blender.git] / source / gameengine / Ketsji / KX_BlenderMaterial.h
1 #ifndef __KX_BLENDER_MATERIAL_H__
2 #define __KX_BLENDER_MATERIAL_H__
3
4 #include <vector>
5
6
7 #include "RAS_IPolygonMaterial.h"
8 #include "BL_Material.h"
9 #include "BL_Texture.h"
10 #include "BL_Shader.h"
11 #include "BL_BlenderShader.h"
12
13 #include "PyObjectPlus.h"
14
15 #include "MT_Vector3.h"
16 #include "MT_Vector4.h"
17
18 struct MTFace;
19 class KX_Scene;
20
21 class KX_BlenderMaterial :  public PyObjectPlus, public RAS_IPolyMaterial
22 {
23         Py_Header;
24 public:
25         // --------------------------------
26         KX_BlenderMaterial(
27                 class KX_Scene* scene,
28                 BL_Material*    mat,
29                 bool                    skin,
30                 int                             lightlayer,
31                 void*                   clientobject,
32                 PyTypeObject*   T=&Type
33         );
34
35         virtual ~KX_BlenderMaterial();
36
37         // --------------------------------
38         virtual TCachingInfo GetCachingInfo(void) const {
39                 return (void*) this;
40         }
41
42         virtual 
43         bool Activate(
44                 RAS_IRasterizer* rasty, 
45                 TCachingInfo& cachingInfo
46         ) const;
47         
48         virtual 
49         void ActivateMeshSlot(
50                 const KX_MeshSlot & ms, 
51                 RAS_IRasterizer* rasty 
52         ) const;
53         
54         void ActivateMat(
55                 RAS_IRasterizer* rasty,
56                 TCachingInfo& cachingInfo
57         )const;
58
59         void ActivatShaders(
60                 RAS_IRasterizer* rasty, 
61                 TCachingInfo& cachingInfo
62         )const;
63
64         void ActivateBlenderShaders(
65                 RAS_IRasterizer* rasty, 
66                 TCachingInfo& cachingInfo
67         )const;
68
69         MTFace* GetMTFace(void) const;
70         unsigned int* GetMCol(void) const;
71
72         // for ipos
73         void UpdateIPO(
74                 MT_Vector4 rgba, MT_Vector3 specrgb,
75                 MT_Scalar hard, MT_Scalar spec,
76                 MT_Scalar ref, MT_Scalar emit, MT_Scalar alpha
77         );
78         
79         // --------------------------------
80         virtual PyObject* _getattr(const STR_String& attr);
81         virtual int       _setattr(const STR_String& attr, PyObject *pyvalue);
82
83         KX_PYMETHOD_DOC( KX_BlenderMaterial, getShader );
84         KX_PYMETHOD_DOC( KX_BlenderMaterial, getMaterialIndex );
85         KX_PYMETHOD_DOC( KX_BlenderMaterial, getTexture );
86         KX_PYMETHOD_DOC( KX_BlenderMaterial, setTexture );
87
88         KX_PYMETHOD_DOC( KX_BlenderMaterial, setBlending );
89
90         // --------------------------------
91         // pre calculate to avoid pops/lag at startup
92         virtual void OnConstruction( );
93 private:
94         BL_Material*            mMaterial;
95         BL_Shader*                      mShader;
96         BL_BlenderShader*       mBlenderShader;
97         static BL_BlenderShader *mLastBlenderShader;
98         KX_Scene*               mScene;
99         BL_Texture              mTextures[MAXTEX];              // texture array
100         bool                    mUserDefBlend;
101         unsigned int    mBlendFunc[2];
102         bool                    mModified;
103         bool                    mConstructed;                   // if false, don't clean on exit
104
105         void SetBlenderGLSLShader();
106
107         void ActivatGLMaterials( RAS_IRasterizer* rasty )const;
108         void ActivateTexGen( RAS_IRasterizer *ras ) const;
109
110         bool UsesLighting(RAS_IRasterizer *rasty) const;
111
112         // message centers
113         void    setTexData( bool enable,RAS_IRasterizer *ras);
114         void    setBlenderShaderData( bool enable, RAS_IRasterizer *ras);
115         void    setShaderData( bool enable, RAS_IRasterizer *ras);
116
117         bool    setDefaultBlending();
118         void    setObjectMatrixData(int i, RAS_IRasterizer *ras);
119         void    setTexMatrixData(int i);
120
121         void    setLightData();
122
123         // cleanup stuff
124         void    OnExit();
125
126         mutable int     mPass;
127 };
128
129
130 #endif