More reformatting

This commit is contained in:
Abdelrahman Said 2024-09-14 00:22:36 +01:00
parent 09e9f611f8
commit ab8343e749
11 changed files with 48 additions and 68 deletions

View File

@ -5,8 +5,7 @@
#include "vec.h" #include "vec.h"
#include <stdio.h> #include <stdio.h>
Model load_obj_file(Arena *arena, const char *filename, const char *diffuse, Model load_obj_file(Arena *arena, const char *filename, const char *diffuse, const char *tangent) {
const char *tangent) {
if (!arena) { if (!arena) {
return INVALID_MODEL; return INVALID_MODEL;
} }
@ -22,8 +21,7 @@ Model load_obj_file(Arena *arena, const char *filename, const char *diffuse,
.texture_coordinates = list_create(V2f, arena), .texture_coordinates = list_create(V2f, arena),
.triangles = list_create(Triangle, arena), .triangles = list_create(Triangle, arena),
}; };
if (!(model.vertices) || !(model.normals) || !(model.texture_coordinates) || if (!(model.vertices) || !(model.normals) || !(model.texture_coordinates) || !(model.triangles)) {
!(model.triangles)) {
return INVALID_MODEL; return INVALID_MODEL;
} }

View File

@ -50,15 +50,14 @@ struct point_light {
typedef struct model Model; typedef struct model Model;
struct model { struct model {
LIST_TYPE(V3f) * vertices; LIST_TYPE(V3f) *vertices;
LIST_TYPE(V3f) * normals; LIST_TYPE(V3f) *normals;
LIST_TYPE(V2f) * texture_coordinates; LIST_TYPE(V2f) *texture_coordinates;
LIST_TYPE(Triangle) * triangles; LIST_TYPE(Triangle) *triangles;
Image *texture; Image *texture;
Image *normal; Image *normal;
}; };
Model load_obj_file(Arena *arena, const char *filename, const char *diffuse, Model load_obj_file(Arena *arena, const char *filename, const char *diffuse, const char *tangent);
const char *tangent);
#endif // OBJ_H #endif // OBJ_H

View File

@ -16,16 +16,13 @@ struct triangle_bbox {
u64 y1; u64 y1;
}; };
internal void render_triangle(const Triangle *triangle, const Model *model, internal void render_triangle(const Triangle *triangle, const Model *model, ShaderID shader,
ShaderID shader, Render *render, Render *render, RenderType render_type, Colour colour);
RenderType render_type, Colour colour); internal void fill_triangle(Render *render, ShaderID shader, VertexData vertices[TRIANGLE_VERTICES],
internal void fill_triangle(Render *render, ShaderID shader, Colour colour, const Model *model, RenderType type);
VertexData vertices[TRIANGLE_VERTICES], internal TriangleBBox get_triangle_bbox(const Image *img, V2f vertices[TRIANGLE_VERTICES]);
Colour colour, const Model *model, RenderType type); internal V3f get_barycentric_coords(V2f a, V2f b, V2f c, V2f p);
internal TriangleBBox get_triangle_bbox(const Image *img, internal V2f get_viewport_vertex(const V3f *vertex, const Image *img);
V2f vertices[TRIANGLE_VERTICES]);
internal V3f get_barycentric_coords(V2f a, V2f b, V2f c, V2f p);
internal V2f get_viewport_vertex(const V3f *vertex, const Image *img);
bool init_render(Arena *arena, Render *render, u64 width, u64 height) { bool init_render(Arena *arena, Render *render, u64 width, u64 height) {
render->img = (Image){.width = width, .height = height}; render->img = (Image){.width = width, .height = height};
@ -53,9 +50,8 @@ void render_model(const Model *model, Render *render, ShaderID shader,
} }
} }
internal void render_triangle(const Triangle *triangle, const Model *model, internal void render_triangle(const Triangle *triangle, const Model *model, ShaderID shader,
ShaderID shader, Render *render, Render *render, RenderType render_type, Colour colour) {
RenderType render_type, Colour colour) {
Image *img = &(render->img); Image *img = &(render->img);
VertexData vertices[TRIANGLE_VERTICES]; VertexData vertices[TRIANGLE_VERTICES];
for (u64 i = 0; i < TRIANGLE_VERTICES; ++i) { for (u64 i = 0; i < TRIANGLE_VERTICES; ++i) {
@ -80,11 +76,9 @@ internal void render_triangle(const Triangle *triangle, const Model *model,
} }
} }
internal void fill_triangle(Render *render, ShaderID shader, internal void fill_triangle(Render *render, ShaderID shader, VertexData vertices[TRIANGLE_VERTICES],
VertexData vertices[TRIANGLE_VERTICES], Colour colour, const Model *model, RenderType type) {
Colour colour, const Model *model, Image *img = &(render->img);
RenderType type) {
Image *img = &(render->img);
Depth *depth = &(render->depth); Depth *depth = &(render->depth);
V2f vp_verts[TRIANGLE_VERTICES] = {0}; V2f vp_verts[TRIANGLE_VERTICES] = {0};
@ -94,10 +88,10 @@ internal void fill_triangle(Render *render, ShaderID shader,
TriangleBBox bbox = get_triangle_bbox(img, vp_verts); TriangleBBox bbox = get_triangle_bbox(img, vp_verts);
V2f point; V2f point;
V3f coords; V3f coords;
f32 z; f32 z;
f32 zbuf; f32 zbuf;
FragmentResult result; FragmentResult result;
f32 intensity = 1.0f; f32 intensity = 1.0f;
@ -110,10 +104,10 @@ internal void fill_triangle(Render *render, ShaderID shader,
continue; continue;
} }
z = 0.0f; z = 0.0f;
z += vertices[0].position.z * coords.x + z += vertices[0].position.z * coords.x +
vertices[1].position.z * coords.y + vertices[1].position.z * coords.y +
vertices[2].position.z * coords.z; vertices[2].position.z * coords.z;
zbuf = get_pixel(f32, &(render->depth), x, y); zbuf = get_pixel(f32, &(render->depth), x, y);
if (z <= zbuf) { if (z <= zbuf) {
@ -131,8 +125,7 @@ internal void fill_triangle(Render *render, ShaderID shader,
} }
} }
internal TriangleBBox get_triangle_bbox(const Image *img, internal TriangleBBox get_triangle_bbox(const Image *img, V2f vertices[TRIANGLE_VERTICES]) {
V2f vertices[TRIANGLE_VERTICES]) {
f32 x0 = min(vertices[0].x, min(vertices[1].x, vertices[2].x)); f32 x0 = min(vertices[0].x, min(vertices[1].x, vertices[2].x));
f32 x1 = max(vertices[0].x, max(vertices[1].x, vertices[2].x)); f32 x1 = max(vertices[0].x, max(vertices[1].x, vertices[2].x));
f32 y0 = min(vertices[0].y, min(vertices[1].y, vertices[2].y)); f32 y0 = min(vertices[0].y, min(vertices[1].y, vertices[2].y));

View File

@ -4,8 +4,7 @@
#include "shader.h" #include "shader.h"
#include "utils.h" #include "utils.h"
VertexData depth_shader_vertex(void *shader, const VertexData *vert, u8 index, VertexData depth_shader_vertex(void *shader, const VertexData *vert, u8 index, const Model *model) {
const Model *model) {
DepthShader *shdr = (DepthShader *)shader; DepthShader *shdr = (DepthShader *)shader;
V4f vh = V3_to_V4(vert->position); V4f vh = V3_to_V4(vert->position);
@ -16,8 +15,8 @@ VertexData depth_shader_vertex(void *shader, const VertexData *vert, u8 index,
return shdr->vertices[index]; return shdr->vertices[index];
} }
FragmentResult depth_shader_fragment(void *shader, const V3f *barycentric, FragmentResult depth_shader_fragment(void *shader, const V3f *barycentric, const Colour *colour,
const Colour *colour, const Model *model) { const Model *model) {
DepthShader *shdr = (DepthShader *)shader; DepthShader *shdr = (DepthShader *)shader;
// clang-format off // clang-format off

View File

@ -10,9 +10,8 @@ struct depth_shader {
#include "shader_base.inc" #include "shader_base.inc"
}; };
VertexData depth_shader_vertex(void *shader, const VertexData *vert, u8 index, VertexData depth_shader_vertex(void *shader, const VertexData *vert, u8 index, const Model *model);
const Model *model); FragmentResult depth_shader_fragment(void *shader, const V3f *barycentric, const Colour *colour,
FragmentResult depth_shader_fragment(void *shader, const V3f *barycentric, const Model *model);
const Colour *colour, const Model *model);
#endif // !DEPTH_SHADER_H #endif // !DEPTH_SHADER_H

View File

@ -4,8 +4,7 @@
#include "utils.h" #include "utils.h"
#include "vec.h" #include "vec.h"
VertexData general_shader_vertex(void *shader, const VertexData *vert, u8 index, VertexData general_shader_vertex(void *shader, const VertexData *vert, u8 index, const Model *model) {
const Model *model) {
Shader *shdr = (Shader *)shader; Shader *shdr = (Shader *)shader;
V4f vh = V3_to_V4(vert->position); V4f vh = V3_to_V4(vert->position);
@ -24,8 +23,7 @@ VertexData general_shader_vertex(void *shader, const VertexData *vert, u8 index,
return shdr->vertices[index]; return shdr->vertices[index];
} }
FragmentResult diffuse_shader_fragment(void *shader, const V3f *barycentric, FragmentResult diffuse_shader_fragment(void *shader, const V3f *barycentric, const Colour *colour,
const Colour *colour,
const Model *model) { const Model *model) {
Shader *shdr = (Shader *)shader; Shader *shdr = (Shader *)shader;
@ -104,8 +102,7 @@ FragmentResult diffuse_shader_fragment(void *shader, const V3f *barycentric,
return (FragmentResult){.colour = output}; return (FragmentResult){.colour = output};
} }
FragmentResult albedo_shader_fragment(void *shader, const V3f *barycentric, FragmentResult albedo_shader_fragment(void *shader, const V3f *barycentric, const Colour *colour,
const Colour *colour,
const Model *model) { const Model *model) {
Shader *shdr = (Shader *)shader; Shader *shdr = (Shader *)shader;

View File

@ -9,11 +9,9 @@ struct shader {
#include "shader_base.inc" #include "shader_base.inc"
}; };
VertexData general_shader_vertex(void *shader, const VertexData *vert, u8 index, VertexData general_shader_vertex(void *shader, const VertexData *vert, u8 index, const Model *model);
const Model *model); FragmentResult diffuse_shader_fragment(void *shader, const V3f *barycentric, const Colour *colour,
FragmentResult diffuse_shader_fragment(void *shader, const V3f *barycentric,
const Colour *colour,
const Model *model); const Model *model);
FragmentResult albedo_shader_fragment(void *shader, const V3f *barycentric, FragmentResult albedo_shader_fragment(void *shader, const V3f *barycentric, const Colour *colour,
const Colour *colour, const Model *model); const Model *model);
#endif // !MAIN_SHADER_H #endif // !MAIN_SHADER_H

View File

@ -21,7 +21,7 @@ struct vertex_data {
typedef struct fragment_result FragmentResult; typedef struct fragment_result FragmentResult;
struct fragment_result { struct fragment_result {
Colour colour; Colour colour;
bool discard; bool discard;
}; };
#define INVALID_SHADER ((ShaderID){0}) #define INVALID_SHADER ((ShaderID){0})

View File

@ -12,8 +12,8 @@ ShaderID orthographic_diffuse = {0};
ShaderID orthographic_albedo = {0}; ShaderID orthographic_albedo = {0};
ShaderID depth = {0}; ShaderID depth = {0};
internal Shader perspective = {0}; internal Shader perspective = {0};
internal Shader orthographic = {0}; internal Shader orthographic = {0};
internal DepthShader depth_shader = {0}; internal DepthShader depth_shader = {0};
internal V3f g_ambient_light = {0.1f, 0.1f, 0.1f}; internal V3f g_ambient_light = {0.1f, 0.1f, 0.1f};

View File

@ -6,9 +6,6 @@
#define CAPACITY_SCALAR 4 #define CAPACITY_SCALAR 4
internal Arena *get_temp_arena(void);
internal void destroy_temp_arena(Arena *arena);
Str8 str8(Arena *arena, char *str) { Str8 str8(Arena *arena, char *str) {
if (!str) { if (!str) {
return (Str8){0}; return (Str8){0};

View File

@ -12,15 +12,15 @@ enum {
typedef struct str8 Str8; typedef struct str8 Str8;
struct str8 { struct str8 {
char *str; char *str;
u64 length; u64 length;
u64 capacity; u64 capacity;
}; };
#define str8_lit(STR) (str8(NULL, STR)) #define str8_lit(STR) (str8(NULL, STR))
Str8 str8(Arena *arena, char *str); Str8 str8(Arena *arena, char *str);
Str8 str8_copy(Arena *arena, const Str8 *str); Str8 str8_copy(Arena *arena, const Str8 *str);
i32 str8_concat(Arena *arena, Str8 *dst, char *src); i32 str8_concat(Arena *arena, Str8 *dst, char *src);
Str8 str8_substr(Arena *arena, const Str8 *str, u64 start, u64 count); Str8 str8_substr(Arena *arena, const Str8 *str, u64 start, u64 count);
#endif // !STR_H #endif // !STR_H