This commit is contained in:
Abdelrahman Said 2024-09-14 00:04:31 +01:00
parent fb1b8457d6
commit 09e9f611f8
2 changed files with 15 additions and 22 deletions

View File

@ -5,16 +5,15 @@
typedef struct shader_repo ShaderRepo;
struct shader_repo {
void *shaders[MAX_SHADER_COUNT];
VertexShader *vertex_funcs[MAX_SHADER_COUNT];
void *shaders[MAX_SHADER_COUNT];
VertexShader *vertex_funcs[MAX_SHADER_COUNT];
FragmentShader *fragment_funcs[MAX_SHADER_COUNT];
u64 count;
u64 count;
};
internal ShaderRepo g_repository = {0};
ShaderID register_shader(void *shader, VertexShader *vertex,
FragmentShader *fragment) {
ShaderID register_shader(void *shader, VertexShader *vertex, FragmentShader *fragment) {
if (g_repository.count + 1 >= MAX_SHADER_COUNT) {
return INVALID_SHADER;
}
@ -27,8 +26,7 @@ ShaderID register_shader(void *shader, VertexShader *vertex,
return (ShaderID){g_repository.count};
}
VertexData run_vertex_shader(ShaderID shader, const VertexData *vert, u8 index,
const Model *model) {
VertexData run_vertex_shader(ShaderID shader, const VertexData *vert, u8 index, const Model *model) {
if (IS_INVALID_SHADER(shader) || shader.id > g_repository.count || !vert || !model) {
return (VertexData){0};
}
@ -43,8 +41,8 @@ VertexData run_vertex_shader(ShaderID shader, const VertexData *vert, u8 index,
return vertex_func(shader_obj, vert, index, model);
}
FragmentResult run_fragment_shader(ShaderID shader, const V3f *barycentric,
const Colour *colour, const Model *model) {
FragmentResult run_fragment_shader(ShaderID shader, const V3f *barycentric, const Colour *colour,
const Model *model) {
if (IS_INVALID_SHADER(shader) || shader.id > g_repository.count || !colour) {
return DISCARDED_FRAGMENT;
}

View File

@ -24,22 +24,17 @@ struct fragment_result {
bool discard;
};
#define INVALID_SHADER ((ShaderID){0})
#define IS_INVALID_SHADER(ID) (ID.id == 0)
#define DISCARDED_FRAGMENT ((FragmentResult){.discard = true})
#define INVALID_SHADER ((ShaderID){0})
#define IS_INVALID_SHADER(ID) (ID.id == 0)
#define DISCARDED_FRAGMENT ((FragmentResult){.discard = true})
#define DISCARD_FRAGMENT(RESULT) (RESULT.discard)
typedef VertexData(VertexShader)(void *shader, const VertexData *vert, u8 index,
const Model *model);
typedef FragmentResult(FragmentShader)(void *shader, const V3f *barycentric,
const Colour *colour,
typedef VertexData(VertexShader)(void *shader, const VertexData *vert, u8 index, const Model *model);
typedef FragmentResult(FragmentShader)(void *shader, const V3f *barycentric, const Colour *colour,
const Model *model);
ShaderID register_shader(void *shader, VertexShader *vertex,
FragmentShader *fragment);
VertexData run_vertex_shader(ShaderID shader, const VertexData *vert, u8 index,
const Model *model);
FragmentResult run_fragment_shader(ShaderID shader, const V3f *barycentric,
const Colour *colour, const Model *model);
ShaderID register_shader(void *shader, VertexShader *vertex, FragmentShader *fragment);
VertexData run_vertex_shader(ShaderID shader, const VertexData *vert, u8 index, const Model *model);
FragmentResult run_fragment_shader(ShaderID shader, const V3f *barycentric, const Colour *colour, const Model *model);
#endif // SHADER_H