aboutsummaryrefslogtreecommitdiff
#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