Merge from trunk 16122-16307
[blender.git] / source / gameengine / Ketsji / KX_BlenderMaterial.h
index ad22950922444623d2c33fbc1615b0d24bf82f02..0d7657b8cdbaf7d1e388bb68d925bc7e1ff55e9a 100644 (file)
@@ -8,13 +8,14 @@
 #include "BL_Material.h"
 #include "BL_Texture.h"
 #include "BL_Shader.h"
+#include "BL_BlenderShader.h"
 
 #include "PyObjectPlus.h"
 
 #include "MT_Vector3.h"
 #include "MT_Vector4.h"
 
-struct TFace;
+struct MTFace;
 class KX_Scene;
 
 class KX_BlenderMaterial :  public PyObjectPlus, public RAS_IPolyMaterial
@@ -60,8 +61,13 @@ public:
                TCachingInfo& cachingInfo
        )const;
 
+       void ActivateBlenderShaders(
+               RAS_IRasterizer* rasty, 
+               TCachingInfo& cachingInfo
+       )const;
 
-       TFace* GetTFace(void) const;
+       MTFace* GetMTFace(void) const;
+       unsigned int* GetMCol(void) const;
 
        // for ipos
        void UpdateIPO(
@@ -84,30 +90,44 @@ public:
        // --------------------------------
        // pre calculate to avoid pops/lag at startup
        virtual void OnConstruction( );
+
+       static void     EndFrame();
+
 private:
-       BL_Material*    mMaterial;
-       BL_Shader*              mShader;
+       BL_Material*            mMaterial;
+       BL_Shader*                      mShader;
+       BL_BlenderShader*       mBlenderShader;
        KX_Scene*               mScene;
        BL_Texture              mTextures[MAXTEX];              // texture array
        bool                    mUserDefBlend;
        unsigned int    mBlendFunc[2];
        bool                    mModified;
+       bool                    mConstructed;                   // if false, don't clean on exit
+
+       void SetBlenderGLSLShader();
 
+       void ActivatGLMaterials( RAS_IRasterizer* rasty )const;
+       void ActivateTexGen( RAS_IRasterizer *ras ) const;
+
+       bool UsesLighting(RAS_IRasterizer *rasty) const;
 
        // message centers
        void    setTexData( bool enable,RAS_IRasterizer *ras);
+       void    setBlenderShaderData( bool enable, RAS_IRasterizer *ras);
        void    setShaderData( bool enable, RAS_IRasterizer *ras);
 
-       bool    setDefaultBlending();
        void    setObjectMatrixData(int i, RAS_IRasterizer *ras);
        void    setTexMatrixData(int i);
 
        void    setLightData();
 
-       void    applyTexGen(RAS_IRasterizer *ras);
        // cleanup stuff
        void    OnExit();
 
+       // shader chacing
+       static BL_BlenderShader *mLastBlenderShader;
+       static BL_Shader                *mLastShader;
+
        mutable int     mPass;
 };