1 #ifndef __KX_BLENDER_MATERIAL_H__
2 #define __KX_BLENDER_MATERIAL_H__
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"
13 #include "PyObjectPlus.h"
15 #include "MT_Vector3.h"
16 #include "MT_Vector4.h"
21 class KX_BlenderMaterial : public PyObjectPlus, public RAS_IPolyMaterial
25 // --------------------------------
27 class KX_Scene* scene,
35 virtual ~KX_BlenderMaterial();
37 // --------------------------------
38 virtual TCachingInfo GetCachingInfo(void) const {
44 RAS_IRasterizer* rasty,
45 TCachingInfo& cachingInfo
49 void ActivateMeshSlot(
50 const KX_MeshSlot & ms,
51 RAS_IRasterizer* rasty
55 RAS_IRasterizer* rasty,
56 TCachingInfo& cachingInfo
60 RAS_IRasterizer* rasty,
61 TCachingInfo& cachingInfo
64 void ActivateBlenderShaders(
65 RAS_IRasterizer* rasty,
66 TCachingInfo& cachingInfo
69 MTFace* GetMTFace(void) const;
70 unsigned int* GetMCol(void) const;
74 MT_Vector4 rgba, MT_Vector3 specrgb,
75 MT_Scalar hard, MT_Scalar spec,
76 MT_Scalar ref, MT_Scalar emit, MT_Scalar alpha
79 // --------------------------------
80 virtual PyObject* _getattr(const STR_String& attr);
81 virtual int _setattr(const STR_String& attr, PyObject *pyvalue);
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 );
88 KX_PYMETHOD_DOC( KX_BlenderMaterial, setBlending );
90 // --------------------------------
91 // pre calculate to avoid pops/lag at startup
92 virtual void OnConstruction( );
94 static void EndFrame();
97 BL_Material* mMaterial;
99 BL_BlenderShader* mBlenderShader;
101 BL_Texture mTextures[MAXTEX]; // texture array
103 unsigned int mBlendFunc[2];
105 bool mConstructed; // if false, don't clean on exit
107 void SetBlenderGLSLShader();
109 void ActivatGLMaterials( RAS_IRasterizer* rasty )const;
110 void ActivateTexGen( RAS_IRasterizer *ras ) const;
112 bool UsesLighting(RAS_IRasterizer *rasty) const;
115 void setTexData( bool enable,RAS_IRasterizer *ras);
116 void setBlenderShaderData( bool enable, RAS_IRasterizer *ras);
117 void setShaderData( bool enable, RAS_IRasterizer *ras);
119 void setObjectMatrixData(int i, RAS_IRasterizer *ras);
120 void setTexMatrixData(int i);
128 static BL_BlenderShader *mLastBlenderShader;
129 static BL_Shader *mLastShader;