70 lines
1.3 KiB
C
70 lines
1.3 KiB
C
#include "main.h"
|
|
#include <GL/glew.h>
|
|
|
|
#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 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, ((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 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 );
|
|
}
|