68 lines
1.4 KiB
C
68 lines
1.4 KiB
C
#include "main.h"
|
|
|
|
#ifdef GLAD
|
|
#include <glad.h>
|
|
#else
|
|
#include <GL/glew.h>
|
|
#endif
|
|
|
|
#ifdef DEBUG
|
|
#include <stdio.h>
|
|
#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_uint_to_shader(unsigned int program, char *var, unsigned int u)
|
|
{
|
|
glUseProgram(program);
|
|
glUniform1ui(glGetUniformLocation(program, var), u);
|
|
}
|
|
|
|
void load_mat4_to_shader(unsigned int program, char *var, float *mat)
|
|
{
|
|
glUseProgram(program);
|
|
glUniformMatrix4fv(glGetUniformLocation(program, var), 1, 0, mat);
|
|
}
|