Files
manigraph/src/shader.c
2024-09-04 22:35:31 +00:00

68 lines
1.2 KiB
C

#define GL_GLEXT_PROTOTYPES
#include <GL/gl.h>
#include "main.h"
#define NULL ((void*)0)
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 gload_program( 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, NULL);
glCompileShader(shader);
glGetShaderiv( shader, GL_COMPILE_STATUS, &status );
if( !status )
{
#ifdef DEBUG
char log[256];
glGetShaderInfoLog( shader, 256, NULL, log );
#endif
return 0;
}
glAttachShader(program, shader);
glDeleteShader(shader);
glLinkProgram(program);
return 1;
}
void gload_float( unsigned int program, char * var, float f )
{
glUseProgram( program );
glUniform1f( glGetUniformLocation( program, var ), f );
}
void gload_mat4( unsigned int program, char * var, float * mat )
{
glUseProgram( program );
glUniformMatrix4fv( glGetUniformLocation( program, var ), 1, 0, mat );
}