tinyrenderer/src/shader/shader.h

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