#ifndef SHADERS_H
#define SHADERS_H
#include <GL/glew.h>
#include "../math/matrix4x4.h"
typedef struct
{
/* Program ID */
GLuint ID;
/* Program Attributes */
GLint position;
GLint color;
GLint uv;
GLint normal;
/* 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;
} Shader_Layout;
extern GLuint Shader_CompileShaders(const char* vertexShader, const char* fragmentShader);
extern GLint Shader_GetUniformLocation( GLuint programID, const char* uniformName );
extern GLint Shader_GetAttribLocation ( GLuint programID, const char* attributeName );
extern void Shader_Destroy(GLuint programID);
extern void Shader_SetUniformMat4( GLuint programID, const char* name, const float *matrix );
extern void Shader_SetUniformFloat( GLuint programID, const char* name, const float val );
extern void Shader_SetUniformVec2( GLuint programID, const char* name, const float vec[2] );
extern void Shader_SetUniformVec3( GLuint programID, const char* name, const float vec[3] );
extern void Shader_SetUniformVec4( GLuint programID, const char* name, const float vec[4] );
extern void Shader_SetUniformInt( GLuint programID, const char* name, const int val );
#endif // SHADERS_H