Pass vertex as pointer

This commit is contained in:
Abdelrahman Said 2024-08-17 20:21:30 +01:00
parent f77fa5694b
commit fdce10a85c

@ -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);
}