Add render passes
This commit is contained in:
parent
7a17d129a1
commit
0aacccdf67
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user