diff --git a/src/obj.c b/src/obj.c index 66581c4..049a80d 100644 --- a/src/obj.c +++ b/src/obj.c @@ -113,7 +113,7 @@ internal TriangleBBox get_triangle_bbox(const Image *img, internal V3f get_barycentric_coords(f32 d00, f32 d01, f32 d11, f32 denom, const V2i *ab, const V2i *ac, const V2i *ap); -internal V3f get_viewport_vertex(V3f vertex, const Image *img); +internal V3f get_viewport_vertex(const V3f *vertex, const Image *img); V3f g_light_dir = {0.0f, 0.0f, 1.0f}; @@ -298,8 +298,8 @@ internal void render_triangle(const Triangle *triangle, const Model *model, v0 = vertices[i]; v1 = vertices[(i + 1) % TRIANGLE_VERTICES]; - vp0 = get_viewport_vertex(v0, img); - vp1 = get_viewport_vertex(v1, img); + vp0 = get_viewport_vertex(&v0, img); + vp1 = get_viewport_vertex(&v1, img); draw_line(img, (u64)vp0.x, (u64)vp0.y, (u64)vp1.x, (u64)vp1.y, colour); } @@ -317,9 +317,9 @@ internal void fill_triangle(Render *render, V3f vertices[TRIANGLE_VERTICES], Depth *depth = &(render->depth); TriangleBBox bbox = get_triangle_bbox(img, vertices); - V3f v0 = get_viewport_vertex(vertices[0], img); - V3f v1 = get_viewport_vertex(vertices[1], img); - V3f v2 = get_viewport_vertex(vertices[2], img); + V3f v0 = get_viewport_vertex(&vertices[0], img); + V3f v1 = get_viewport_vertex(&vertices[1], img); + V3f v2 = get_viewport_vertex(&vertices[2], img); V2i ab = V2(V2i, i64, v0.x, v0.y, v1.x, v1.y); V2i ac = V2(V2i, i64, v0.x, v0.y, v2.x, v2.y); @@ -441,8 +441,8 @@ internal TriangleBBox get_triangle_bbox(const Image *img, f32 y0 = max(vertices[0].y, max(vertices[1].y, vertices[2].y)); f32 y1 = min(vertices[0].y, min(vertices[1].y, vertices[2].y)); - V3f minimum = get_viewport_vertex((V3f){x0, y0, 0.0f}, img); - V3f maximum = get_viewport_vertex((V3f){x1, y1, 0.0f}, img); + V3f minimum = get_viewport_vertex(&(V3f){x0, y0, 0.0f}, img); + V3f maximum = get_viewport_vertex(&(V3f){x1, y1, 0.0f}, img); return (TriangleBBox){ .x0 = minimum.x, @@ -469,8 +469,8 @@ internal V3f get_barycentric_coords(f32 d00, f32 d01, f32 d11, f32 denom, return (V3f){v, w, u}; } -internal V3f get_viewport_vertex(V3f vertex, const Image *img) { - V4f vh = {.x = vertex.x, .y = 0.0f - vertex.y, .z = vertex.z, .w = 1.0f}; +internal V3f get_viewport_vertex(const V3f *vertex, const Image *img) { + V4f vh = {.x = vertex->x, .y = 0.0f - vertex->y, .z = vertex->z, .w = 1.0f}; vh = mat4x4_mul_vec4(viewport(vh.x, vh.y, img->width, img->height), vh); return project_vec4(vh); }