Added: - Updated `.gitignore` to ignore the `[Bb]uild/` directory. - Additional tasks added to the roadmap in `README.md` for light unit standardization and GPU backend support. Changed: - Removed line in `settings.json` that disabled error squiggles for C/C++ code. - Modified `Triangle.h` to include `material_id` in `triangle_t` and reorganized properties. - Reordered parameters in `triangle_collection_init` for clarity. - Updated `shading_context_t` in `Material.h` and added size parameter to `material_create`. - Streamlined initialization in `scene_init` and updated `scene_free` for proper resource management. - Updated `window_create` in `Window.h` to accept a `render_job_t` parameter. - Introduced `renderer_start` in `Renderer.c` to handle rendering jobs and optimized pixel rendering logic.
53 lines
1.6 KiB
C
53 lines
1.6 KiB
C
#ifndef TRIANGLE_H
|
|
#define TRIANGLE_H
|
|
|
|
#include "Common.h"
|
|
#include "Geometry/AABB.h"
|
|
#include <stdint.h>
|
|
|
|
typedef struct
|
|
{
|
|
vec3s point_1;
|
|
vec3s point_2;
|
|
vec3s point_3;
|
|
vec3s normal_1;
|
|
vec3s normal_2;
|
|
vec3s normal_3;
|
|
vec3s normal_face;
|
|
|
|
uint8_t material_id;
|
|
}triangle_t;
|
|
|
|
//TODO: Handle triangle remove, we can use something like sparse set.
|
|
typedef struct
|
|
{
|
|
uint64_t count;
|
|
uint64_t size;
|
|
|
|
triangle_t* buffer;
|
|
}triangle_collection_t;
|
|
|
|
bool triangle_collection_init(triangle_collection_t* triangles, size_t size);
|
|
void triangle_collection_resize(triangle_collection_t* collection, size_t size);
|
|
void triangle_collection_free(triangle_collection_t* collection);
|
|
|
|
void triangle_create_with_normals(vec3s point1, vec3s point2, vec3s point3,
|
|
vec3s normal1, vec3s normal2, vec3s normal3,
|
|
uint8_t material_id, triangle_collection_t* collection);
|
|
void triangle_create(vec3s point1, vec3s point2, vec3s point3, uint8_t material_id, triangle_collection_t* collection);
|
|
|
|
inline vec3s triangle_centroid(const triangle_t triangle)
|
|
{
|
|
return glms_vec3_scale(glms_vec3_add(glms_vec3_add(triangle.point_1, triangle.point_2), triangle.point_3), 1.0f / 3.0f);
|
|
}
|
|
|
|
inline aabb_t compute_bounds_triangle(triangle_t triangle)
|
|
{
|
|
aabb_t bounds;
|
|
bounds.min = glms_vec3_minv(triangle.point_1, glms_vec3_minv(triangle.point_2, triangle.point_3));
|
|
bounds.max = glms_vec3_maxv(triangle.point_1, glms_vec3_maxv(triangle.point_2, triangle.point_3));
|
|
return bounds;
|
|
}
|
|
|
|
#endif // TRIANGLE_H
|