diff --git a/src/img/img.c b/src/img/img.c index 670b0fc..51a63f1 100644 --- a/src/img/img.c +++ b/src/img/img.c @@ -47,7 +47,7 @@ void _clear_buffer(Buffer *buffer, void *value, u64 base_size) { } } -void draw_line(U8Image *img, u64 x0, u64 y0, u64 x1, u64 y1, Colour colour) { +void draw_line(Image *img, u64 x0, u64 y0, u64 x1, u64 y1, Colour colour) { u64 dx = absolute((i64)x1 - (i64)x0); u64 dy = absolute((i64)y1 - (i64)y0); f32 t = 0.0f; @@ -79,7 +79,7 @@ void draw_line(U8Image *img, u64 x0, u64 y0, u64 x1, u64 y1, Colour colour) { } } -void save_image(const U8Image *img, const char *filename) { +void save_image(const Image *img, const char *filename) { write_p7_image(img->width, img->height, (u8 *)(img->buf), filename); } diff --git a/src/img/img.h b/src/img/img.h index 46bba9f..8bf2d48 100644 --- a/src/img/img.h +++ b/src/img/img.h @@ -3,7 +3,6 @@ #include "aliases.h" #include "mem_arena.h" -#include "vec.h" #include <stdbool.h> #define BUF_TYPE(TYPE, NAME) \ @@ -24,8 +23,7 @@ struct colour { }; BUF_TYPE(void, Buffer); -BUF_TYPE(V4f, Image); -BUF_TYPE(Colour, U8Image); +BUF_TYPE(Colour, Image); BUF_TYPE(f32, Depth); #define init_buffer(ARENA, BUF) (_init_buffer(ARENA, (Buffer *)BUF, BUF_SIZE(BUF))) @@ -37,7 +35,7 @@ bool _init_buffer(Arena *arena, Buffer *buffer, u64 base_size); u8 *_get_pixel(Buffer *buffer, u64 x, u64 y, u64 base_size); void _set_pixel(Buffer *buffer, u64 x, u64 y, void *value, u64 base_size); void _clear_buffer(Buffer *buffer, void *value, u64 base_size); -void draw_line(U8Image *img, u64 x0, u64 y0, u64 x1, u64 y1, Colour colour); -void save_image(const U8Image *img, const char *filename); +void draw_line(Image *img, u64 x0, u64 y0, u64 x1, u64 y1, Colour colour); +void save_image(const Image *img, const char *filename); #endif // IMG_H diff --git a/src/main.c b/src/main.c index 19693fa..ed60d86 100644 --- a/src/main.c +++ b/src/main.c @@ -83,8 +83,9 @@ 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 render; - if (!init_render(arena, &render, IMAGE_DIMENSION, IMAGE_DIMENSION)) { + Render shadowbuffer, framebuffer; + if (!init_render(arena, &shadowbuffer, IMAGE_DIMENSION, IMAGE_DIMENSION) || + !init_render(arena, &framebuffer, IMAGE_DIMENSION, IMAGE_DIMENSION)) { return TINY_EXIT_RENDER_INIT_FAILED; } @@ -98,11 +99,12 @@ internal i32 tinyrenderer(Arena *arena, TinyArgs args) { load_shaders(viewport(0, 0, IMAGE_DIMENSION, IMAGE_DIMENSION)); - clear_buffer(&(render.output), &bg); + clear_buffer(&(framebuffer.img), &bg); - // render_model(&obj, &shadow, depth, RENDER_TYPE_SHADED, main_colour); - render_model(&obj, &render, perspective_diffuse, RENDER_TYPE_SHADED, main_colour); - save_image(&(render.output), "result.pam"); + 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"); return TINY_EXIT_SUCCESS; } diff --git a/src/model/render.c b/src/model/render.c index c66172e..d8a78d6 100644 --- a/src/model/render.c +++ b/src/model/render.c @@ -31,11 +31,6 @@ bool init_render(Arena *arena, Render *render, u64 width, u64 height) { return false; } - render->output = (U8Image){.width = width, .height = height}; - if (!init_buffer(arena, &(render->output))) { - return false; - } - render->depth = (Depth){.width = width, .height = height}; if (!init_buffer(arena, &(render->depth))) { return false; @@ -85,7 +80,6 @@ internal void render_triangle(const Triangle *triangle, const Model *model, Shad internal void fill_triangle(Render *render, ShaderID shader, VertexData vertices[TRIANGLE_VERTICES], Colour colour, const Model *model, RenderType type) { Image *img = &(render->img); - U8Image *out = &(render->output); Depth *depth = &(render->depth); V2f vp_verts[TRIANGLE_VERTICES] = {0}; @@ -137,8 +131,7 @@ internal void fill_triangle(Render *render, ShaderID shader, VertexData vertices }; set_pixel(depth, x, y, &z); - set_pixel(img, x, y, &result.colour); - set_pixel(out, x, y, &output_colour); + set_pixel(img, x, y, &output_colour); } } } diff --git a/src/model/render.h b/src/model/render.h index ac67f45..478bd8a 100644 --- a/src/model/render.h +++ b/src/model/render.h @@ -25,7 +25,6 @@ typedef enum { typedef struct render Render; struct render { Image img; - U8Image output; Depth depth; }; diff --git a/src/shader/depth_shader.c b/src/shader/depth_shader.c index 19a02cc..1facff6 100644 --- a/src/shader/depth_shader.c +++ b/src/shader/depth_shader.c @@ -1,5 +1,4 @@ #include "depth_shader.h" -#include "constants.h" #include "shader.h" VertexData depth_shader_vertex(void *shader, const VertexData *vert, u8 index, const Model *model) {