Refactor some of the code.

This commit is contained in:
2025-04-24 00:05:21 +09:00
parent 17872804c5
commit 4db14ffdb0
7 changed files with 20 additions and 38 deletions

View File

@@ -8,7 +8,7 @@ typedef enum
{
PROGRESSIVE = 0,
TILE_BASED = 1,
} rendering_type_t;
} rendering_mode_t;
typedef struct
{
@@ -20,15 +20,14 @@ typedef struct
uint32_t bucket_size;
} rendering_config_t;
typedef struct
{
scene_t* scene;
render_target_t* render_target;
const rendering_config_t* config;
rendering_type_t rendering_type;
debug_flag_t rendering_flag;
rendering_mode_t rendering_type;
debug_flag_t debug_flag;
bool is_done;
} render_job_t;

View File

@@ -17,7 +17,6 @@ typedef struct
light_collection_t lights;
} scene_t;
bool scene_init(scene_t* scene, uint64_t triangle_count, uint8_t material_count, uint32_t punctual_light_count);
bool scene_build_bvh(scene_t* scene);
void scene_free(scene_t* scene);

View File

@@ -2,6 +2,7 @@
#include "Geometry/Triangle.h"
#include "cglm/struct/vec3.h"
// TODO: We still have small amount of block dots in current implementation. It's because of floating point precision. May need to fall back to double or handle it in a different way.
hit_result_t ray_intersect_triangle(ray_t ray, triangle_t triangle)
{
hit_result_t result = {0};

View File

@@ -41,7 +41,7 @@ void material_collection_free(material_collection_t* materials)
{
if (materials->buffer != NULL)
{
for (uint8_t i; i < materials->count; i++)
for (uint8_t i = 0; i < materials->count; i++)
{
void* data = materials->buffer[i].data;
if (data != NULL)

View File

@@ -4,13 +4,13 @@
#include <math.h>
bool render_target_init(uint32_t width, uint32_t height, render_target_t* render_target)
{
render_target->width = width;
render_target->height = height;
size_t size_of_pixel = sizeof(vec4s);
size_t buffer_size = (size_t)width * height * size_of_pixel;
size_t image_size = (size_t)width * height;
size_t buffer_size = image_size * size_of_pixel;
vec4s* buffer = (vec4s*)malloc(buffer_size);
if (buffer == NULL)
{
@@ -19,7 +19,7 @@ bool render_target_init(uint32_t width, uint32_t height, render_target_t* render
memset(buffer, 0, buffer_size);
for (size_t i = 0; i < buffer_size / size_of_pixel; i++)
for (size_t i = 0; i < image_size; i++)
{
buffer[i].w = 1.0;
}

View File

@@ -39,7 +39,7 @@ static inline uint16_t get_sample_count(uint16_t sample_count, int flag)
return sample_count;
}
static void render_pixel(const rendering_config_t* config, scene_t* scene, vec3s coord, uint32_t x, uint32_t y, int flag, vec4s* pixel_color)
static void render_pixel(const rendering_config_t* config, scene_t* scene, vec3s coord, uint32_t x, uint32_t y, debug_flag_t flag, vec4s* pixel_color)
{
vec4s accumulated_color = glms_vec4_zero();
uint32_t pixel_id = y * config->width + x;
@@ -118,7 +118,7 @@ void renderer_start(render_job_t* job)
}
vec4s pixel_color;
render_pixel(job->config, job->scene, coord, (uint32_t)x, (uint32_t)y, job->rendering_flag, &pixel_color);
render_pixel(job->config, job->scene, coord, (uint32_t)x, (uint32_t)y, job->debug_flag, &pixel_color);
render_target_set_pixel(job->render_target, (uint32_t)x, (uint32_t)y, pixel_color);
}
}

View File

@@ -58,22 +58,10 @@ static bool load_assets(scene_t* scene)
static bool initialize_renderer(const rendering_config_t* config, render_job_t** outJob, render_target_t* outImg, scene_t* outScene)
{
if (!scene_setup(outScene))
{
return false;
}
if (!load_assets(outScene))
{
return false;
}
if (!scene_build_bvh(outScene))
{
return false;
}
if (!render_target_init(config->width, config->height, outImg))
if (!scene_setup(outScene)
|| !load_assets(outScene)
|| !scene_build_bvh(outScene)
|| !render_target_init(config->width, config->height, outImg))
{
return false;
}
@@ -90,7 +78,7 @@ static bool initialize_renderer(const rendering_config_t* config, render_job_t**
.config = config,
.rendering_type = TILE_BASED,
.rendering_flag = DEBUG_NONE,
.debug_flag = DEBUG_NONE,
.is_done = false,
};
@@ -174,20 +162,15 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
render_job_t* job = NULL;
rendering_config_t config = {
.width = 1920 / 4,
.height = 1080 / 4,
.sample_count = 64,
.width = 1920 / 2,
.height = 1080 / 2,
.sample_count = 64 * 4,
.max_depth = 4,
.bucket_size = 64,
};
if (!initialize_renderer(&config, &job, &img, &scene))
{
shutdown_renderer(job, &img, &scene);
return -1;
}
if (!window_create(TITLE, hInstance, config.width, config.height, job))
if (!initialize_renderer(&config, &job, &img, &scene)
|| !window_create(TITLE, hInstance, config.width, config.height, job))
{
shutdown_renderer(job, &img, &scene);
return -1;