Files
manigraph/src/shader.c
2024-11-26 23:51:30 -06:00

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);
}