Skip to content

Instantly share code, notes, and snippets.

@ScatteredRay
Created May 24, 2010 08:35
Show Gist options
  • Save ScatteredRay/411654 to your computer and use it in GitHub Desktop.
Save ScatteredRay/411654 to your computer and use it in GitHub Desktop.
GLuint CreateShaderProgram(shader_id shader)
{
GLuint vshader = CreateShader(GetVShaderFile(shader), GL_VERTEX_SHADER);
if(!vshader) goto error;
GLuint pshader = CreateShader(GetVShaderFile(shader), GL_FRAGMENT_SHADER);
if(!pshader) goto error_pshader;
GLuint program = glCreateProgram();
assert(program);
glAttachShader(program, vshader);
glAttachShader(program, pshader);
glLinkProgram(program);
if(glGetProgram(program, GL_LINK_STATUS) == GL_FALSE)
{
size_t buf_len = glGetProgram(shader, GL_INFO_LOG_LENGTH);
char* buffer = (char*)malloc(buf_len);
size_t read_len;
glGetProgramInfoLog(shader, buf_len, &read_len, buffer);
assert(buf_len == read_len);
buffer[buf_len] = '\0';
log_own_buffer(LOG_ERR, buffer);
goto error_program;
}
return program;
error_program:
glDeleteProgram(program);
glDetachShader(program, pshader);
glDetachShader(program, vshader);
glDeleteShader(pshader);
error_pshader:
glDeleteShader(vshader);
error:
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment