44 lines
1.2 KiB
C
44 lines
1.2 KiB
C
#ifndef SHADER_H
|
|
#define SHADER_H
|
|
|
|
#include "aliases.h"
|
|
#include "img.h"
|
|
#include "obj.h"
|
|
#include "vec.h"
|
|
|
|
typedef struct shader_id ShaderID;
|
|
struct shader_id {
|
|
u64 id;
|
|
};
|
|
|
|
typedef struct fragment_result FragmentResult;
|
|
struct fragment_result {
|
|
Colour colour;
|
|
bool discard;
|
|
};
|
|
|
|
typedef struct fragment_data FragmentData;
|
|
struct fragment_data {
|
|
V3f position;
|
|
V3f normal;
|
|
V2f tex_coords;
|
|
};
|
|
|
|
#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 V3f(VertexShader)(void *shader, const V3f *vertex);
|
|
typedef FragmentResult(FragmentShader)(void *shader, const FragmentData *data,
|
|
const Colour *colour,
|
|
const Model *model);
|
|
|
|
ShaderID register_shader(void *shader, VertexShader *vertex,
|
|
FragmentShader *fragment);
|
|
V3f run_vertex_shader(ShaderID shader, const V3f *vertex);
|
|
FragmentResult run_fragment_shader(ShaderID shader, const FragmentData *data,
|
|
const Colour *colour, const Model *model);
|
|
|
|
#endif // SHADER_H
|