From 0aacccdf677045b1323f3f02fe2e4d3d2ea536da Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sat, 14 Sep 2024 18:05:09 +0100 Subject: [PATCH] Add render passes --- src/model/render.c | 2 ++ src/model/render.h | 11 ++++++++++- src/tiny/tiny.c | 15 ++++++++------- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/model/render.c b/src/model/render.c index d8a78d6..9657d34 100644 --- a/src/model/render.c +++ b/src/model/render.c @@ -9,6 +9,8 @@ #include #include +Render g_render_passes[COUNT_RENDER_PASS] = {0}; + typedef struct triangle_bbox TriangleBBox; struct triangle_bbox { u64 x0; diff --git a/src/model/render.h b/src/model/render.h index 478bd8a..dfe684d 100644 --- a/src/model/render.h +++ b/src/model/render.h @@ -12,7 +12,7 @@ typedef enum { RENDER_TYPE_FILLED, RENDER_TYPE_SHADED, - COUNT_RENDER_TYPES, + COUNT_RENDER_TYPE, } RenderType; typedef enum { @@ -28,6 +28,15 @@ struct render { Depth depth; }; +enum render_pass { + RENDER_PASS_SHADOW, + RENDER_PASS_MAIN, + + COUNT_RENDER_PASS, +}; + +extern Render g_render_passes[COUNT_RENDER_PASS]; + bool init_render(Arena *arena, Render *render, u64 width, u64 height); void render_model(const Model *model, Render *render, ShaderID shader, RenderType render_type, Colour colour); diff --git a/src/tiny/tiny.c b/src/tiny/tiny.c index 9c64c9d..abbe3fc 100644 --- a/src/tiny/tiny.c +++ b/src/tiny/tiny.c @@ -83,9 +83,10 @@ internal i32 tinyrenderer(Arena *arena, TinyArgs args) { Colour bg = {.r = 42, .g = 45, .b = 52, .a = 255}; Colour main_colour = {.r = 14, .g = 156, .b = 208, .a = 255}; - Render shadowbuffer, framebuffer; - if (!init_render(arena, &shadowbuffer, IMAGE_DIMENSION, IMAGE_DIMENSION) || - !init_render(arena, &framebuffer, IMAGE_DIMENSION, IMAGE_DIMENSION)) { + Render *shadowbuffer = &(g_render_passes[RENDER_PASS_SHADOW]); + Render *framebuffer = &(g_render_passes[RENDER_PASS_MAIN]); + if (!init_render(arena, shadowbuffer, IMAGE_DIMENSION, IMAGE_DIMENSION) || + !init_render(arena, framebuffer, IMAGE_DIMENSION, IMAGE_DIMENSION)) { return TINY_EXIT_RENDER_INIT_FAILED; } @@ -99,12 +100,12 @@ internal i32 tinyrenderer(Arena *arena, TinyArgs args) { load_shaders(viewport(0, 0, IMAGE_DIMENSION, IMAGE_DIMENSION)); - clear_buffer(&(framebuffer.img), &bg); + clear_buffer(&(framebuffer->img), &bg); - render_model(&obj, &shadowbuffer, depth, RENDER_TYPE_SHADED, main_colour); - render_model(&obj, &framebuffer, perspective_diffuse, RENDER_TYPE_SHADED, main_colour); + render_model(&obj, shadowbuffer, depth, RENDER_TYPE_SHADED, main_colour); + render_model(&obj, framebuffer, perspective_diffuse, RENDER_TYPE_SHADED, main_colour); - save_image(&(framebuffer.img), "result.pam"); + save_image(&(framebuffer->img), "result.pam"); return TINY_EXIT_SUCCESS; }