#define GL_GLEXT_PROTOTYPES #include #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 ); }