From 6d6d4781ff9d9049c346319bcb22fac9475c3a40 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sun, 18 Aug 2024 01:53:49 +0100 Subject: [PATCH] Extract shader into its own header --- src/main.c | 7 +++---- src/obj.c | 2 +- src/obj.h | 14 +------------- src/shader.h | 19 +++++++++++++++++++ 4 files changed, 24 insertions(+), 18 deletions(-) create mode 100644 src/shader.h diff --git a/src/main.c b/src/main.c index 1696294..1d2fe9d 100644 --- a/src/main.c +++ b/src/main.c @@ -26,7 +26,7 @@ enum { internal M4x4f get_projection_matrix(ProjectionType projection_type); internal V3f main_shader_vertex(const V3f *vertex, M4x4f *model_view, - M4x4f *projection, const Render *render); + M4x4f *projection, const Image *img); int main(void) { Arena *arena = NULL; @@ -82,12 +82,11 @@ internal M4x4f get_projection_matrix(ProjectionType projection_type) { } internal V3f main_shader_vertex(const V3f *vertex, M4x4f *model_view, - M4x4f *projection, const Render *render) { + M4x4f *projection, const Image *img) { V4f vh = {.x = vertex->x, .y = vertex->y, .z = vertex->z, .w = 1.0f}; vh = mat4x4_mul_vec4((*projection), mat4x4_mul_vec4((*model_view), vh)); vh.y = 0.0 - vh.y; - vh = mat4x4_mul_vec4( - viewport(vh.x, vh.y, render->img.width, render->img.height), vh); + vh = mat4x4_mul_vec4(viewport(vh.x, vh.y, img->width, img->height), vh); return project_vec4(vh); } diff --git a/src/obj.c b/src/obj.c index 0094a9e..d408f39 100644 --- a/src/obj.c +++ b/src/obj.c @@ -162,7 +162,7 @@ internal void render_triangle(const Triangle *triangle, const Model *model, for (u64 i = 0; i < TRIANGLE_VERTICES; ++i) { vertices[i] = shader->vertex(&vertices[i], shader->model_view, - shader->projection, render); + shader->projection, &render->img); } if (render_type == RENDER_TYPE_WIREFRAME) { diff --git a/src/obj.h b/src/obj.h index 03ee5a0..7ac49bf 100644 --- a/src/obj.h +++ b/src/obj.h @@ -4,8 +4,8 @@ #include "aliases.h" #include "img.h" #include "mem_arena.h" +#include "shader.h" #include "typed_list.h" -#include "vec.h" #define INVALID_MODEL ((Model){0}) #define IS_INVALID_MODEL(m) (m.vertices == NULL || m.triangles == NULL) @@ -55,18 +55,6 @@ struct render { Depth depth; }; -typedef V3f(VertexShader)(const V3f *vertex, M4x4f *model_view, - M4x4f *projection, const Render *render); -typedef bool(FragmentShader)(Colour colour); - -typedef struct shader Shader; -struct shader { - VertexShader *vertex; - FragmentShader *fragment; - M4x4f *model_view; - M4x4f *projection; -}; - Model load_obj_file(Arena *arena, const char *filename, const char *texture); bool init_render(Arena *arena, Render *render, u64 width, u64 height); void render_model(const Model *model, Render *render, const Shader *shader, diff --git a/src/shader.h b/src/shader.h new file mode 100644 index 0000000..42817d8 --- /dev/null +++ b/src/shader.h @@ -0,0 +1,19 @@ +#ifndef SHADER_H +#define SHADER_H + +#include "img.h" +#include "vec.h" + +typedef V3f(VertexShader)(const V3f *vertex, M4x4f *model_view, + M4x4f *projection, const Image *img); +typedef bool(FragmentShader)(Colour colour); + +typedef struct shader Shader; +struct shader { + VertexShader *vertex; + FragmentShader *fragment; + M4x4f *model_view; + M4x4f *projection; +}; + +#endif // SHADER_H