aboutsummaryrefslogtreecommitdiff
path: root/shader.c
blob: f700485fc44a8126a745c001bdd596b62353ecaa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "shader.h"

#include <stdio.h>

GLuint createShader(const char *vertexCode, const char *fragmentCode) {
	GLuint vertex, fragment;
	int success;
	char infoLog[512];

	vertex = glCreateShader(GL_VERTEX_SHADER);
	glShaderSource(vertex, 1, &vertexCode, NULL);
	glCompileShader(vertex);

	glGetShaderiv(vertex, GL_COMPILE_STATUS, &success);
	if (!success) {
		glGetShaderInfoLog(vertex, 512, NULL, infoLog);
		fprintf(stderr, "ERROR: Failed to compile vertex shader: %s\n", infoLog);
	}

	fragment = glCreateShader(GL_FRAGMENT_SHADER);
	glShaderSource(fragment, 1, &fragmentCode, NULL);
	glCompileShader(fragment);

	glGetShaderiv(fragment, GL_COMPILE_STATUS, &success);
	if (!success) {
		glGetShaderInfoLog(fragment, 512, NULL, infoLog);
		fprintf(stderr, "ERROR: Failed to compile fragment shader: %s\n", infoLog);
	}

	GLuint ShaderProgram = glCreateProgram();
	glAttachShader(ShaderProgram, vertex);
	glAttachShader(ShaderProgram, fragment);
	glLinkProgram(ShaderProgram);

	glGetProgramiv(ShaderProgram, GL_LINK_STATUS, &success);
	if (!success) {
		fprintf(stderr, "Failed to link shaders\n");
	}

	glDeleteShader(vertex);
	glDeleteShader(fragment);

	return ShaderProgram;
}