TAPs 0.7.7.3
TAPsGlobalGLSLShaderPool.hpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsGlobalGLSLShaderPool.hpp
00003 
00004 GlobalGLSLShaderPool class (hpp file).
00005 
00006 SUKITTI PUNAK   (02/18/2009)
00007 ******************************************************************************/
00008 #ifndef TAPs_GLOBAL_GLSL_SHADER_POOL_HPP
00009 #define TAPs_GLOBAL_GLSL_SHADER_POOL_HPP
00010 
00011 #include "TAPsGLSLShaderPool.hpp"
00012 #include "../OpenGL/TAPsOpenGLTexturePool.hpp"
00013 
00014 BEGIN_NAMESPACE_TAPs__OpenGL
00015 
00016 //=============================================================================
00022 class GlobalGLSLShaderPool {
00023 //=============================================================================
00024 public:
00025     // Member Functions -------------------------------------------------------
00027     friend std::ostream & operator<< ( std::ostream &output, GlobalGLSLShaderPool const &obj )
00028     {
00029         output << obj.StrInfo();
00030         return output;
00031     }
00032     //-------------------------------------------------------------------------
00034     static bool Init ();
00036     static bool Clear ();
00037     //-------------------------------------------------------------------------
00039     static std::string StrInfo ();
00040     // Data Members -----------------------------------------------------------
00041     enum SHADER {
00042         NONE = 0,                       
00043         DEFAULT,                        
00044         DEFAULT_MESH_2DTEXTURE,         
00045         MINIMUM,                        
00046         BRICK,                          
00047         PHONG_ONE_PT_LT,                
00048         PHONG_ONE_DIR_LT,               
00049         //PHONG_ONE_PT_LT_AND_ATEX,     //!< Phong's shading with one point light and a texture
00050     };
00051 
00083     //---------------------------------------------------------------
00084     static GLSLProgramObject * GetShaderProgram ( enum SHADER shaderName )
00085     {   
00086         if ( m_bInitialized )   return m_ShaderProgramList[shaderName];
00087         return NULL;
00088     }
00089 
00090     static void SetShaderParameters ( enum SHADER shaderName )//, Parameters );
00091     {
00092         switch ( shaderName ) {
00093             case DEFAULT:
00094                 //SetDefaultShaderStaticParameters();
00095                 break;
00096             case DEFAULT_MESH_2DTEXTURE:
00097                 SetDefaultMesh2DTextureShaderStaticParameters();
00098                 break;
00099             case PHONG_ONE_PT_LT:
00100                 //SetPhongOnePtLtShaderStaticParameters();
00101                 break;
00102             case PHONG_ONE_DIR_LT:
00103                 //SetPhongOneDirLtShaderStaticParameters();
00104                 break;
00105             case BRICK:
00106                 SetBrickShaderStaticParameters();
00107                 break;
00108             case MINIMUM:
00109                 break;
00110         }
00111     }
00112 
00113     //static void SetBrickShaderDynamicParameters ()// Parameters );
00114 
00115     // For Textures
00116     //---------------------------------------------------------------
00117     static GLuint Get2DTextureID ( unsigned int id )
00118     {   
00119         return m_TexturePool.Get2DTextureNumber( id );
00120     }
00121 
00122 //=============================================================================
00123 protected:
00124     // Member Functions -------------------------------------------------------
00125 
00126     // Set static parameters of DEFAULT_MESH_2DTEXTURE Shader
00127     static void SetDefaultMesh2DTextureShaderStaticParameters ()
00128     {
00129         //m_ShaderProgramList[BRICK]->SetUniform3f( "BrickColor", 1.0, 0.3, 0.2);
00130         //m_ShaderProgramList[BRICK]->SetUniform3f( "MortarColor", 0.85, 0.86, 0.84);
00131         //m_ShaderProgramList[BRICK]->SetUniform2f( "BrickSize", 0.30, 0.15);
00132         //m_ShaderProgramList[BRICK]->SetUniform2f( "BrickPct", 0.90, 0.85);
00133         //m_ShaderProgramList[BRICK]->SetUniform3f( "LightPosition", 0.0, 0.0, 4.0);
00134     }
00135 
00136     // Set static parameters of BRICK Shader
00137     static void SetBrickShaderStaticParameters ()
00138     {
00139         m_ShaderProgramList[BRICK]->SetUniform3f( "BrickColor", 1.0, 0.3, 0.2);
00140         m_ShaderProgramList[BRICK]->SetUniform3f( "MortarColor", 0.85, 0.86, 0.84);
00141         m_ShaderProgramList[BRICK]->SetUniform2f( "BrickSize", 0.30, 0.15);
00142         m_ShaderProgramList[BRICK]->SetUniform2f( "BrickPct", 0.90, 0.85);
00143         m_ShaderProgramList[BRICK]->SetUniform3f( "LightPosition", 0.0, 0.0, 4.0);
00144     }
00145     // Data Members -----------------------------------------------------------
00146 //=============================================================================
00147 private:
00148     // Member Functions -------------------------------------------------------
00149     // Data Members -----------------------------------------------------------
00150     static const unsigned int   m_NUM_OF_SHADERS        = 32;           
00151     static const unsigned int   m_NUM_OF_2DTEXTURES     = 8;            
00152     static const unsigned int   m_NUM_OF_3DTEXTURES     = 4;            
00153     static GLSLShaderPool       m_ShaderPool;                           
00154     static GLSLProgramObject *  m_ShaderProgramList[m_NUM_OF_SHADERS];  
00155     static GLuint               m_GL2DTexList[m_NUM_OF_2DTEXTURES];     
00156     static GLuint               m_GL3DTexList[m_NUM_OF_3DTEXTURES];     
00157     static bool                 m_bInitialized;                         
00158     // For Textures
00159     static TexturePool          m_TexturePool;                          
00160 //=============================================================================
00161 }; // END CLASS GlobalGLSLShaderPool
00162 //=============================================================================
00163 END_NAMESPACE_TAPs__OpenGL
00164 //-----------------------------------------------------------------------------
00165 // If the class is NOT template, use this
00166 #if !defined( TAPs_USE_EXPORT )
00167     #include "TAPsGlobalGLSLShaderPool.cpp"
00168 #endif
00169 
00170 //-----------------------------------------------------------------------------
00171 #endif
00172 //34567890123456789012345678901234567890123456789012345678901234567890123456789
00173 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines