#include #include #include "shader.h" GLuint compile_shader(GLenum type, const char *src) { GLuint shader = glCreateShader(type); glShaderSource(shader, 1, &src, NULL); glCompileShader(shader); GLint ok; glGetShaderiv(shader, GL_COMPILE_STATUS, &ok); if (!ok) { char log[512]; glGetShaderInfoLog(shader, sizeof(log), NULL, log); fprintf(stderr, "shader compile error: %s\n", log); exit(1); } return shader; } GLuint create_program(const char *vs_src, const char *fs_src) { GLuint vs = compile_shader(GL_VERTEX_SHADER, vs_src); GLuint fs = compile_shader(GL_FRAGMENT_SHADER, fs_src); GLuint prog = glCreateProgram(); glAttachShader(prog, vs); glAttachShader(prog, fs); glLinkProgram(prog); GLint ok; glGetProgramiv(prog, GL_LINK_STATUS, &ok); if (!ok) { char log[512]; glGetProgramInfoLog(prog, sizeof(log), NULL, log); fprintf(stderr, "program link error: %s\n", log); exit(1); } glDeleteShader(vs); glDeleteShader(fs); return prog; }