1
0
Fork 0
mirror of https://github.com/bjornbytes/lovr.git synced 2024-07-05 22:03:36 +00:00
lovr/src/graphics/shader.h

71 lines
2 KiB
C
Raw Normal View History

#include "graphics/texture.h"
2018-07-19 23:58:59 +00:00
#include "lib/map/map.h"
#include "lib/vec/vec.h"
2017-10-31 08:14:09 +00:00
#include <stdbool.h>
2016-07-16 02:17:27 +00:00
2017-01-26 10:20:30 +00:00
#pragma once
2016-10-08 01:30:37 +00:00
2018-07-19 23:58:59 +00:00
#define LOVR_MAX_UNIFORM_LENGTH 64
#define LOVR_MAX_ATTRIBUTE_LENGTH 64
2018-07-28 22:46:46 +00:00
#define MAX_SHADER_BLOCK_UNIFORMS 32
2018-07-19 23:58:59 +00:00
typedef enum {
UNIFORM_FLOAT,
UNIFORM_MATRIX,
UNIFORM_INT,
UNIFORM_SAMPLER
} UniformType;
2017-08-09 07:56:13 +00:00
typedef enum {
SHADER_DEFAULT,
SHADER_CUBE,
2018-03-05 10:02:25 +00:00
SHADER_PANO,
2017-08-09 07:56:13 +00:00
SHADER_FONT,
2018-07-17 06:51:11 +00:00
SHADER_FILL,
MAX_DEFAULT_SHADERS
2017-08-09 07:56:13 +00:00
} DefaultShader;
2018-07-19 23:58:59 +00:00
typedef struct {
char name[LOVR_MAX_UNIFORM_LENGTH];
2018-07-20 23:56:28 +00:00
UniformType type;
2018-07-19 23:58:59 +00:00
int components;
2018-07-20 23:56:28 +00:00
int count;
int location;
int offset;
int size;
2018-07-19 23:58:59 +00:00
union {
void* data;
int* ints;
float* floats;
Texture** textures;
} value;
int baseTextureSlot;
bool dirty;
} Uniform;
typedef vec_t(Uniform) vec_uniform_t;
2018-07-19 23:58:59 +00:00
typedef struct Shader Shader;
2018-07-28 22:46:46 +00:00
typedef struct ShaderBlock ShaderBlock;
2017-08-09 07:56:13 +00:00
Shader* lovrShaderCreate(const char* vertexSource, const char* fragmentSource);
Shader* lovrShaderCreateDefault(DefaultShader type);
2018-02-26 08:59:03 +00:00
void lovrShaderDestroy(void* ref);
void lovrShaderBind(Shader* shader);
2016-11-13 10:35:26 +00:00
int lovrShaderGetAttributeId(Shader* shader, const char* name);
bool lovrShaderHasUniform(Shader* shader, const char* name);
const Uniform* lovrShaderGetUniform(Shader* shader, const char* name);
void lovrShaderSetFloat(Shader* shader, const char* name, float* data, int count);
void lovrShaderSetInt(Shader* shader, const char* name, int* data, int count);
void lovrShaderSetMatrix(Shader* shader, const char* name, float* data, int count);
void lovrShaderSetTexture(Shader* shader, const char* name, Texture** data, int count);
2018-07-28 22:46:46 +00:00
ShaderBlock* lovrShaderGetBlock(Shader* shader, const char* name);
void lovrShaderSetBlock(Shader* shader, const char* name, ShaderBlock* block);
ShaderBlock* lovrShaderBlockCreate(vec_uniform_t* uniforms);
void lovrShaderBlockDestroy(void* ref);
size_t lovrShaderBlockGetSize(ShaderBlock* block);
const Uniform* lovrShaderBlockGetUniform(ShaderBlock* block, const char* name);
void* lovrShaderBlockMap(ShaderBlock* block);
void lovrShaderBlockUnmap(ShaderBlock* block);