Compare commits
No commits in common. "d5a18828c572502a6db2361a0e7118a99b650b6e" and "96c5d21f7993c920400444847b434cef33946c6b" have entirely different histories.
d5a18828c5
...
96c5d21f79
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user