Add render passes

This commit is contained in:
Abdelrahman Said 2024-09-14 18:05:09 +01:00
parent 7a17d129a1
commit 0aacccdf67
3 changed files with 20 additions and 8 deletions

View File

@ -9,6 +9,8 @@
#include <stdint.h>
#include <math.h>
Render g_render_passes[COUNT_RENDER_PASS] = {0};
typedef struct triangle_bbox TriangleBBox;
struct triangle_bbox {
u64 x0;

View File

@ -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);

View File

@ -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;
}