Compare commits

..

No commits in common. "d5a18828c572502a6db2361a0e7118a99b650b6e" and "96c5d21f7993c920400444847b434cef33946c6b" have entirely different histories.

3 changed files with 33 additions and 29 deletions

View File

@ -21,12 +21,14 @@ typedef struct {
f32 h0;
f32 h1;
f32 h2;
colour_t colour;
} triangle_t;
void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour);
void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour);
void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour);
void draw_line(window_t *wnd, Arena *arena, line_t line, colour_t colour);
#endif // !RASTERISER_H

View File

@ -74,10 +74,9 @@ int main(void) {
line_t lDAfb = {project_point(vDf, &window, &camera, viewport),
project_point(vDb, &window, &camera, viewport)};
Arena *frame_arena = NULL;
Arena *arena = NULL;
u64 capacity = 10ull * 1024ull * 1024ull * 1024ull;
if (!wapp_mem_arena_init(&frame_arena, capacity, WAPP_MEM_ALLOC_RESERVE,
false)) {
if (!wapp_mem_arena_init(&arena, capacity, WAPP_MEM_ALLOC_RESERVE, false)) {
return EXIT_FAILURE;
}
@ -96,27 +95,27 @@ int main(void) {
clear_window(&window, bg);
draw_line(&window, frame_arena, lABf, front);
draw_line(&window, frame_arena, lBCf, front);
draw_line(&window, frame_arena, lCDf, front);
draw_line(&window, frame_arena, lDAf, front);
draw_line(&window, arena, lABf, front);
draw_line(&window, arena, lBCf, front);
draw_line(&window, arena, lCDf, front);
draw_line(&window, arena, lDAf, front);
draw_line(&window, frame_arena, lABb, back);
draw_line(&window, frame_arena, lBCb, back);
draw_line(&window, frame_arena, lCDb, back);
draw_line(&window, frame_arena, lDAb, back);
draw_line(&window, arena, lABb, back);
draw_line(&window, arena, lBCb, back);
draw_line(&window, arena, lCDb, back);
draw_line(&window, arena, lDAb, back);
draw_line(&window, frame_arena, lABfb, fb);
draw_line(&window, frame_arena, lBCfb, fb);
draw_line(&window, frame_arena, lCDfb, fb);
draw_line(&window, frame_arena, lDAfb, fb);
draw_line(&window, arena, lABfb, fb);
draw_line(&window, arena, lBCfb, fb);
draw_line(&window, arena, lCDfb, fb);
draw_line(&window, arena, lDAfb, fb);
swap_buffers(&window);
wapp_mem_arena_clear(frame_arena);
wapp_mem_arena_clear(arena);
}
wapp_mem_arena_destroy(&frame_arena);
wapp_mem_arena_destroy(&arena);
close_window(&window);
return EXIT_SUCCESS;

View File

@ -16,15 +16,17 @@ internal list_float_t *interpolate(Arena *arena, i32 i0, f32 d0, i32 i1,
internal inline void order_triangle_points(triangle_t *triangle);
void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle) {
void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour) {
order_triangle_points(&triangle);
draw_line(wnd, arena, (line_t){triangle.p0, triangle.p1}, triangle.colour);
draw_line(wnd, arena, (line_t){triangle.p1, triangle.p2}, triangle.colour);
draw_line(wnd, arena, (line_t){triangle.p2, triangle.p0}, triangle.colour);
draw_line(wnd, arena, (line_t){triangle.p0, triangle.p1}, colour);
draw_line(wnd, arena, (line_t){triangle.p1, triangle.p2}, colour);
draw_line(wnd, arena, (line_t){triangle.p2, triangle.p0}, colour);
}
void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle) {
void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour) {
order_triangle_points(&triangle);
i32 x0 = triangle.p0.x;
@ -57,12 +59,13 @@ void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle) {
i32 index = y - y0;
for (i64 x = (i64)list_get(x_left, index); x < list_get(x_right, index);
++x) {
set_pixel(wnd, x, y, triangle.colour);
set_pixel(wnd, x, y, colour);
}
}
}
void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle) {
void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour) {
order_triangle_points(&triangle);
i32 x0 = triangle.p0.x;
@ -121,7 +124,7 @@ void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle) {
for (i64 x = xl; x < xr; ++x) {
h_segment = interpolate(arena, xl, list_get(h_left, index), xr,
list_get(h_right, index));
shaded_colour = colour_mul(triangle.colour, list_get(h_segment, x - xl));
shaded_colour = colour_mul(colour, list_get(h_segment, x - xl));
set_pixel(wnd, x, y, shaded_colour);
}
}