Example/GLSL Shader Compile Error Testing: Difference between revisions

From OpenGL Wiki
Jump to navigation Jump to search
Adrian (talk | contribs)
mNo edit summary
Adrian (talk | contribs)
m simplifying
Line 9: Line 9:
glCompileShader(shader);
glCompileShader(shader);


GLint isCompiled = 0;
GLint isCompiled;
glGetShaderiv(shader, GL_COMPILE_STATUS, &isCompiled);
glGetShaderiv(shader, GL_COMPILE_STATUS, &isCompiled);
if(isCompiled == GL_FALSE)
if(isCompiled == GL_FALSE)
{
{
GLint maxLength = 0;
GLint maxLength;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &maxLength);
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &maxLength);


// The maxLength includes the NULL character
// The maxLength includes the NULL character
std::vector<GLchar> errorLog(maxLength);
GLchar errorLog[maxLength];
glGetShaderInfoLog(shader, maxLength, &maxLength, &errorLog[0]);
glGetShaderInfoLog(shader, maxLength, &maxLength, errorLog);
 
// 'errorLog' now contains information that can e.g. be printed to stderr


// Provide the infolog in whatever manor you deem best.
// Exit with failure.
// Exit with failure.
glDeleteShader(shader); // Don't leak the shader.
glDeleteShader(shader); // Don't leak the shader.

Revision as of 22:47, 4 December 2014

Shader compilation error checking.

GLuint shader = glCreateShader(...);

// Get strings for glShaderSource.
glShaderSource(shader, ...);

glCompileShader(shader);

GLint isCompiled;
glGetShaderiv(shader, GL_COMPILE_STATUS, &isCompiled);
if(isCompiled == GL_FALSE)
{
	GLint maxLength;
	glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &maxLength);

	// The maxLength includes the NULL character
	GLchar errorLog[maxLength];
	glGetShaderInfoLog(shader, maxLength, &maxLength, errorLog);

	// 'errorLog' now contains information that can e.g. be printed to stderr

	// Exit with failure.
	glDeleteShader(shader); // Don't leak the shader.
	return;
}

// Shader compilation is successful.