TAPs 0.7.7.3
TAPsGlobalGLSLShaderPool.cpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsGLSLShaderPool.cpp
00003 
00004 GlobalGLSLShaderPool class (cpp file).
00005 
00006 SUKITTI PUNAK   (02/18/2009)
00007 ******************************************************************************/
00008 #include "TAPsGlobalGLSLShaderPool.hpp"
00009 // Using Inclusion Model (i.e. definitions are included in declarations)
00010 //                       (this name.cpp is included in name.hpp)
00011 // Each friend is defined directly inside its declaration.
00012 
00013 BEGIN_NAMESPACE_TAPs__OpenGL
00014 //=============================================================================
00015 //const unsigned int    GlobalGLSLShaderPool::m_NUM_OF_SHADERS = 10;                //!< number of shaders
00016 GLSLShaderPool      GlobalGLSLShaderPool::m_ShaderPool;                             
00017 GLSLProgramObject * GlobalGLSLShaderPool::m_ShaderProgramList[m_NUM_OF_SHADERS];    
00018 bool                GlobalGLSLShaderPool::m_bInitialized = false;                   
00019 // For Textures
00020 TexturePool         GlobalGLSLShaderPool::m_TexturePool;                            
00021 //=============================================================================
00022 //-----------------------------------------------------------------------------
00023 bool GlobalGLSLShaderPool::Init ()
00024 {
00025     std::cout << "DEBUG: GlobalGLSLShaderPool::Init ()" << std::endl;
00026     //return true;
00027 
00028     if ( m_bInitialized )   {
00029         #ifdef  TAPs_DEBUG_MODE
00030         std::cout << "GlobalGLSLShaderPool::Init () is already DONE!\n";
00031         #endif//TAPs_DEBUG_MODE
00032         return m_bInitialized;
00033     }
00034     bool bFailed = false;
00035     // Look for the path in the environment variable named "TAPsResource".
00036     char * TAPsResourcePath = getenv( "TAPsResource" );
00037     std::string path( "" );
00038     if ( TAPsResourcePath ) {
00039         path += TAPsResourcePath;
00040         path += "/GLSL/Shaders/";
00041     }
00042     // If "TAPsResource" doesn't exist, then use this path.
00043     else {
00044         path = "TAPsResource/GLSL/Shaders/";
00045     }
00046     std::cout << path << "\n";
00047 
00048 
00049 
00050 
00051     // TEST TEXTURE POOL
00052     std::string texturePath( "" );
00053     if ( TAPsResourcePath ) {
00054         texturePath += TAPsResourcePath;
00055         texturePath += "/Textures/Common/";
00056     }
00057     // If "TAPsResource" doesn't exist, then use this texture path.
00058     else {
00059         texturePath = "TAPsResource/Textures/Common/";
00060     }
00061     std::cout << texturePath << "\n";
00062     m_TexturePool.Create2DTextureFromFile( texturePath + "Default.jpg" );
00063 
00064 
00065 
00066     GLSLVertexShader *      vertShader;
00067     GLSLFragmentShader *    fragShader;
00068     GLSLProgramObject *     shaderProgram;
00069 
00070     // MINIMUM SHADER
00071     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00072     vertShader = m_ShaderPool.CreateVertexShaderFromFile( path + "minimal.vert" );
00073     if ( !vertShader )  bFailed = true;
00074     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00075     fragShader = m_ShaderPool.CreateFragmentShaderFromFile( path + "minimal.frag" );
00076     if ( !fragShader )  bFailed = true;
00077     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00078     shaderProgram = m_ShaderPool.CreateShaderProgram( vertShader, NULL, fragShader );
00079     if ( !shaderProgram )   bFailed = true;
00080     m_ShaderProgramList[MINIMUM] = shaderProgram;
00081 
00082     // DEFAULT SHADER
00083     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00084     vertShader = m_ShaderPool.CreateVertexShaderFromFile( path + "OneDirLight_PhongShading.vert" );
00085     if ( !vertShader )  bFailed = true;
00086     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00087     fragShader = m_ShaderPool.CreateFragmentShaderFromFile( path + "OneDirLight_PhongShading.frag" );
00088     if ( !fragShader )  bFailed = true;
00089     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00090     shaderProgram = m_ShaderPool.CreateShaderProgram( vertShader, NULL, fragShader );
00091     if ( !shaderProgram )   bFailed = true;
00092     m_ShaderProgramList[DEFAULT] = shaderProgram;
00093 
00094     // PHONG'S SHADER FOR ONE POINT LIGHT
00095     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00096     vertShader = m_ShaderPool.CreateVertexShaderFromFile( path + "OnePtLight_PhongShading.vert" );
00097     if ( !vertShader )  bFailed = true;
00098     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00099     fragShader = m_ShaderPool.CreateFragmentShaderFromFile( path + "OnePtLight_PhongShading.frag" );
00100     if ( !fragShader )  bFailed = true;
00101     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00102     shaderProgram = m_ShaderPool.CreateShaderProgram( vertShader, NULL, fragShader );
00103     if ( !shaderProgram )   bFailed = true;
00104     m_ShaderProgramList[PHONG_ONE_PT_LT] = shaderProgram;
00105 
00106     // PHONG'S SHADER FOR ONE DIRECTIONAL LIGHT
00107     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00108     vertShader = m_ShaderPool.CreateVertexShaderFromFile( path + "OneDirLight_PhongShading.vert" );
00109     if ( !vertShader )  bFailed = true;
00110     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00111     fragShader = m_ShaderPool.CreateFragmentShaderFromFile( path + "OneDirLight_PhongShading.frag" );
00112     if ( !fragShader )  bFailed = true;
00113     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00114     shaderProgram = m_ShaderPool.CreateShaderProgram( vertShader, NULL, fragShader );
00115     if ( !shaderProgram )   bFailed = true;
00116     m_ShaderProgramList[PHONG_ONE_DIR_LT] = shaderProgram;
00117 
00118     // BRICK SHADER
00119     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00120     vertShader = m_ShaderPool.CreateVertexShaderFromFile( path + "brick.vert" );
00121     if ( !vertShader )  bFailed = true;
00122     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00123     fragShader = m_ShaderPool.CreateFragmentShaderFromFile( path + "brick.frag" );
00124     if ( !fragShader )  bFailed = true;
00125     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00126     shaderProgram = m_ShaderPool.CreateShaderProgram( vertShader, NULL, fragShader );
00127     if ( !shaderProgram )   bFailed = true;
00128     m_ShaderProgramList[BRICK] = shaderProgram;
00129     //SetShaderParameters( BRICK );
00130 //  gShaderProgram = shaders.CreateShaderProgram( vertShader, NULL, fragShader );
00131 //  gShaderProgram->SetUniform3f("BrickColor",1.0,0.3,0.2);
00132 //  gShaderProgram->SetUniform3f("MortarColor",0.85,0.86,0.84);
00133 //  gShaderProgram->SetUniform3f("BrickSize",0.30,0.15,0.30);
00134 //  gShaderProgram->SetUniform3f("BrickPct",0.90,0.85,0.90);
00136 //  gShaderProgram->SetUniform3f("LightPosition",0.0,0.0,4.0);
00137     //gShaderProgram = shaders.CreateShaderProgram( vertShader, NULL, fragShader );
00138 
00139     // DEFAULT_MESH_2DTEXTURE SHADER
00140     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00141     vertShader = m_ShaderPool.CreateVertexShaderFromFile( path + "DefaultMeshWith2DTexture.vert" );
00142     if ( !vertShader )  bFailed = true;
00143     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00144     fragShader = m_ShaderPool.CreateFragmentShaderFromFile( path + "DefaultMeshWith2DTexture.frag" );
00145     if ( !fragShader )  bFailed = true;
00146     if ( bFailed )  { m_ShaderPool.Clear(); return false; }
00147     shaderProgram = m_ShaderPool.CreateShaderProgram( vertShader, NULL, fragShader );
00148     if ( !shaderProgram )   bFailed = true;
00149     m_ShaderProgramList[DEFAULT_MESH_2DTEXTURE] = shaderProgram;
00150 
00151     //#ifdef    TAPs_DEBUG_MODE
00152     std::cout << "GlobalGLSLShaderPool::Init () is SUCCESSFUL!\n";
00153     //#endif//TAPs_DEBUG_MODE
00154 
00155     m_bInitialized = true;
00156     return true;
00157 }
00158 //-----------------------------------------------------------------------------
00159 bool GlobalGLSLShaderPool::Clear ()
00160 {
00161     m_ShaderPool.Clear();
00162     m_bInitialized = false;
00163     return true;
00164 }
00165 //-----------------------------------------------------------------------------
00166 std::string GlobalGLSLShaderPool::StrInfo ()
00167 {
00168     std::ostringstream ss;
00169     ss << "GLSLShaderPool: ";
00170     return ss.str();
00171 }
00172 //-----------------------------------------------------------------------------
00173 //=============================================================================
00174 
00175 //-----------------------------------------------------------------------------
00176 //=============================================================================
00177 END_NAMESPACE_TAPs__OpenGL
00178 //34567890123456789012345678901234567890123456789012345678901234567890123456789
00179 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines