2016-11-19 09:28:01 +00:00
|
|
|
#include "glfw.h"
|
|
|
|
#include "matrix.h"
|
|
|
|
#include "vendor/map/map.h"
|
2016-07-16 02:17:27 +00:00
|
|
|
|
2016-08-10 06:28:17 +00:00
|
|
|
#ifndef LOVR_SHADER_TYPES
|
|
|
|
#define LOVR_SHADER_TYPES
|
2016-10-08 01:30:37 +00:00
|
|
|
|
|
|
|
#define LOVR_SHADER_POSITION 0
|
|
|
|
#define LOVR_SHADER_NORMAL 1
|
|
|
|
|
2016-10-18 22:29:26 +00:00
|
|
|
#define LOVR_MAX_UNIFORM_LENGTH 256
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
GLchar name[LOVR_MAX_UNIFORM_LENGTH];
|
|
|
|
int index;
|
|
|
|
int location;
|
|
|
|
GLenum type;
|
|
|
|
int count;
|
|
|
|
} Uniform;
|
|
|
|
|
|
|
|
typedef map_t(Uniform) map_uniform_t;
|
|
|
|
|
2016-08-03 04:24:18 +00:00
|
|
|
typedef struct {
|
2016-11-14 23:48:17 +00:00
|
|
|
int id;
|
2016-10-18 22:29:26 +00:00
|
|
|
map_uniform_t uniforms;
|
2016-11-14 23:48:17 +00:00
|
|
|
mat4 transform;
|
|
|
|
mat4 projection;
|
|
|
|
unsigned int color;
|
2016-08-03 04:24:18 +00:00
|
|
|
} Shader;
|
2016-08-10 06:28:17 +00:00
|
|
|
#endif
|
2016-08-03 04:24:18 +00:00
|
|
|
|
2016-08-28 20:36:54 +00:00
|
|
|
extern const char* lovrShaderVertexPrefix;
|
|
|
|
extern const char* lovrShaderFragmentPrefix;
|
2016-09-29 02:34:48 +00:00
|
|
|
extern const char* lovrDefaultVertexShader;
|
|
|
|
extern const char* lovrDefaultFragmentShader;
|
2016-10-24 22:02:23 +00:00
|
|
|
extern const char* lovrSkyboxVertexShader;
|
|
|
|
extern const char* lovrSkyboxFragmentShader;
|
2016-08-28 20:36:54 +00:00
|
|
|
|
2016-07-16 02:17:27 +00:00
|
|
|
GLuint compileShader(GLuint type, const char* filename);
|
|
|
|
GLuint linkShaders(GLuint vertexShader, GLuint fragmentShader);
|
2016-08-03 04:24:18 +00:00
|
|
|
|
2016-10-04 04:54:27 +00:00
|
|
|
Shader* lovrShaderCreate(const char* vertexSource, const char* fragmentSource);
|
2016-08-10 06:28:17 +00:00
|
|
|
void lovrShaderDestroy(Shader* shader);
|
2016-11-14 23:48:17 +00:00
|
|
|
void lovrShaderBind(Shader* shader, mat4 transform, mat4 projection, unsigned int color, int force);
|
2016-11-13 10:35:26 +00:00
|
|
|
int lovrShaderGetAttributeId(Shader* shader, const char* name);
|
2016-08-28 20:36:54 +00:00
|
|
|
int lovrShaderGetUniformId(Shader* shader, const char* name);
|
2016-10-18 22:29:26 +00:00
|
|
|
int lovrShaderGetUniformType(Shader* shader, const char* name, GLenum* type, int* count);
|
2016-08-28 20:36:54 +00:00
|
|
|
void lovrShaderSendFloat(Shader* shader, int id, float value);
|
|
|
|
void lovrShaderSendFloatVec2(Shader* shader, int id, float* vector);
|
|
|
|
void lovrShaderSendFloatVec3(Shader* shader, int id, float* vector);
|
|
|
|
void lovrShaderSendFloatVec4(Shader* shader, int id, float* vector);
|
|
|
|
void lovrShaderSendFloatMat2(Shader* shader, int id, float* matrix);
|
|
|
|
void lovrShaderSendFloatMat3(Shader* shader, int id, float* matrix);
|
|
|
|
void lovrShaderSendFloatMat4(Shader* shader, int id, float* matrix);
|