#ifndef SCENE_H #define SCENE_H #include "Algorithm/BVH.h" #include "Camera.h" #include "Lighting/Light.h" #include "Material/Material.h" #include "RenderTarget.h" #include "Geometry/Triangle.h" typedef struct { uint32_t width; uint32_t height; uint32_t sample_count; uint8_t max_depth; uint32_t bucket_size; } rendering_config_t; typedef struct { vec3s coord; uint32_t tile_count_x; uint32_t tile_count_y; bool is_init; bool is_done; } rendering_context_t; typedef struct { uint32_t x; uint32_t y; uint32_t width; uint32_t height; } tile_t; typedef struct { camera_t camera; bvh_tree_t bvh_tree; triangle_collection_t triangles; material_collection_t materials; light_collection_t lights; } scene_t; bool scene_init(uint64_t triangle_count, uint8_t material_count, uint32_t punctual_light_count, scene_t* scene); void scene_free(scene_t* scene); bool scene_build_bvh(scene_t* scene); bool scene_render_tile(scene_t* scene, rendering_context_t* ctx, rendering_config_t config, uint32_t tile_index, int rendering_flags, render_target_t* render_target, tile_t* tile_out); bool scene_render(scene_t* scene, rendering_config_t config, int rendering_flags, render_target_t* render_targetg); #endif // SCENE_H