#include "main.h" #ifdef GLAD #include #else #include #endif #ifdef DEBUG #include #endif void destroy_shader(unsigned int shader) { return glDeleteProgram(shader); } unsigned int create_shader(void) { return glCreateProgram(); } void use_shader(unsigned int program) { return glUseProgram(program); } unsigned char load_program_to_shader( unsigned int program, const char *src, unsigned int i) { int shader, status; unsigned int type[] = { [VERTEX] = GL_VERTEX_SHADER, [FRAGMENT] = GL_FRAGMENT_SHADER}; if (!src) return 0; shader = glCreateShader(type[i]); glShaderSource(shader, 1, (const GLchar **)&src, ((void *)0)); glCompileShader(shader); glGetShaderiv(shader, GL_COMPILE_STATUS, &status); if (!status) { #ifdef DEBUG char log[256]; glGetShaderInfoLog(shader, 256, NULL, log); printf("%s", log); #endif return 0; } glAttachShader(program, shader); glDeleteShader(shader); glLinkProgram(program); return 1; } void load_float_to_shader(unsigned int program, char *var, float f) { glUseProgram(program); glUniform1f(glGetUniformLocation(program, var), f); } void load_mat4_to_shader(unsigned int program, char *var, float *mat) { glUseProgram(program); glUniformMatrix4fv(glGetUniformLocation(program, var), 1, 0, mat); }