diff --git a/header/Rendering/Renderer.h b/header/Rendering/Renderer.h index c793a8d..f466db1 100644 --- a/header/Rendering/Renderer.h +++ b/header/Rendering/Renderer.h @@ -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; diff --git a/header/Rendering/Scene.h b/header/Rendering/Scene.h index 1224054..6b1b2cc 100644 --- a/header/Rendering/Scene.h +++ b/header/Rendering/Scene.h @@ -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); diff --git a/source/Algorithm/RayIntersection.c b/source/Algorithm/RayIntersection.c index f452200..2f212e5 100644 --- a/source/Algorithm/RayIntersection.c +++ b/source/Algorithm/RayIntersection.c @@ -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}; diff --git a/source/Material/Material.c b/source/Material/Material.c index ebb58f5..9a4cd0e 100644 --- a/source/Material/Material.c +++ b/source/Material/Material.c @@ -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) diff --git a/source/Rendering/RenderTarget.c b/source/Rendering/RenderTarget.c index 0c26bc9..3d51d1d 100644 --- a/source/Rendering/RenderTarget.c +++ b/source/Rendering/RenderTarget.c @@ -4,13 +4,13 @@ #include 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; } diff --git a/source/Rendering/Renderer.c b/source/Rendering/Renderer.c index b2a7df7..a9b5cd0 100644 --- a/source/Rendering/Renderer.c +++ b/source/Rendering/Renderer.c @@ -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); } } diff --git a/source/main.c b/source/main.c index 420ebb4..d2cb200 100644 --- a/source/main.c +++ b/source/main.c @@ -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;