#ifndef OBJ_H #define OBJ_H #include "aliases.h" #include "constants.h" #include "img.h" #include "mem_arena.h" #include "typed_list.h" #include "vec.h" #define INVALID_MODEL ((Model){0}) #define IS_INVALID_MODEL(m) (m.vertices == NULL || m.triangles == NULL) typedef struct triangle Triangle; struct triangle { union { u64 positions[TRIANGLE_VERTICES]; struct { u64 p0; u64 p1; u64 p2; }; }; union { u64 normals[TRIANGLE_VERTICES]; struct { u64 n0; u64 n1; u64 n2; }; }; union { u64 coordinates[TRIANGLE_VERTICES]; struct { u64 tx0; u64 tx1; u64 tx2; }; }; }; MAKE_LIST_TYPE(Triangle); typedef struct point_light PointLight; struct point_light { V3f diffuse_intensity; V3f specular_intensity; V3f position; }; typedef struct model Model; struct model { LIST_TYPE(V3f) * vertices; LIST_TYPE(V3f) * normals; LIST_TYPE(V2f) * texture_coordinates; LIST_TYPE(Triangle) * triangles; Image *texture; Image *normal; }; Model load_obj_file(Arena *arena, const char *filename, const char *diffuse, const char *tangent); #endif // OBJ_H