1
0
Fork 0
mirror of https://github.com/bjornbytes/lovr.git synced 2024-07-21 13:13:35 +00:00
lovr/src/graphics/shader.c

61 lines
1.4 KiB
C
Raw Normal View History

2016-07-16 02:17:27 +00:00
#include "shader.h"
2016-08-08 10:43:51 +00:00
#include "../util.h"
2016-07-16 02:17:27 +00:00
#include <stdlib.h>
GLuint compileShader(GLenum type, const char* source) {
GLuint shader = glCreateShader(type);
glShaderSource(shader, 1, (const GLchar**)&source, NULL);
glCompileShader(shader);
int isShaderCompiled;
glGetShaderiv(shader, GL_COMPILE_STATUS, &isShaderCompiled);
if(!isShaderCompiled) {
int logLength;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength);
char* log = (char*) malloc(logLength);
glGetShaderInfoLog(shader, logLength, &logLength, log);
error(log);
}
return shader;
}
GLuint linkShaders(GLuint vertexShader, GLuint fragmentShader) {
GLuint shader = glCreateProgram();
if (vertexShader) {
glAttachShader(shader, vertexShader);
}
if (fragmentShader) {
glAttachShader(shader, fragmentShader);
}
glLinkProgram(shader);
int isShaderLinked;
glGetProgramiv(shader, GL_LINK_STATUS, (int*)&isShaderLinked);
if(!isShaderLinked) {
int logLength;
glGetProgramiv(shader, GL_INFO_LOG_LENGTH, &logLength);
char* log = (char*) malloc(logLength);
glGetProgramInfoLog(shader, logLength, &logLength, log);
error(log);
}
2016-08-08 20:23:40 +00:00
glDetachShader(shader, vertexShader);
2016-07-16 02:17:27 +00:00
glDeleteShader(vertexShader);
2016-08-08 20:23:40 +00:00
glDetachShader(shader, fragmentShader);
2016-07-16 02:17:27 +00:00
glDeleteShader(fragmentShader);
return shader;
}
2016-08-03 04:24:18 +00:00
2016-08-10 06:28:17 +00:00
void lovrShaderDestroy(Shader* shader) {
glDeleteProgram(shader->id);
free(shader);
}