![]() |
TAPs 0.7.7.3
|
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----+----