#ifndef __RENDERPATHVERTEXSHADER_H__ #define __RENDERPATHVERTEXSHADER_H__ #include "graphics/LightEnv.h" // Interface for globallight.vs struct VS_GlobalLight { public: void Init(Handle shader); void SetFromLightEnv(const CLightEnv& lightenv, bool units) const { SetAmbient(units ? lightenv.m_UnitsAmbientColor : lightenv.m_TerrainAmbientColor); SetSunDir(lightenv.GetSunDir()); SetSunColor(lightenv.m_SunColor); } void SetAmbient(const RGBColor& color) const { pglUniform3fvARB(m_Ambient, 1, &color.X); } void SetSunDir(const CVector3D& sundir) const { pglUniform3fvARB(m_SunDir, 1, &sundir.X); } void SetSunColor(const RGBColor& color) const { pglUniform3fvARB(m_SunColor, 1, &color.X); } private: GLint m_Ambient; GLint m_SunDir; GLint m_SunColor; }; // Interface for instancing_base.vs struct VS_Instancing { public: void Init(Handle shader); void SetMatrix(const CMatrix3D& mat) const { pglVertexAttrib4fARB(m_Instancing1, mat._11, mat._12, mat._13, mat._14); pglVertexAttrib4fARB(m_Instancing2, mat._21, mat._22, mat._23, mat._24); pglVertexAttrib4fARB(m_Instancing3, mat._31, mat._32, mat._33, mat._34); } private: GLint m_Instancing1; GLint m_Instancing2; GLint m_Instancing3; }; // Interface for postouv1.vs struct VS_PosToUV1 { public: void Init(Handle shader); void SetMatrix(const CMatrix3D& mat) const { pglUniform4fARB(m_TextureMatrix1, mat._11, mat._12, mat._13, mat._14); pglUniform4fARB(m_TextureMatrix2, mat._21, mat._22, mat._23, mat._24); pglUniform4fARB(m_TextureMatrix3, mat._31, mat._32, mat._33, mat._34); } private: GLint m_TextureMatrix1; GLint m_TextureMatrix2; GLint m_TextureMatrix3; }; class RenderPathVertexShader { public: RenderPathVertexShader(); ~RenderPathVertexShader(); // Initialize this render path. bool Init(); // Call once per frame to update program stuff void BeginFrame(); public: Handle m_ModelLight; VS_GlobalLight m_ModelLight_Light; Handle m_ModelLightP; VS_GlobalLight m_ModelLightP_Light; VS_PosToUV1 m_ModelLightP_PosToUV1; Handle m_InstancingLight; VS_GlobalLight m_InstancingLight_Light; VS_Instancing m_InstancingLight_Instancing; Handle m_InstancingLightP; VS_GlobalLight m_InstancingLightP_Light; VS_Instancing m_InstancingLightP_Instancing; VS_PosToUV1 m_InstancingLightP_PosToUV1; Handle m_Instancing; VS_Instancing m_Instancing_Instancing; Handle m_InstancingP; VS_Instancing m_InstancingP_Instancing; VS_PosToUV1 m_InstancingP_PosToUV1; }; #endif // __RENDERPATHVERTEXSHADER_H__