#ifndef SHADER_H #define SHADER_H #include "../shared.h" typedef struct _Shader { GLuint id; char name[MAX_PATH_LENGTH]; /* Layout */ /* Program Attributes */ GLint position; GLint uv; GLint normal; GLint tangent; /* Program Uniforms */ GLint totalTransform; GLint modelToWorld; GLint lightPosition; GLint ambientLight; GLint lightColor; GLint lightAttenuation; GLint World_eyePosition; GLint Texture; GLint Normal_Map; /* Program Multi Purpose Uniforms */ GLint extra0; GLint extra1; GLint extra2; GLint extra3; GLint extra4; GLint extra5; struct _Shader *_hash_next; unsigned int _hash; } Shader; /** Shaders **/ extern Shader *shader_new(const char *name, const char *vertexShaderPath, const char *fragShaderPath); extern Shader *shader_get(const char *name); extern void shader_purge(Shader *shader); /** **/ /** Shader functions **/ extern GLint shader_get_uniform_location( Shader *s, const char *uniformName ); extern GLint shader_get_attrib_location( Shader *s, const char *attributeName ); extern void shader_set_uniform_mat4( Shader *s, const char *name, const float matrix[16] ); extern void shader_set_uniform_float( Shader *s, const char *name, const float val ); extern void shader_set_uniform_vec2( Shader *s, const char *name, const float vec[2] ); extern void shader_set_uniform_vec3( Shader *s, const char *name, const float vec[3] ); extern void shader_set_uniform_vec4( Shader *s, const char *name, const float vec[4] ); extern void shader_set_uniform_int( Shader *s, const char *name, const int val ); /** **/ #endif // SHADER_H