Remove U8Image and start implementing shadow render pass
This commit is contained in:
parent
88e9d3550a
commit
56fbde696f
@ -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 dx = absolute((i64)x1 - (i64)x0);
|
||||||
u64 dy = absolute((i64)y1 - (i64)y0);
|
u64 dy = absolute((i64)y1 - (i64)y0);
|
||||||
f32 t = 0.0f;
|
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);
|
write_p7_image(img->width, img->height, (u8 *)(img->buf), filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
#include "aliases.h"
|
#include "aliases.h"
|
||||||
#include "mem_arena.h"
|
#include "mem_arena.h"
|
||||||
#include "vec.h"
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define BUF_TYPE(TYPE, NAME) \
|
#define BUF_TYPE(TYPE, NAME) \
|
||||||
@ -24,8 +23,7 @@ struct colour {
|
|||||||
};
|
};
|
||||||
|
|
||||||
BUF_TYPE(void, Buffer);
|
BUF_TYPE(void, Buffer);
|
||||||
BUF_TYPE(V4f, Image);
|
BUF_TYPE(Colour, Image);
|
||||||
BUF_TYPE(Colour, U8Image);
|
|
||||||
BUF_TYPE(f32, Depth);
|
BUF_TYPE(f32, Depth);
|
||||||
|
|
||||||
#define init_buffer(ARENA, BUF) (_init_buffer(ARENA, (Buffer *)BUF, BUF_SIZE(BUF)))
|
#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);
|
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 _set_pixel(Buffer *buffer, u64 x, u64 y, void *value, u64 base_size);
|
||||||
void _clear_buffer(Buffer *buffer, 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 draw_line(Image *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);
|
||||||
|
|
||||||
#endif // IMG_H
|
#endif // IMG_H
|
||||||
|
14
src/main.c
14
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 bg = {.r = 42, .g = 45, .b = 52, .a = 255};
|
||||||
Colour main_colour = {.r = 14, .g = 156, .b = 208, .a = 255};
|
Colour main_colour = {.r = 14, .g = 156, .b = 208, .a = 255};
|
||||||
|
|
||||||
Render render;
|
Render shadowbuffer, framebuffer;
|
||||||
if (!init_render(arena, &render, IMAGE_DIMENSION, IMAGE_DIMENSION)) {
|
if (!init_render(arena, &shadowbuffer, IMAGE_DIMENSION, IMAGE_DIMENSION) ||
|
||||||
|
!init_render(arena, &framebuffer, IMAGE_DIMENSION, IMAGE_DIMENSION)) {
|
||||||
return TINY_EXIT_RENDER_INIT_FAILED;
|
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));
|
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, &shadowbuffer, depth, RENDER_TYPE_SHADED, main_colour);
|
||||||
render_model(&obj, &render, perspective_diffuse, RENDER_TYPE_SHADED, main_colour);
|
render_model(&obj, &framebuffer, perspective_diffuse, RENDER_TYPE_SHADED, main_colour);
|
||||||
save_image(&(render.output), "result.pam");
|
|
||||||
|
save_image(&(framebuffer.img), "result.pam");
|
||||||
|
|
||||||
return TINY_EXIT_SUCCESS;
|
return TINY_EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -31,11 +31,6 @@ bool init_render(Arena *arena, Render *render, u64 width, u64 height) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
render->output = (U8Image){.width = width, .height = height};
|
|
||||||
if (!init_buffer(arena, &(render->output))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
render->depth = (Depth){.width = width, .height = height};
|
render->depth = (Depth){.width = width, .height = height};
|
||||||
if (!init_buffer(arena, &(render->depth))) {
|
if (!init_buffer(arena, &(render->depth))) {
|
||||||
return false;
|
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],
|
internal void fill_triangle(Render *render, ShaderID shader, VertexData vertices[TRIANGLE_VERTICES],
|
||||||
Colour colour, const Model *model, RenderType type) {
|
Colour colour, const Model *model, RenderType type) {
|
||||||
Image *img = &(render->img);
|
Image *img = &(render->img);
|
||||||
U8Image *out = &(render->output);
|
|
||||||
Depth *depth = &(render->depth);
|
Depth *depth = &(render->depth);
|
||||||
|
|
||||||
V2f vp_verts[TRIANGLE_VERTICES] = {0};
|
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(depth, x, y, &z);
|
||||||
set_pixel(img, x, y, &result.colour);
|
set_pixel(img, x, y, &output_colour);
|
||||||
set_pixel(out, x, y, &output_colour);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,6 @@ typedef enum {
|
|||||||
typedef struct render Render;
|
typedef struct render Render;
|
||||||
struct render {
|
struct render {
|
||||||
Image img;
|
Image img;
|
||||||
U8Image output;
|
|
||||||
Depth depth;
|
Depth depth;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
#include "depth_shader.h"
|
#include "depth_shader.h"
|
||||||
#include "constants.h"
|
|
||||||
#include "shader.h"
|
#include "shader.h"
|
||||||
|
|
||||||
VertexData depth_shader_vertex(void *shader, const VertexData *vert, u8 index, const Model *model) {
|
VertexData depth_shader_vertex(void *shader, const VertexData *vert, u8 index, const Model *model) {
|
||||||
|
Loading…
Reference in New Issue
Block a user