More debug information in case of failure compilation of shaders.

This commit is contained in:
Maciej Sumiński 2013-06-30 15:37:46 +02:00
parent 5eb38ec232
commit 335bf72060
3 changed files with 53 additions and 4 deletions

View File

@ -359,8 +359,16 @@ void OPENGL_GAL::BeginDrawing()
// Compile the shaders // Compile the shaders
if( !isShaderInitialized && isUseShader ) if( !isShaderInitialized && isUseShader )
{ {
shader.AddSource( shaderPath + std::string( "/shader.vert" ), SHADER_TYPE_VERTEX ); if( !shader.AddSource( shaderPath + std::string( "/shader.vert" ), SHADER_TYPE_VERTEX ) )
shader.AddSource( shaderPath + std::string( "/shader.frag" ), SHADER_TYPE_FRAGMENT ); {
wxLogFatalError( wxT( "Cannot compile vertex shader!" ) );
}
if( !shader.AddSource( shaderPath + std::string( "/shader.frag" ), SHADER_TYPE_FRAGMENT ) )
{
wxLogFatalError( wxT( "Cannot compile fragment shader!" ) );
}
if( !shader.Link() ) if( !shader.Link() )
{ {
wxLogFatalError( wxT( "Cannot link the shaders!" ) ); wxLogFatalError( wxT( "Cannot link the shaders!" ) );

View File

@ -83,6 +83,27 @@ void SHADER::ProgramInfo( GLuint aProgram )
} }
void SHADER::ShaderInfo( GLuint aShader )
{
GLint glInfoLogLength = 0;
GLint writtenChars = 0;
// Get the length of the info string
glGetShaderiv( aShader, GL_INFO_LOG_LENGTH, &glInfoLogLength );
// Print the information
if( glInfoLogLength > 2 )
{
GLchar* glInfoLog = new GLchar[glInfoLogLength];
glGetShaderInfoLog( aShader, glInfoLogLength, &writtenChars, glInfoLog );
wxLogInfo( wxString::FromUTF8( (char*) glInfoLog ) );
delete glInfoLog;
}
}
std::string SHADER::ReadSource( std::string aShaderSourceName ) std::string SHADER::ReadSource( std::string aShaderSourceName )
{ {
// Open the shader source for reading // Open the shader source for reading
@ -109,7 +130,7 @@ std::string SHADER::ReadSource( std::string aShaderSourceName )
} }
void SHADER::AddSource( const std::string& aShaderSourceName, ShaderType aShaderType ) bool SHADER::AddSource( const std::string& aShaderSourceName, ShaderType aShaderType )
{ {
if( isShaderLinked ) if( isShaderLinked )
{ {
@ -144,6 +165,17 @@ void SHADER::AddSource( const std::string& aShaderSourceName, ShaderType aShader
// Compile and attach shader to the program // Compile and attach shader to the program
glCompileShader( shaderNumber ); glCompileShader( shaderNumber );
GLint status;
glGetShaderiv( shaderNumber, GL_COMPILE_STATUS, &status );
if( status != GL_TRUE )
{
wxLogError( wxT( "Shader compilation error" ) );
ShaderInfo( shaderNumber );
return false;
}
glAttachShader( programNumber, shaderNumber ); glAttachShader( programNumber, shaderNumber );
ProgramInfo( programNumber ); ProgramInfo( programNumber );
@ -157,6 +189,8 @@ void SHADER::AddSource( const std::string& aShaderSourceName, ShaderType aShader
// Delete the allocated char array // Delete the allocated char array
delete[] source; delete[] source;
return true;
} }

View File

@ -76,7 +76,7 @@ public:
* @param aShaderSourceName is the shader source file name. * @param aShaderSourceName is the shader source file name.
* @param aShaderType is the type of the shader. * @param aShaderType is the type of the shader.
*/ */
void AddSource( const std::string& aShaderSourceName, ShaderType aShaderType ); bool AddSource( const std::string& aShaderSourceName, ShaderType aShaderType );
/** /**
* @brief Link the shaders. * @brief Link the shaders.
@ -159,6 +159,13 @@ private:
*/ */
void ProgramInfo( GLuint aProgram ); void ProgramInfo( GLuint aProgram );
/**
* @brief Get the shader information.
*
* @param aShader is the shader number.
*/
void ShaderInfo( GLuint aShader );
/** /**
* @brief Read the shader source file * @brief Read the shader source file
* *