diff --git a/include/rasteriser/rasteriser.h b/include/rasteriser/rasteriser.h index 1d9a20f..94ec488 100644 --- a/include/rasteriser/rasteriser.h +++ b/include/rasteriser/rasteriser.h @@ -21,14 +21,12 @@ 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, - 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_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_line(window_t *wnd, Arena *arena, line_t line, colour_t colour); #endif // !RASTERISER_H diff --git a/src/rasteriser/rasteriser.c b/src/rasteriser/rasteriser.c index cb404ed..e1c07b4 100644 --- a/src/rasteriser/rasteriser.c +++ b/src/rasteriser/rasteriser.c @@ -16,17 +16,15 @@ 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, - colour_t colour) { +void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle) { order_triangle_points(&triangle); - 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); + 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); } -void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle, - colour_t colour) { +void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle) { order_triangle_points(&triangle); i32 x0 = triangle.p0.x; @@ -59,13 +57,12 @@ 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, colour); + set_pixel(wnd, x, y, triangle.colour); } } } -void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle, - colour_t colour) { +void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle) { order_triangle_points(&triangle); i32 x0 = triangle.p0.x; @@ -124,7 +121,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(colour, list_get(h_segment, x - xl)); + shaded_colour = colour_mul(triangle.colour, list_get(h_segment, x - xl)); set_pixel(wnd, x, y, shaded_colour); } }