From c039b83c57646a025744a8401ffa769f489a8af2 Mon Sep 17 00:00:00 2001 From: ternaryop8479 Date: Sun, 15 Feb 2026 15:30:05 +0800 Subject: [PATCH] =?UTF-8?q?style:=20=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=8F=8A=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/basic/constants.h | 12 +- include/basic/math.h | 100 +++++++------ include/basic/types.h | 62 ++++---- include/core/bvh.h | 241 ++++++++++++++++-------------- include/core/denoiser.h | 84 +++++------ include/core/gbuffer.h | 128 +++++++++------- include/core/raytracer.h | 88 ++++++----- include/core/renderer.h | 114 +++++++------- include/core/screen_blit.h | 68 +++++---- include/core/shader_manager.h | 138 ++++++++++------- include/resource/buffer.h | 154 ++++++++++--------- include/resource/shader.h | 272 ++++++++++++++++++++-------------- include/resource/texture.h | 242 +++++++++++++++++------------- include/scene/camera.h | 198 ++++++++++++++----------- include/scene/light.h | 100 ++++++++----- include/scene/material.h | 216 ++++++++++++++++----------- include/scene/mesh.h | 158 ++++++++++++-------- include/scene/scene.h | 136 ++++++++++------- include/utils/config.h | 132 ++++++++++------- include/utils/logger.h | 89 +++++------ 20 files changed, 1560 insertions(+), 1172 deletions(-) diff --git a/include/basic/constants.h b/include/basic/constants.h index 60733fa..e6ee2af 100644 --- a/include/basic/constants.h +++ b/include/basic/constants.h @@ -3,16 +3,16 @@ namespace are { -/// @brief Maximum number of lights in scene +// Maximum number of lights in scene constexpr int MAX_LIGHTS = 16; -/// @brief Maximum ray tracing depth +// Maximum ray tracing depth constexpr int MAX_RAY_DEPTH = 8; -/// @brief Default samples per pixel for ray tracing +// Default samples per pixel for ray tracing constexpr int DEFAULT_SPP = 1; -/// @brief G-Buffer attachment indices +// G-Buffer attachment indices constexpr int GBUFFER_POSITION = 0; constexpr int GBUFFER_NORMAL = 1; constexpr int GBUFFER_ALBEDO = 2; @@ -20,11 +20,11 @@ constexpr int GBUFFER_MATERIAL = 3; constexpr int GBUFFER_MATERIAL_ID = 4; constexpr int GBUFFER_COUNT = 5; -/// @brief Compute shader work group size +// Compute shader work group size constexpr int COMPUTE_GROUP_SIZE_X = 16; constexpr int COMPUTE_GROUP_SIZE_Y = 16; -/// @brief Mathematical constants +// Mathematical constants constexpr float PI = 3.14159265359f; constexpr float INV_PI = 0.31830988618f; constexpr float EPSILON = 1e-4f; diff --git a/include/basic/math.h b/include/basic/math.h index dc2a07d..88a14af 100644 --- a/include/basic/math.h +++ b/include/basic/math.h @@ -7,51 +7,65 @@ namespace are { -/// @brief Math utility functions wrapping GLM +// Math utility functions wrapping GLM class MathUtils { public: - /// @brief Create perspective projection matrix - /// @param fov Field of view in radians - /// @param aspect Aspect ratio - /// @param near Near plane distance - /// @param far Far plane distance - /// @return Projection matrix - static Mat4 perspective(float fov, float aspect, float near, float far); - - /// @brief Create look-at view matrix - /// @param eye Camera position - /// @param center Look-at target - /// @param up Up vector - /// @return View matrix - static Mat4 look_at(const Vec3& eye, const Vec3& center, const Vec3& up); - - /// @brief Normalize a vector - /// @param v Input vector - /// @return Normalized vector - static Vec3 normalize(const Vec3& v); - - /// @brief Calculate dot product - /// @param a First vector - /// @param b Second vector - /// @return Dot product - static float dot(const Vec3& a, const Vec3& b); - - /// @brief Calculate cross product - /// @param a First vector - /// @param b Second vector - /// @return Cross product - static Vec3 cross(const Vec3& a, const Vec3& b); - - /// @brief Reflect vector around normal - /// @param incident Incident vector - /// @param normal Surface normal - /// @return Reflected vector - static Vec3 reflect(const Vec3& incident, const Vec3& normal); - - /// @brief Get pointer to matrix data (for OpenGL) - /// @param mat Input matrix - /// @return Pointer to matrix data - static const float* value_ptr(const Mat4& mat); + /* + * @brief Create perspective projection matrix + * @param fov Field of view in radians + * @param aspect Aspect ratio + * @param near Near plane distance + * @param far Far plane distance + * @return Projection matrix + */ + static Mat4 perspective(float fov, float aspect, float near, float far); + + /* + * @brief Create look-at view matrix + * @param eye Camera position + * @param center Look-at target + * @param up Up vector + * @return View matrix + */ + static Mat4 look_at(const Vec3 &eye, const Vec3 ¢er, const Vec3 &up); + + /* + * @brief Normalize a vector + * @param v Input vector + * @return Normalized vector + */ + static Vec3 normalize(const Vec3 &v); + + /* + * @brief Calculate dot product + * @param a First vector + * @param b Second vector + * @return Dot product + */ + static float dot(const Vec3 &a, const Vec3 &b); + + /* + * @brief Calculate cross product + * @param a First vector + * @param b Second vector + * @return Cross product + */ + static Vec3 cross(const Vec3 &a, const Vec3 &b); + + /* + * @brief Reflect vector around normal + * @param incident Incident vector + * @param normal Surface normal + * @return Reflected vector + */ + static Vec3 reflect(const Vec3 &incident, const Vec3 &normal); + + /* + * @brief Get pointer to matrix data (for OpenGL) + * @param mat Input matrix + * @return Pointer to matrix data + */ + static const float *value_ptr(const Mat4 &mat); }; } // namespace are diff --git a/include/basic/types.h b/include/basic/types.h index c4adb8b..b145938 100644 --- a/include/basic/types.h +++ b/include/basic/types.h @@ -2,68 +2,68 @@ #define ARE_INCLUDE_BASIC_TYPES_H #include -#include -#include -#include #include +#include +#include +#include namespace are { -/// @brief Basic vector types using GLM +// Basic vector types using GLM using Vec2 = glm::vec2; using Vec3 = glm::vec3; using Vec4 = glm::vec4; -/// @brief Basic matrix types using GLM +// Basic matrix types using GLM using Mat3 = glm::mat3; using Mat4 = glm::mat4; -/// @brief Basic integer types +// Basic integer types using uint = uint32_t; using uchar = uint8_t; -/// @brief Handle types for GPU resources +// Handle types for GPU resources using TextureHandle = uint; using BufferHandle = uint; using ShaderHandle = uint; using FramebufferHandle = uint; -/// @brief Invalid handle constant +// Invalid handle constant constexpr uint INVALID_HANDLE = 0; -/// @brief Vertex structure for mesh data +// Vertex structure for mesh data struct Vertex { - Vec3 position_; - Vec3 normal_; - Vec2 texcoord_; - Vec3 tangent_; + Vec3 position_; + Vec3 normal_; + Vec2 texcoord_; + Vec3 tangent_; }; -/// @brief Ray structure for ray tracing +// Ray structure for ray tracing struct Ray { - Vec3 origin_; - Vec3 direction_; - float t_min_; - float t_max_; + Vec3 origin_; + Vec3 direction_; + float t_min_; + float t_max_; }; -/// @brief Hit information for ray-surface intersection +// Hit information for ray-surface intersection struct HitInfo { - bool hit_; - float t_; - Vec3 position_; - Vec3 normal_; - Vec2 texcoord_; - uint material_id_; + bool hit_; + float t_; + Vec3 position_; + Vec3 normal_; + Vec2 texcoord_; + uint material_id_; }; -/// @brief Rendering statistics +// Rendering statistics struct RenderStats { - float frame_time_ms_; - uint triangle_count_; - uint ray_count_; - float gbuffer_time_ms_; - float raytrace_time_ms_; + float frame_time_ms_; + uint triangle_count_; + uint ray_count_; + float gbuffer_time_ms_; + float raytrace_time_ms_; }; } // namespace are diff --git a/include/core/bvh.h b/include/core/bvh.h index d71f841..34ca074 100644 --- a/include/core/bvh.h +++ b/include/core/bvh.h @@ -2,139 +2,162 @@ #define ARE_INCLUDE_CORE_BVH_H #include "basic/types.h" -#include "scene/mesh.h" #include "resource/buffer.h" -#include +#include "scene/mesh.h" #include +#include namespace are { -/// @brief Axis-aligned bounding box +// Axis-aligned bounding box struct AABB { - Vec3 min_; - Vec3 max_; - - /// @brief Construct AABB from min and max points - AABB(const Vec3& min = Vec3(0.0f), const Vec3& max = Vec3(0.0f)) - : min_(min), max_(max) {} - - /// @brief Expand AABB to include point - void expand(const Vec3& point); - - /// @brief Expand AABB to include another AABB - void expand(const AABB& other); - - /// @brief Get center of AABB - Vec3 center() const { return (min_ + max_) * 0.5f; } - - /// @brief Get surface area of AABB - float surface_area() const; - - /// @brief Check if AABB is valid - bool is_valid() const; + Vec3 min_; + Vec3 max_; + + // Construct AABB from min and max points + AABB(const Vec3 &min = Vec3(0.0f), const Vec3 &max = Vec3(0.0f)) + : min_(min), max_(max) { + } + + // Expand AABB to include point + void expand(const Vec3 &point); + + // Expand AABB to include another AABB + void expand(const AABB &other); + + // Get center of AABB + Vec3 center() const { + return (min_ + max_) * 0.5f; + } + + // Get surface area of AABB + float surface_area() const; + + // Check if AABB is valid + bool is_valid() const; }; -/// @brief Triangle primitive for BVH +// Triangle primitive for BVH struct Triangle { - Vec3 v0_, v1_, v2_; - Vec3 n0_, n1_, n2_; - Vec2 uv0_, uv1_, uv2_; - uint material_id_; - - /// @brief Get bounding box of triangle - AABB get_bounds() const; - - /// @brief Get centroid of triangle - Vec3 get_centroid() const; + Vec3 v0_, v1_, v2_; + Vec3 n0_, n1_, n2_; + Vec2 uv0_, uv1_, uv2_; + uint material_id_; + + // Get bounding box of triangle + AABB get_bounds() const; + + // Get centroid of triangle + Vec3 get_centroid() const; }; -/// @brief BVH node for GPU +// BVH node for GPU struct BVHNode { - Vec3 aabb_min_; - uint left_first_; // Left child index or first primitive index - Vec3 aabb_max_; - uint count_; // 0 for interior node, >0 for leaf node + Vec3 aabb_min_; + uint left_first_; // Left child index or first primitive index + Vec3 aabb_max_; + uint count_; // 0 for interior node, >0 for leaf node }; -/// @brief GPU-friendly BVH node layout (std430 aligned) +// GPU-friendly BVH node layout (std430 aligned) struct BVHNodeGpu { - Vec4 aabb_min_left_first_; ///< xyz = aabb min, w = left_first (uint) - Vec4 aabb_max_count_; ///< xyz = aabb max, w = count (uint, 0 for interior) + Vec4 aabb_min_left_first_; ///< xyz = aabb min, w = left_first (uint) + Vec4 aabb_max_count_; ///< xyz = aabb max, w = count (uint, 0 for interior) }; -/// @brief GPU-friendly triangle layout (std430 aligned) +// GPU-friendly triangle layout (std430 aligned) struct TriangleGpu { - Vec4 v0_material_; ///< xyz = v0, w = material_id (uint) - Vec4 v1_; ///< xyz = v1, w = reserved - Vec4 v2_; ///< xyz = v2, w = reserved - Vec4 n0_; ///< xyz = n0, w = reserved - Vec4 n1_; ///< xyz = n1, w = reserved - Vec4 n2_; ///< xyz = n2, w = reserved - Vec4 uv0_uv1_; ///< xy = uv0, zw = uv1 - Vec4 uv2_; ///< xy = uv2, zw = reserved + Vec4 v0_material_; ///< xyz = v0, w = material_id (uint) + Vec4 v1_; ///< xyz = v1, w = reserved + Vec4 v2_; ///< xyz = v2, w = reserved + Vec4 n0_; ///< xyz = n0, w = reserved + Vec4 n1_; ///< xyz = n1, w = reserved + Vec4 n2_; ///< xyz = n2, w = reserved + Vec4 uv0_uv1_; ///< xy = uv0, zw = uv1 + Vec4 uv2_; ///< xy = uv2, zw = reserved }; -/// @brief Bounding Volume Hierarchy for ray tracing acceleration +// Bounding Volume Hierarchy for ray tracing acceleration class BVH { public: - /// @brief Constructor - BVH(); - - /// @brief Destructor - ~BVH(); - - /// @brief Build BVH from meshes - /// @param meshes Mesh list - /// @return True if build succeeded - bool build(const std::vector>& meshes); - - /// @brief Upload BVH to GPU - /// @param node_buffer Buffer for BVH nodes - /// @param triangle_buffer Buffer for triangles - /// @return True if upload succeeded - bool upload_to_gpu(Buffer& node_buffer, Buffer& triangle_buffer); - - /// @brief Get total node count - /// @return Node count - uint get_node_count() const { return static_cast(nodes_.size()); } - - /// @brief Get total triangle count - /// @return Triangle count - uint get_triangle_count() const { return static_cast(triangles_.size()); } - - /// @brief Clear BVH data - void clear(); + // Constructor + BVH(); + + // Destructor + ~BVH(); + + /* + * @brief Build BVH from meshes + * @param meshes Mesh list + * @return True if build succeeded + */ + bool build(const std::vector> &meshes); + + /* + * @brief Upload BVH to GPU + * @param node_buffer Buffer for BVH nodes + * @param triangle_buffer Buffer for triangles + * @return True if upload succeeded + */ + bool upload_to_gpu(Buffer &node_buffer, Buffer &triangle_buffer); + + /* + * @brief Get total node count + * @return Node count + */ + uint get_node_count() const { + return static_cast(nodes_.size()); + } + + /* + * @brief Get total triangle count + * @return Triangle count + */ + uint get_triangle_count() const { + return static_cast(triangles_.size()); + } + + // Clear BVH data + void clear(); private: - std::vector nodes_; - std::vector triangles_; - std::vector triangle_indices_; - - /// @brief Recursively build BVH - /// @param node_idx Current node index - /// @param first_prim First primitive index - /// @param prim_count Primitive count - void build_recursive_(uint node_idx, uint first_prim, uint prim_count); - - /// @brief Find best split using SAH - /// @param first_prim First primitive index - /// @param prim_count Primitive count - /// @param axis Split axis (output) - /// @param split_pos Split position (output) - /// @return Split cost - float find_best_split_(uint first_prim, uint prim_count, int& axis, float& split_pos); - - /// @brief Calculate node bounds - /// @param first_prim First primitive index - /// @param prim_count Primitive count - /// @return Bounding box - AABB calculate_bounds_(uint first_prim, uint prim_count); - - /// @brief Calculate centroid bounds - /// @param first_prim First primitive index - /// @param prim_count Primitive count - /// @return Centroid bounding box - AABB calculate_centroid_bounds_(uint first_prim, uint prim_count); + std::vector nodes_; + std::vector triangles_; + std::vector triangle_indices_; + + /* + * @brief Recursively build BVH + * @param node_idx Current node index + * @param first_prim First primitive index + * @param prim_count Primitive count + */ + void build_recursive_(uint node_idx, uint first_prim, uint prim_count); + + /* + * @brief Find best split using SAH + * @param first_prim First primitive index + * @param prim_count Primitive count + * @param axis Split axis (output) + * @param split_pos Split position (output) + * @return Split cost + */ + float find_best_split_(uint first_prim, uint prim_count, int &axis, float &split_pos); + + /* + * @brief Calculate node bounds + * @param first_prim First primitive index + * @param prim_count Primitive count + * @return Bounding box + */ + AABB calculate_bounds_(uint first_prim, uint prim_count); + + /* + * @brief Calculate centroid bounds + * @param first_prim First primitive index + * @param prim_count Primitive count + * @return Centroid bounding box + */ + AABB calculate_centroid_bounds_(uint first_prim, uint prim_count); }; } // namespace are diff --git a/include/core/denoiser.h b/include/core/denoiser.h index 50ad16b..2f29b5d 100644 --- a/include/core/denoiser.h +++ b/include/core/denoiser.h @@ -7,61 +7,57 @@ namespace are { -/** - * @brief Mean filter denoiser using compute shader - */ +// Mean filter denoiser using compute shader class Denoiser { public: - /** - * @brief Construct denoiser - * @param width Output width - * @param height Output height - */ - Denoiser(uint width, uint height); - - /** - * @brief Destroy denoiser - */ - ~Denoiser(); + /** + * @brief Construct denoiser + * @param width Output width + * @param height Output height + */ + Denoiser(uint width, uint height); /** - * @brief Initialize GPU resources - * @param shader Denoise compute shader (managed by ShaderManager) - * @return True on success - */ - bool initialize(const std::shared_ptr& shader); + * @brief Destroy denoiser + */ + ~Denoiser(); - /** - * @brief Release GPU resources - */ - void release(); + /** + * @brief Initialize GPU resources + * @param shader Denoise compute shader (managed by ShaderManager) + * @return True on success + */ + bool initialize(const std::shared_ptr &shader); - /** - * @brief Resize internal targets - * @param width New width - * @param height New height - */ - void resize(uint width, uint height); + /** + * @brief Release GPU resources + */ + void release(); - /** - * @brief Apply mean filter - * @param input_texture RGBA32F input texture - * @param radius Filter radius (1 => 3x3) - * @return Output texture handle (internal) - */ - TextureHandle denoise(TextureHandle input_texture, int radius); + /** + * @brief Resize internal targets + * @param width New width + * @param height New height + */ + void resize(uint width, uint height); + + /** + * @brief Apply mean filter + * @param input_texture RGBA32F input texture + * @param radius Filter radius (1 => 3x3) + * @return Output texture handle (internal) + */ + TextureHandle denoise(TextureHandle input_texture, int radius); private: - uint width_; - uint height_; + uint width_; + uint height_; std::shared_ptr shader_; - TextureHandle output_texture_; - bool initialized_; + TextureHandle output_texture_; + bool initialized_; - /** - * @brief Create output texture - */ - void create_output_texture_(); + // Create output texture + void create_output_texture_(); }; } // namespace are diff --git a/include/core/gbuffer.h b/include/core/gbuffer.h index 9859cb0..c4aebc5 100644 --- a/include/core/gbuffer.h +++ b/include/core/gbuffer.h @@ -1,70 +1,88 @@ #ifndef ARE_INCLUDE_CORE_GBUFFER_H #define ARE_INCLUDE_CORE_GBUFFER_H -#include "basic/types.h" #include "basic/constants.h" -#include "scene/scene.h" +#include "basic/types.h" #include "resource/shader.h" +#include "scene/scene.h" namespace are { -/// @brief G-Buffer manager for deferred rendering +// G-Buffer manager for deferred rendering class GBuffer { public: - /// @brief Constructor - /// @param width Buffer width - /// @param height Buffer height - GBuffer(uint width, uint height); - - /// @brief Destructor - ~GBuffer(); - - /// @brief Initialize G-Buffer (create framebuffer and textures) - /// @return True if initialization succeeded - bool initialize(); - - /// @brief Release G-Buffer resources - void release(); - - /// @brief Render scene to G-Buffer - /// @param scene Scene to render - /// @param shader Shader program for G-Buffer pass - void render(const Scene& scene, const Shader& shader); - - /// @brief Resize G-Buffer - /// @param width New width - /// @param height New height - void resize(uint width, uint height); - - /// @brief Get texture handle for specific buffer - /// @param index Buffer index (GBUFFER_POSITION, GBUFFER_NORMAL, etc.) - /// @return Texture handle - TextureHandle get_texture(int index) const; - - /// @brief Get framebuffer handle - /// @return Framebuffer handle - FramebufferHandle get_framebuffer() const { return fbo_; } - - /// @brief Get buffer dimensions - /// @param width Output width - /// @param height Output height - void get_dimensions(uint& width, uint& height) const; + /* + * @brief Constructor + * @param width Buffer width + * @param height Buffer height + */ + GBuffer(uint width, uint height); + + // Destructor + ~GBuffer(); + + /* + * @brief Initialize G-Buffer (create framebuffer and textures) + * @return True if initialization succeeded + */ + bool initialize(); + + // Release G-Buffer resources + void release(); + + /* + * @brief Render scene to G-Buffer + * @param scene Scene to render + * @param shader Shader program for G-Buffer pass + */ + void render(const Scene &scene, const Shader &shader); + + /* + * @brief Resize G-Buffer + * @param width New width + * @param height New height + */ + void resize(uint width, uint height); + + /* + * @brief Get texture handle for specific buffer + * @param index Buffer index (GBUFFER_POSITION, GBUFFER_NORMAL, etc.) + * @return Texture handle + */ + TextureHandle get_texture(int index) const; + + /* + * @brief Get framebuffer handle + * @return Framebuffer handle + */ + FramebufferHandle get_framebuffer() const { + return fbo_; + } + + /* + * @brief Get buffer dimensions + * @param width Output width + * @param height Output height + */ + void get_dimensions(uint &width, uint &height) const; private: - uint width_; - uint height_; - FramebufferHandle fbo_; - TextureHandle textures_[GBUFFER_COUNT]; - TextureHandle depth_texture_; - - bool initialized_; - - /// @brief Create texture for G-Buffer attachment - /// @param internal_format OpenGL internal format - /// @param format OpenGL format - /// @param type OpenGL type - /// @return Texture handle - TextureHandle create_texture_(uint internal_format, uint format, uint type); + uint width_; + uint height_; + FramebufferHandle fbo_; + TextureHandle textures_[GBUFFER_COUNT]; + TextureHandle depth_texture_; + + bool initialized_; + + /* + * @brief Create texture for G-Buffer attachment + * @param internal_format OpenGL internal format + * @param format OpenGL format + * @param type OpenGL type + * @return Texture handle + */ + TextureHandle create_texture_(uint internal_format, uint format, uint type); }; } // namespace are diff --git a/include/core/raytracer.h b/include/core/raytracer.h index 370989b..9554308 100644 --- a/include/core/raytracer.h +++ b/include/core/raytracer.h @@ -2,7 +2,7 @@ #define ARE_INCLUDE_CORE_RAYTRACER_H #include "basic/types.h" -#include "core/bvh.h" // 添加 +#include "core/bvh.h" #include "core/gbuffer.h" #include "resource/buffer.h" #include "resource/shader.h" @@ -11,62 +11,76 @@ namespace are { -/// @brief Ray tracing configuration +// Ray tracing configuration struct RayTracerConfig { uint samples_per_pixel_; uint max_depth_; bool enable_shadows_; bool enable_reflections_; bool enable_accumulation_; - bool use_bvh_; // 添加BVH开关 + bool use_bvh_; }; -/// @brief Compute shader based ray tracer +// Compute shader based ray tracer class RayTracer { public: - /// @brief Constructor - /// @param width Output width - /// @param height Output height - /// @param config Ray tracer configuration + /* + * @brief Constructor + * @param width Output width + * @param height Output height + * @param config Ray tracer configuration + */ RayTracer(uint width, uint height, const RayTracerConfig &config); - /// @brief Destructor + // Destructor ~RayTracer(); - /// @brief Initialize ray tracer - /// @return True if initialization succeeded + /* + * @brief Initialize ray tracer + * @return True if initialization succeeded + */ bool initialize(const std::shared_ptr &shader); - /// @brief Release resources + // Release resources void release(); - /// @brief Trace rays using G-Buffer as input - /// @param scene Scene data - /// @param gbuffer G-Buffer containing geometry information - /// @param output_texture Output texture for ray traced result + /* + * @brief Trace rays using G-Buffer as input + * @param scene Scene data + * @param gbuffer G-Buffer containing geometry information + * @param output_texture Output texture for ray traced result + */ void trace(const Scene &scene, const GBuffer &gbuffer, TextureHandle output_texture); - /// @brief Resize output - /// @param width New width - /// @param height New height + /* + * @brief Resize output + * @param width New width + * @param height New height + */ void resize(uint width, uint height); - /// @brief Reset accumulation buffer + // Reset accumulation buffer void reset_accumulation(); - /// @brief Get current configuration - /// @return Current configuration + /* + * @brief Get current configuration + * @return Current configuration + */ const RayTracerConfig &get_config() const { return config_; } - /// @brief Update configuration - /// @param config New configuration + /* + * @brief Update configuration + * @param config New configuration + */ void set_config(const RayTracerConfig &config); - /// @brief Rebuild BVH from scene - /// @param scene Scene to build BVH from - /// @return True if build succeeded + /* + * @brief Rebuild BVH from scene + * @param scene Scene to build BVH from + * @return True if build succeeded + */ bool rebuild_bvh(const Scene &scene); private: @@ -81,10 +95,10 @@ private: BufferHandle light_buffer_; // BVH related - std::unique_ptr bvh_; // 添加 - Buffer bvh_node_buffer_; // 添加 - Buffer bvh_triangle_buffer_; // 添加 - bool bvh_built_; // 添加 + std::unique_ptr bvh_; + Buffer bvh_node_buffer_; + Buffer bvh_triangle_buffer_; + bool bvh_built_; uint materials_hash_; uint lights_hash_; @@ -92,12 +106,16 @@ private: uint frame_count_; bool initialized_; - /// @brief Upload scene data to GPU buffers - /// @param scene Scene to upload + /* + * @brief Upload scene data to GPU buffers + * @param scene Scene to upload + */ void upload_scene_data_(const Scene &scene); - /// @brief Bind G-Buffer textures to compute shader - /// @param gbuffer G-Buffer to bind + /* + * @brief Bind G-Buffer textures to compute shader + * @param gbuffer G-Buffer to bind + */ void bind_gbuffer_(const GBuffer &gbuffer); }; diff --git a/include/core/renderer.h b/include/core/renderer.h index f051a01..e54b757 100644 --- a/include/core/renderer.h +++ b/include/core/renderer.h @@ -2,75 +2,89 @@ #define ARE_INCLUDE_CORE_RENDERER_H #include "basic/types.h" -#include "scene/scene.h" +#include "core/denoiser.h" #include "core/gbuffer.h" #include "core/raytracer.h" #include "core/screen_blit.h" -#include "core/denoiser.h" #include "core/shader_manager.h" +#include "scene/scene.h" #include namespace are { -/// @brief Main renderer configuration +// Main renderer configuration struct RendererConfig { - uint width_; - uint height_; - uint samples_per_pixel_; - uint max_ray_depth_; - bool enable_denoising_; - bool enable_accumulation_; + uint width_; + uint height_; + uint samples_per_pixel_; + uint max_ray_depth_; + bool enable_denoising_; + bool enable_accumulation_; }; -/// @brief Main rendering engine interface +// Main rendering engine interface class Renderer { public: - /// @brief Constructor - /// @param config Renderer configuration - Renderer(const RendererConfig& config); - - /// @brief Destructor - ~Renderer(); - - /// @brief Initialize renderer (OpenGL context must be current) - /// @return True if initialization succeeded - bool initialize(); - - /// @brief Shutdown renderer and release resources - void shutdown(); - - /// @brief Render a frame - /// @param scene Scene to render - /// @param output_texture Output texture handle (0 for default framebuffer) - /// @return Rendering statistics - RenderStats render(const Scene& scene, TextureHandle output_texture = 0); - - /// @brief Resize render targets - /// @param width New width - /// @param height New height - void resize(uint width, uint height); - - /// @brief Get current configuration - /// @return Current configuration - const RendererConfig& get_config() const { return config_; } - - /// @brief Update configuration - /// @param config New configuration - void set_config(const RendererConfig& config); + /* + * @brief Constructor + * @param config Renderer configuration + */ + Renderer(const RendererConfig &config); - /// @brief Notify scene changed to rebuild acceleration + // Destructor + ~Renderer(); + + /* + * @brief Initialize renderer (OpenGL context must be current) + * @return True if initialization succeeded + */ + bool initialize(); + + // Shutdown renderer and release resources + void shutdown(); + + /* + * @brief Render a frame + * @param scene Scene to render + * @param output_texture Output texture handle (0 for default framebuffer) + * @return Rendering statistics + */ + RenderStats render(const Scene &scene, TextureHandle output_texture = 0); + + /* + * @brief Resize render targets + * @param width New width + * @param height New height + */ + void resize(uint width, uint height); + + /* + * @brief Get current configuration + * @return Current configuration + */ + const RendererConfig &get_config() const { + return config_; + } + + /* + * @brief Update configuration + * @param config New configuration + */ + void set_config(const RendererConfig &config); + + // Notify scene changed to rebuild acceleration void notify_scene_changed(const Scene &scene); private: - RendererConfig config_; - std::unique_ptr gbuffer_; - std::unique_ptr raytracer_; - std::unique_ptr shader_manager_; + RendererConfig config_; + std::unique_ptr gbuffer_; + std::unique_ptr raytracer_; + std::unique_ptr shader_manager_; std::unique_ptr screen_blit_; std::unique_ptr denoiser_; - - bool initialized_; - uint frame_count_; + + bool initialized_; + uint frame_count_; }; } // namespace are diff --git a/include/core/screen_blit.h b/include/core/screen_blit.h index 3805957..f3e344c 100644 --- a/include/core/screen_blit.h +++ b/include/core/screen_blit.h @@ -7,42 +7,48 @@ namespace are { -/// @brief Screen blit utility for rendering texture to screen +// Screen blit utility for rendering texture to screen class ScreenBlit { public: - /// @brief Constructor - ScreenBlit(); - - /// @brief Destructor - ~ScreenBlit(); - - /// @brief Initialize screen blit - /// @return True if initialization succeeded - bool initialize(const std::shared_ptr &screen_blit_shader); - - /// @brief Release resources - void release(); - - /// @brief Blit texture to screen - /// @param texture Texture to blit - /// @param x Screen X position - /// @param y Screen Y position - /// @param width Blit width - /// @param height Blit height - void blit(TextureHandle texture, int x, int y, uint width, uint height); - - /// @brief Blit texture to full screen - /// @param texture Texture to blit - void blit_fullscreen(TextureHandle texture); + // Constructor + ScreenBlit(); + + // Destructor + ~ScreenBlit(); + + /* + * @brief Initialize screen blit + * @return True if initialization succeeded + */ + bool initialize(const std::shared_ptr &screen_blit_shader); + + // Release resources + void release(); + + /* + * @brief Blit texture to screen + * @param texture Texture to blit + * @param x Screen X position + * @param y Screen Y position + * @param width Blit width + * @param height Blit height + */ + void blit(TextureHandle texture, int x, int y, uint width, uint height); + + /* + * @brief Blit texture to full screen + * @param texture Texture to blit + */ + void blit_fullscreen(TextureHandle texture); private: std::shared_ptr shader_; - uint vao_; - uint vbo_; - bool initialized_; - - /// @brief Create fullscreen quad - void create_quad_(); + uint vao_; + uint vbo_; + bool initialized_; + + // Create fullscreen quad + void create_quad_(); }; } // namespace are diff --git a/include/core/shader_manager.h b/include/core/shader_manager.h index d2538e2..b2bebfa 100644 --- a/include/core/shader_manager.h +++ b/include/core/shader_manager.h @@ -3,64 +3,88 @@ #include "basic/types.h" #include "resource/shader.h" -#include -#include #include +#include +#include namespace are { -/// @brief Shader manager for loading and caching shaders +// Shader manager for loading and caching shaders class ShaderManager { public: - /// @brief Constructor - ShaderManager(); - - /// @brief Destructor - ~ShaderManager(); - - /// @brief Initialize shader manager and load built-in shaders - /// @return True if initialization succeeded - bool initialize(); - - /// @brief Release all shaders - void release(); - - /// @brief Load shader from files - /// @param name Shader name for caching - /// @param vertex_path Vertex shader file path - /// @param fragment_path Fragment shader file path - /// @return Shader object - std::shared_ptr load_shader(const std::string& name, - const std::string& vertex_path, - const std::string& fragment_path); - - /// @brief Load compute shader from file - /// @param name Shader name for caching - /// @param compute_path Compute shader file path - /// @return Shader object - std::shared_ptr load_compute_shader(const std::string& name, - const std::string& compute_path); - - /// @brief Get cached shader by name - /// @param name Shader name - /// @return Shader object (invalid if not found) - std::shared_ptr get_shader(const std::string& name) const; - - /// @brief Get G-Buffer shader - /// @return G-Buffer shader - const std::shared_ptr& get_gbuffer_shader() const { return gbuffer_shader_; } - - /// @brief Get ray tracing compute shader - /// @return Ray tracing shader - const std::shared_ptr& get_raytracing_shader() const { return raytracing_shader_; } + // Constructor + ShaderManager(); - /// @brief Get mean denoise compute shader - /// @return Denoise shader (nullptr if not loaded) - const std::shared_ptr& get_denoise_shader() const { return denoise_shader_; } + // Destructor + ~ShaderManager(); - /// @brief Get screen bliting shader - /// @return Screen bliting shader (nullptr if not loaded) - const std::shared_ptr& get_screen_blit_shader() const { return screen_blit_shader_; } + /* + * @brief Initialize shader manager and load built-in shaders + * @return True if initialization succeeded + */ + bool initialize(); + + // Release all shaders + void release(); + + /* + * @brief Load shader from files + * @param name Shader name for caching + * @param vertex_path Vertex shader file path + * @param fragment_path Fragment shader file path + * @return Shader object + */ + std::shared_ptr load_shader(const std::string &name, + const std::string &vertex_path, + const std::string &fragment_path); + + /* + * @brief Load compute shader from file + * @param name Shader name for caching + * @param compute_path Compute shader file path + * @return Shader object + */ + std::shared_ptr load_compute_shader(const std::string &name, + const std::string &compute_path); + + /* + * @brief Get cached shader by name + * @param name Shader name + * @return Shader object (invalid if not found) + */ + std::shared_ptr get_shader(const std::string &name) const; + + /* + * @brief Get G-Buffer shader + * @return G-Buffer shader + */ + const std::shared_ptr &get_gbuffer_shader() const { + return gbuffer_shader_; + } + + /* + * @brief Get ray tracing compute shader + * @return Ray tracing shader + */ + const std::shared_ptr &get_raytracing_shader() const { + return raytracing_shader_; + } + + /* + * @brief Get mean denoise compute shader + * @return Denoise shader (nullptr if not loaded) + */ + const std::shared_ptr &get_denoise_shader() const { + return denoise_shader_; + } + + /* + * @brief Get screen bliting shader + * @return Screen bliting shader (nullptr if not loaded) + */ + const std::shared_ptr &get_screen_blit_shader() const { + return screen_blit_shader_; + } private: std::unordered_map> shader_cache_; @@ -68,12 +92,14 @@ private: std::shared_ptr raytracing_shader_; std::shared_ptr denoise_shader_; std::shared_ptr screen_blit_shader_; - - bool initialized_; - - /// @brief Load built-in shaders - /// @return True if loading succeeded - bool load_builtin_shaders_(); + + bool initialized_; + + /* + * @brief Load built-in shaders + * @return True if loading succeeded + */ + bool load_builtin_shaders_(); }; } // namespace are diff --git a/include/resource/buffer.h b/include/resource/buffer.h index 4cb7521..bf4b66d 100644 --- a/include/resource/buffer.h +++ b/include/resource/buffer.h @@ -5,84 +5,106 @@ namespace are { -/// @brief Buffer usage hint +// Buffer usage hint enum class BufferUsage { - STATIC_DRAW, - DYNAMIC_DRAW, - STREAM_DRAW + STATIC_DRAW, + DYNAMIC_DRAW, + STREAM_DRAW }; -/// @brief Buffer type +// Buffer type enum class BufferType { - VERTEX_BUFFER, - INDEX_BUFFER, - UNIFORM_BUFFER, - SHADER_STORAGE_BUFFER + VERTEX_BUFFER, + INDEX_BUFFER, + UNIFORM_BUFFER, + SHADER_STORAGE_BUFFER }; -/// @brief GPU buffer resource +// GPU buffer resource class Buffer { public: - /// @brief Constructor - Buffer(); + // Constructor + Buffer(); - Buffer(const Buffer&) = delete; - Buffer& operator=(const Buffer&) = delete; + Buffer(const Buffer &) = delete; + Buffer &operator=(const Buffer &) = delete; - Buffer(Buffer&& other) noexcept; - Buffer& operator=(Buffer&& other) noexcept; - - /// @brief Destructor - ~Buffer(); - - /// @brief Create buffer - /// @param type Buffer type - /// @param size Buffer size in bytes - /// @param data Initial data (nullptr for empty buffer) - /// @param usage Usage hint - /// @return True if creation succeeded - bool create(BufferType type, size_t size, const void* data, BufferUsage usage); - - /// @brief Update buffer data - /// @param offset Offset in bytes - /// @param size Size in bytes - /// @param data Data to upload - void update(size_t offset, size_t size, const void* data); - - /// @brief Bind buffer - void bind() const; - - /// @brief Bind buffer to binding point (for UBO/SSBO) - /// @param binding_point Binding point index - void bind_base(uint binding_point) const; - - /// @brief Unbind buffer - void unbind() const; - - /// @brief Release buffer resources - void release(); - - /// @brief Get buffer handle - /// @return Buffer handle - BufferHandle get_handle() const { return handle_; } - - /// @brief Get buffer size - /// @return Size in bytes - size_t get_size() const { return size_; } - - /// @brief Get buffer type - /// @return Buffer type - BufferType get_type() const { return type_; } - - /// @brief Check if buffer is valid - /// @return True if valid - bool is_valid() const { return handle_ != INVALID_HANDLE; } + Buffer(Buffer &&other) noexcept; + Buffer &operator=(Buffer &&other) noexcept; + + // Destructor + ~Buffer(); + + /* + * @brief Create buffer + * @param type Buffer type + * @param size Buffer size in bytes + * @param data Initial data (nullptr for empty buffer) + * @param usage Usage hint + * @return True if creation succeeded + */ + bool create(BufferType type, size_t size, const void *data, BufferUsage usage); + + /* + * @brief Update buffer data + * @param offset Offset in bytes + * @param size Size in bytes + * @param data Data to upload + */ + void update(size_t offset, size_t size, const void *data); + + // Bind buffer + void bind() const; + + /* + * @brief Bind buffer to binding point (for UBO/SSBO) + * @param binding_point Binding point index + */ + void bind_base(uint binding_point) const; + + // Unbind buffer + void unbind() const; + + // Release buffer resources + void release(); + + /* + * @brief Get buffer handle + * @return Buffer handle + */ + BufferHandle get_handle() const { + return handle_; + } + + /* + * @brief Get buffer size + * @return Size in bytes + */ + size_t get_size() const { + return size_; + } + + /* + * @brief Get buffer type + * @return Buffer type + */ + BufferType get_type() const { + return type_; + } + + /* + * @brief Check if buffer is valid + * @return True if valid + */ + bool is_valid() const { + return handle_ != INVALID_HANDLE; + } private: - BufferHandle handle_; - BufferType type_; - size_t size_; - BufferUsage usage_; + BufferHandle handle_; + BufferType type_; + size_t size_; + BufferUsage usage_; }; } // namespace are diff --git a/include/resource/shader.h b/include/resource/shader.h index 25ea338..de69052 100644 --- a/include/resource/shader.h +++ b/include/resource/shader.h @@ -7,127 +7,169 @@ namespace are { -/// @brief Shader program resource +// Shader program resource class Shader { public: - /// @brief Constructor - Shader(); + // Constructor + Shader(); - Shader(const Shader&) = delete; - Shader& operator=(const Shader&) = delete; + Shader(const Shader &) = delete; + Shader &operator=(const Shader &) = delete; - Shader(Shader&& other) noexcept; - Shader& operator=(Shader&& other) noexcept; - - /// @brief Destructor - ~Shader(); - - /// @brief Load and compile shader from files - /// @param vertex_path Vertex shader path - /// @param fragment_path Fragment shader path - /// @return True if compilation succeeded - bool load(const std::string& vertex_path, const std::string& fragment_path); - - /// @brief Load and compile compute shader - /// @param compute_path Compute shader path - /// @return True if compilation succeeded - bool load_compute(const std::string& compute_path); - - /// @brief Compile shader from source strings - /// @param vertex_source Vertex shader source - /// @param fragment_source Fragment shader source - /// @return True if compilation succeeded - bool compile(const std::string& vertex_source, const std::string& fragment_source); - - /// @brief Compile compute shader from source - /// @param compute_source Compute shader source - /// @return True if compilation succeeded - bool compile_compute(const std::string& compute_source); - - /// @brief Use/activate shader program - void use() const; // 改为const - - /// @brief Release shader resources - void release(); - - /// @brief Set uniform boolean - /// @param name Uniform name - /// @param value Value - void set_bool(const std::string& name, bool value) const; // 新增,const - - /// @brief Set uniform integer - /// @param name Uniform name - /// @param value Value - void set_int(const std::string& name, int value) const; // 改为const - - /// @brief Set uniform unsigned integer - /// @param name Uniform name - /// @param value Value - void set_uint(const std::string& name, uint value) const; // 改为const - - /// @brief Set uniform float - /// @param name Uniform name - /// @param value Value - void set_float(const std::string& name, float value) const; // 改为const - - /// @brief Set uniform vec2 - /// @param name Uniform name - /// @param value Value - void set_vec2(const std::string& name, const Vec2& value) const; // 改为const - - /// @brief Set uniform vec3 - /// @param name Uniform name - /// @param value Value - void set_vec3(const std::string& name, const Vec3& value) const; // 改为const - - /// @brief Set uniform vec4 - /// @param name Uniform name - /// @param value Value - void set_vec4(const std::string& name, const Vec4& value) const; // 改为const - - /// @brief Set uniform mat3 - /// @param name Uniform name - /// @param value Value - void set_mat3(const std::string& name, const Mat3& value) const; // 改为const - - /// @brief Set uniform mat4 - /// @param name Uniform name - /// @param value Value - void set_mat4(const std::string& name, const Mat4& value) const; // 改为const - - /// @brief Get shader program handle - /// @return Shader handle - ShaderHandle get_handle() const { return handle_; } - - /// @brief Check if shader is valid - /// @return True if valid - bool is_valid() const { return handle_ != INVALID_HANDLE; } + Shader(Shader &&other) noexcept; + Shader &operator=(Shader &&other) noexcept; + + // Destructor + ~Shader(); + + /* + * @brief Load and compile shader from files + * @param vertex_path Vertex shader path + * @param fragment_path Fragment shader path + * @return True if compilation succeeded + */ + bool load(const std::string &vertex_path, const std::string &fragment_path); + + /* + * @brief Load and compile compute shader + * @param compute_path Compute shader path + * @return True if compilation succeeded + */ + bool load_compute(const std::string &compute_path); + + /* + * @brief Compile shader from source strings + * @param vertex_source Vertex shader source + * @param fragment_source Fragment shader source + * @return True if compilation succeeded + */ + bool compile(const std::string &vertex_source, const std::string &fragment_source); + + /* + * @brief Compile compute shader from source + * @param compute_source Compute shader source + * @return True if compilation succeeded + */ + bool compile_compute(const std::string &compute_source); + + // Use/activate shader program + void use() const; // 改为const + + // Release shader resources + void release(); + + /* + * @brief Set uniform boolean + * @param name Uniform name + * @param value Value + */ + void set_bool(const std::string &name, bool value) const; // 新增,const + + /* + * @brief Set uniform integer + * @param name Uniform name + * @param value Value + */ + void set_int(const std::string &name, int value) const; // 改为const + + /* + * @brief Set uniform unsigned integer + * @param name Uniform name + * @param value Value + */ + void set_uint(const std::string &name, uint value) const; // 改为const + + /* + * @brief Set uniform float + * @param name Uniform name + * @param value Value + */ + void set_float(const std::string &name, float value) const; // 改为const + + /* + * @brief Set uniform vec2 + * @param name Uniform name + * @param value Value + */ + void set_vec2(const std::string &name, const Vec2 &value) const; // 改为const + + /* + * @brief Set uniform vec3 + * @param name Uniform name + * @param value Value + */ + void set_vec3(const std::string &name, const Vec3 &value) const; // 改为const + + /* + * @brief Set uniform vec4 + * @param name Uniform name + * @param value Value + */ + void set_vec4(const std::string &name, const Vec4 &value) const; // 改为const + + /* + * @brief Set uniform mat3 + * @param name Uniform name + * @param value Value + */ + void set_mat3(const std::string &name, const Mat3 &value) const; // 改为const + + /* + * @brief Set uniform mat4 + * @param name Uniform name + * @param value Value + */ + void set_mat4(const std::string &name, const Mat4 &value) const; // 改为const + + /* + * @brief Get shader program handle + * @return Shader handle + */ + ShaderHandle get_handle() const { + return handle_; + } + + /* + * @brief Check if shader is valid + * @return True if valid + */ + bool is_valid() const { + return handle_ != INVALID_HANDLE; + } private: - ShaderHandle handle_; - mutable std::unordered_map uniform_cache_; // 改为mutable - - /// @brief Get uniform location (with caching) - /// @param name Uniform name - /// @return Uniform location - int get_uniform_location_(const std::string& name) const; // 改为const - - /// @brief Compile shader stage - /// @param source Shader source code - /// @param type Shader type (GL_VERTEX_SHADER, etc.) - /// @return Shader object handle (0 on failure) - uint compile_shader_(const std::string& source, uint type); - - /// @brief Link shader program - /// @param shaders Array of shader object handles - /// @param count Number of shaders - /// @return True if linking succeeded - bool link_program_(const uint* shaders, uint count); - - /// @brief Read file content - /// @param path File path - /// @return File content - std::string read_file_(const std::string& path); + ShaderHandle handle_; + mutable std::unordered_map uniform_cache_; // 改为mutable + + /* + * @brief Get uniform location (with caching) + * @param name Uniform name + * @return Uniform location + */ + int get_uniform_location_(const std::string &name) const; // 改为const + + /* + * @brief Compile shader stage + * @param source Shader source code + * @param type Shader type (GL_VERTEX_SHADER, etc.) + * @return Shader object handle (0 on failure) + */ + uint compile_shader_(const std::string &source, uint type); + + /* + * @brief Link shader program + * @param shaders Array of shader object handles + * @param count Number of shaders + * @return True if linking succeeded + */ + bool link_program_(const uint *shaders, uint count); + + /* + * @brief Read file content + * @param path File path + * @return File content + */ + std::string read_file_(const std::string &path); }; } // namespace are diff --git a/include/resource/texture.h b/include/resource/texture.h index 59cad16..875e930 100644 --- a/include/resource/texture.h +++ b/include/resource/texture.h @@ -6,126 +6,158 @@ namespace are { -/// @brief Texture format enumeration +// Texture format enumeration enum class TextureFormat { - R8, - RG8, - RGB8, - RGBA8, - R16F, - RG16F, - RGB16F, - RGBA16F, - R32F, - RG32F, - RGB32F, - RGBA32F, - DEPTH24_STENCIL8 + R8, + RG8, + RGB8, + RGBA8, + R16F, + RG16F, + RGB16F, + RGBA16F, + R32F, + RG32F, + RGB32F, + RGBA32F, + DEPTH24_STENCIL8 }; -/// @brief Texture filter mode +// Texture filter mode enum class TextureFilter { - NEAREST, - LINEAR, - NEAREST_MIPMAP_NEAREST, - LINEAR_MIPMAP_NEAREST, - NEAREST_MIPMAP_LINEAR, - LINEAR_MIPMAP_LINEAR + NEAREST, + LINEAR, + NEAREST_MIPMAP_NEAREST, + LINEAR_MIPMAP_NEAREST, + NEAREST_MIPMAP_LINEAR, + LINEAR_MIPMAP_LINEAR }; -/// @brief Texture wrap mode +// Texture wrap mode enum class TextureWrap { - REPEAT, - MIRRORED_REPEAT, - CLAMP_TO_EDGE, - CLAMP_TO_BORDER + REPEAT, + MIRRORED_REPEAT, + CLAMP_TO_EDGE, + CLAMP_TO_BORDER }; -/// @brief Texture resource +// Texture resource class Texture { public: - /// @brief Constructor - Texture(); + // Constructor + Texture(); - Texture(const Texture&) = delete; - Texture& operator=(const Texture&) = delete; + Texture(const Texture &) = delete; + Texture &operator=(const Texture &) = delete; - Texture(Texture&& other) noexcept; - Texture& operator=(Texture&& other) noexcept; - - /// @brief Destructor - ~Texture(); - - /// @brief Load texture from file - /// @param path File path - /// @param generate_mipmaps Generate mipmaps - /// @return True if loading succeeded - bool load_from_file(const std::string& path, bool generate_mipmaps = true); - - /// @brief Create empty texture - /// @param width Texture width - /// @param height Texture height - /// @param format Texture format - /// @return True if creation succeeded - bool create(uint width, uint height, TextureFormat format); - - /// @brief Upload data to texture - /// @param data Pixel data - /// @param width Data width - /// @param height Data height - /// @param format Data format - /// @return True if upload succeeded - bool upload(const void* data, uint width, uint height, TextureFormat format); - - /// @brief Set texture filter mode - /// @param min_filter Minification filter - /// @param mag_filter Magnification filter - void set_filter(TextureFilter min_filter, TextureFilter mag_filter); - - /// @brief Set texture wrap mode - /// @param wrap_s Wrap mode for S coordinate - /// @param wrap_t Wrap mode for T coordinate - void set_wrap(TextureWrap wrap_s, TextureWrap wrap_t); - - /// @brief Generate mipmaps - void generate_mipmaps(); - - /// @brief Bind texture to texture unit - /// @param unit Texture unit - void bind(uint unit) const; - - /// @brief Unbind texture - void unbind() const; - - /// @brief Release texture resources - void release(); - - /// @brief Get texture handle - /// @return Texture handle - TextureHandle get_handle() const { return handle_; } - - /// @brief Get texture width - /// @return Width - uint get_width() const { return width_; } - - /// @brief Get texture height - /// @return Height - uint get_height() const { return height_; } - - /// @brief Get texture format - /// @return Format - TextureFormat get_format() const { return format_; } - - /// @brief Check if texture is valid - /// @return True if valid - bool is_valid() const { return handle_ != INVALID_HANDLE; } + Texture(Texture &&other) noexcept; + Texture &operator=(Texture &&other) noexcept; + + // Destructor + ~Texture(); + + /* + * @brief Load texture from file + * @param path File path + * @param generate_mipmaps Generate mipmaps + * @return True if loading succeeded + */ + bool load_from_file(const std::string &path, bool generate_mipmaps = true); + + /* + * @brief Create empty texture + * @param width Texture width + * @param height Texture height + * @param format Texture format + * @return True if creation succeeded + */ + bool create(uint width, uint height, TextureFormat format); + + /* + * @brief Upload data to texture + * @param data Pixel data + * @param width Data width + * @param height Data height + * @param format Data format + * @return True if upload succeeded + */ + bool upload(const void *data, uint width, uint height, TextureFormat format); + + /* + * @brief Set texture filter mode + * @param min_filter Minification filter + * @param mag_filter Magnification filter + */ + void set_filter(TextureFilter min_filter, TextureFilter mag_filter); + + /* + * @brief Set texture wrap mode + * @param wrap_s Wrap mode for S coordinate + * @param wrap_t Wrap mode for T coordinate + */ + void set_wrap(TextureWrap wrap_s, TextureWrap wrap_t); + + // Generate mipmaps + void generate_mipmaps(); + + /* + * @brief Bind texture to texture unit + * @param unit Texture unit + */ + void bind(uint unit) const; + + // Unbind texture + void unbind() const; + + // Release texture resources + void release(); + + /* + * @brief Get texture handle + * @return Texture handle + */ + TextureHandle get_handle() const { + return handle_; + } + + /* + * @brief Get texture width + * @return Width + */ + uint get_width() const { + return width_; + } + + /* + * @brief Get texture height + * @return Height + */ + uint get_height() const { + return height_; + } + + /* + * @brief Get texture format + * @return Format + */ + TextureFormat get_format() const { + return format_; + } + + /* + * @brief Check if texture is valid + * @return True if valid + */ + bool is_valid() const { + return handle_ != INVALID_HANDLE; + } private: - TextureHandle handle_; - uint width_; - uint height_; - TextureFormat format_; - bool has_mipmaps_; + TextureHandle handle_; + uint width_; + uint height_; + TextureFormat format_; + bool has_mipmaps_; }; } // namespace are diff --git a/include/scene/camera.h b/include/scene/camera.h index 003f120..b0531d5 100644 --- a/include/scene/camera.h +++ b/include/scene/camera.h @@ -5,99 +5,125 @@ namespace are { -/// @brief Camera projection type +// Camera projection type enum class ProjectionType { - PERSPECTIVE, - ORTHOGRAPHIC + PERSPECTIVE, + ORTHOGRAPHIC }; -/// @brief Camera for rendering +// Camera for rendering class Camera { public: - /// @brief Constructor - Camera(); - - /// @brief Destructor - ~Camera(); - - /// @brief Set perspective projection - /// @param fov Field of view in degrees - /// @param aspect Aspect ratio - /// @param near Near plane - /// @param far Far plane - void set_perspective(float fov, float aspect, float near, float far); - - /// @brief Set orthographic projection - /// @param left Left plane - /// @param right Right plane - /// @param bottom Bottom plane - /// @param top Top plane - /// @param near Near plane - /// @param far Far plane - void set_orthographic(float left, float right, float bottom, float top, float near, float far); - - /// @brief Set camera position - /// @param position Position - void set_position(const Vec3& position); - - /// @brief Set camera target - /// @param target Target position - void set_target(const Vec3& target); - - /// @brief Set camera up vector - /// @param up Up vector - void set_up(const Vec3& up); - - /// @brief Get view matrix - /// @return View matrix - Mat4 get_view_matrix() const; - - /// @brief Get projection matrix - /// @return Projection matrix - Mat4 get_projection_matrix() const; - - /// @brief Get view-projection matrix - /// @return View-projection matrix - Mat4 get_view_projection_matrix() const; - - /// @brief Get camera position - /// @return Position - const Vec3& get_position() const { return position_; } - - /// @brief Get camera forward direction - /// @return Forward direction - Vec3 get_forward() const; - - /// @brief Get camera right direction - /// @return Right direction - Vec3 get_right() const; - - /// @brief Get camera up direction - /// @return Up direction - Vec3 get_up() const; + // Constructor + Camera(); + + // Destructor + ~Camera(); + + /* + * @brief Set perspective projection + * @param fov Field of view in degrees + * @param aspect Aspect ratio + * @param near Near plane + * @param far Far plane + */ + void set_perspective(float fov, float aspect, float near, float far); + + /* + * @brief Set orthographic projection + * @param left Left plane + * @param right Right plane + * @param bottom Bottom plane + * @param top Top plane + * @param near Near plane + * @param far Far plane + */ + void set_orthographic(float left, float right, float bottom, float top, float near, float far); + + /* + * @brief Set camera position + * @param position Position + */ + void set_position(const Vec3 &position); + + /* + * @brief Set camera target + * @param target Target position + */ + void set_target(const Vec3 &target); + + /* + * @brief Set camera up vector + * @param up Up vector + */ + void set_up(const Vec3 &up); + + /* + * @brief Get view matrix + * @return View matrix + */ + Mat4 get_view_matrix() const; + + /* + * @brief Get projection matrix + * @return Projection matrix + */ + Mat4 get_projection_matrix() const; + + /* + * @brief Get view-projection matrix + * @return View-projection matrix + */ + Mat4 get_view_projection_matrix() const; + + /* + * @brief Get camera position + * @return Position + */ + const Vec3 &get_position() const { + return position_; + } + + /* + * @brief Get camera forward direction + * @return Forward direction + */ + Vec3 get_forward() const; + + /* + * @brief Get camera right direction + * @return Right direction + */ + Vec3 get_right() const; + + /* + * @brief Get camera up direction + * @return Up direction + */ + Vec3 get_up() const; private: - Vec3 position_; - Vec3 target_; - Vec3 up_; - - ProjectionType projection_type_; - - // Perspective parameters - float fov_; - float aspect_; - - // Orthographic parameters - float left_, right_, bottom_, top_; - - // Common parameters - float near_; - float far_; - - mutable Mat4 view_matrix_; - mutable Mat4 projection_matrix_; - mutable bool view_dirty_; - mutable bool projection_dirty_; + Vec3 position_; + Vec3 target_; + Vec3 up_; + + ProjectionType projection_type_; + + // Perspective parameters + float fov_; + float aspect_; + + // Orthographic parameters + float left_, right_, bottom_, top_; + + // Common parameters + float near_; + float far_; + + mutable Mat4 view_matrix_; + mutable Mat4 projection_matrix_; + mutable bool view_dirty_; + mutable bool projection_dirty_; }; } // namespace are diff --git a/include/scene/light.h b/include/scene/light.h index 30a6519..0991065 100644 --- a/include/scene/light.h +++ b/include/scene/light.h @@ -5,95 +5,125 @@ namespace are { -/// @brief Light type enumeration +// Light type enumeration enum class LightType { DIRECTIONAL = 0, POINT = 1, SPOT = 2 }; -/// @brief Light source +// Light source class Light { public: - /// @brief Constructor + // Constructor Light(); - /// @brief Destructor + // Destructor ~Light(); - /// @brief Set light type - /// @param type Light type + /* + * @brief Set light type + * @param type Light type + */ void set_type(LightType type); - /// @brief Set light position (for point and spot lights) - /// @param position Light position + /* + * @brief Set light position (for point and spot lights) + * @param position Light position + */ void set_position(const Vec3 &position); - /// @brief Set light direction (for directional and spot lights) - /// @param direction Light direction + /* + * @brief Set light direction (for directional and spot lights) + * @param direction Light direction + */ void set_direction(const Vec3 &direction); - /// @brief Set light color - /// @param color Light color + /* + * @brief Set light color + * @param color Light color + */ void set_color(const Vec3 &color); - /// @brief Set light intensity - /// @param intensity Light intensity + /* + * @brief Set light intensity + * @param intensity Light intensity + */ void set_intensity(float intensity); - /// @brief Set light range (for point and spot lights) - /// @param range Light range + /* + * @brief Set light range (for point and spot lights) + * @param range Light range + */ void set_range(float range); - /// @brief Set spot light angles - /// @param inner_angle Inner cone angle in degrees - /// @param outer_angle Outer cone angle in degrees + /* + * @brief Set spot light angles + * @param inner_angle Inner cone angle in degrees + * @param outer_angle Outer cone angle in degrees + */ void set_spot_angles(float inner_angle, float outer_angle); - /// @brief Get light type - /// @return Light type + /* + * @brief Get light type + * @return Light type + */ LightType get_type() const { return type_; } - /// @brief Get light position - /// @return Light position + /* + * @brief Get light position + * @return Light position + */ const Vec3 &get_position() const { return position_; } - /// @brief Get light direction - /// @return Light direction + /* + * @brief Get light direction + * @return Light direction + */ const Vec3 &get_direction() const { return direction_; } - /// @brief Get light color - /// @return Light color + /* + * @brief Get light color + * @return Light color + */ const Vec3 &get_color() const { return color_; } - /// @brief Get light intensity - /// @return Light intensity + /* + * @brief Get light intensity + * @return Light intensity + */ float get_intensity() const { return intensity_; } - /// @brief Get light range - /// @return Light range + /* + * @brief Get light range + * @return Light range + */ float get_range() const { return range_; } - /// @brief Get spot light inner angle - /// @return Inner angle in radians + /* + * @brief Get spot light inner angle + * @return Inner angle in radians + */ float get_inner_angle() const { return inner_angle_; } - /// @brief Get spot light outer angle - /// @return Outer angle in radians + /* + * @brief Get spot light outer angle + * @return Outer angle in radians + */ float get_outer_angle() const { return outer_angle_; } diff --git a/include/scene/material.h b/include/scene/material.h index 3fc933e..caca8fc 100644 --- a/include/scene/material.h +++ b/include/scene/material.h @@ -7,97 +7,145 @@ namespace are { -/// @brief Material type enumeration +// Material type enumeration enum class MaterialType { - DIFFUSE = 0, - METAL = 1, - DIELECTRIC = 2, - EMISSIVE = 3 + DIFFUSE = 0, + METAL = 1, + DIELECTRIC = 2, + EMISSIVE = 3 }; -/// @brief Material properties +// Material properties class Material { public: - /// @brief Constructor - Material(); - - /// @brief Destructor - ~Material(); - - /// @brief Set albedo color - /// @param albedo Albedo color - void set_albedo(const Vec3& albedo); - - /// @brief Set emission color - /// @param emission Emission color - void set_emission(const Vec3& emission); - - /// @brief Set metallic value - /// @param metallic Metallic (0-1) - void set_metallic(float metallic); - - /// @brief Set roughness value - /// @param roughness Roughness (0-1) - void set_roughness(float roughness); - - /// @brief Set index of refraction - /// @param ior Index of refraction - void set_ior(float ior); - - /// @brief Set material type - /// @param type Material type - void set_type(MaterialType type); - - /// @brief Set albedo texture - /// @param texture Albedo texture - void set_albedo_texture(std::shared_ptr texture); - - /// @brief Set normal map - /// @param texture Normal map texture - void set_normal_texture(std::shared_ptr texture); - - /// @brief Get albedo color - /// @return Albedo color - const Vec3& get_albedo() const { return albedo_; } - - /// @brief Get emission color - /// @return Emission color - const Vec3& get_emission() const { return emission_; } - - /// @brief Get metallic value - /// @return Metallic - float get_metallic() const { return metallic_; } - - /// @brief Get roughness value - /// @return Roughness - float get_roughness() const { return roughness_; } - - /// @brief Get index of refraction - /// @return IOR - float get_ior() const { return ior_; } - - /// @brief Get material type - /// @return Material type - MaterialType get_type() const { return type_; } - - /// @brief Get albedo texture - /// @return Albedo texture (nullptr if none) - std::shared_ptr get_albedo_texture() const { return albedo_texture_; } - - /// @brief Get normal texture - /// @return Normal texture (nullptr if none) - std::shared_ptr get_normal_texture() const { return normal_texture_; } + // Constructor + Material(); + + // Destructor + ~Material(); + + /* + * @brief Set albedo color + * @param albedo Albedo color + */ + void set_albedo(const Vec3 &albedo); + + /* + * @brief Set emission color + * @param emission Emission color + */ + void set_emission(const Vec3 &emission); + + /* + * @brief Set metallic value + * @param metallic Metallic (0-1) + */ + void set_metallic(float metallic); + + /* + * @brief Set roughness value + * @param roughness Roughness (0-1) + */ + void set_roughness(float roughness); + + /* + * @brief Set index of refraction + * @param ior Index of refraction + */ + void set_ior(float ior); + + /* + * @brief Set material type + * @param type Material type + */ + void set_type(MaterialType type); + + /* + * @brief Set albedo texture + * @param texture Albedo texture + */ + void set_albedo_texture(std::shared_ptr texture); + + /* + * @brief Set normal map + * @param texture Normal map texture + */ + void set_normal_texture(std::shared_ptr texture); + + /* + * @brief Get albedo color + * @return Albedo color + */ + const Vec3 &get_albedo() const { + return albedo_; + } + + /* + * @brief Get emission color + * @return Emission color + */ + const Vec3 &get_emission() const { + return emission_; + } + + /* + * @brief Get metallic value + * @return Metallic + */ + float get_metallic() const { + return metallic_; + } + + /* + * @brief Get roughness value + * @return Roughness + */ + float get_roughness() const { + return roughness_; + } + + /* + * @brief Get index of refraction + * @return IOR + */ + float get_ior() const { + return ior_; + } + + /* + * @brief Get material type + * @return Material type + */ + MaterialType get_type() const { + return type_; + } + + /* + * @brief Get albedo texture + * @return Albedo texture (nullptr if none) + */ + std::shared_ptr get_albedo_texture() const { + return albedo_texture_; + } + + /* + * @brief Get normal texture + * @return Normal texture (nullptr if none) + */ + std::shared_ptr get_normal_texture() const { + return normal_texture_; + } private: - Vec3 albedo_; - Vec3 emission_; - float metallic_; - float roughness_; - float ior_; - MaterialType type_; - - std::shared_ptr albedo_texture_; - std::shared_ptr normal_texture_; + Vec3 albedo_; + Vec3 emission_; + float metallic_; + float roughness_; + float ior_; + MaterialType type_; + + std::shared_ptr albedo_texture_; + std::shared_ptr normal_texture_; }; } // namespace are diff --git a/include/scene/mesh.h b/include/scene/mesh.h index 27acdc5..12223dc 100644 --- a/include/scene/mesh.h +++ b/include/scene/mesh.h @@ -6,72 +6,106 @@ namespace are { -/// @brief Mesh data container +// Mesh data container class Mesh { public: - /// @brief Constructor - Mesh(); - - /// @brief Destructor - ~Mesh(); - - /// @brief Set vertex data - /// @param vertices Vertex array - void set_vertices(const std::vector& vertices); - - /// @brief Set index data - /// @param indices Index array - void set_indices(const std::vector& indices); - - /// @brief Set material index - /// @param material_id Material index - void set_material(uint material_id); - - /// @brief Set transform matrix - /// @param transform Transform matrix - void set_transform(const Mat4& transform); - - /// @brief Get vertices - /// @return Vertex array - const std::vector& get_vertices() const { return vertices_; } - - /// @brief Get indices - /// @return Index array - const std::vector& get_indices() const { return indices_; } - - /// @brief Get material index - /// @return Material index - uint get_material() const { return material_id_; } - - /// @brief Get transform matrix - /// @return Transform matrix - const Mat4& get_transform() const { return transform_; } - - /// @brief Upload mesh data to GPU - /// @return True if upload succeeded - bool upload_to_gpu(); - - /// @brief Release GPU resources - void release_gpu_resources(); - - /// @brief Get VAO handle - /// @return VAO handle - uint get_vao() const { return vao_; } - - /// @brief Check if mesh is uploaded to GPU - /// @return True if uploaded - bool is_uploaded() const { return uploaded_; } + // Constructor + Mesh(); + + // Destructor + ~Mesh(); + + /* + * @brief Set vertex data + * @param vertices Vertex array + */ + void set_vertices(const std::vector &vertices); + + /* + * @brief Set index data + * @param indices Index array + */ + void set_indices(const std::vector &indices); + + /* + * @brief Set material index + * @param material_id Material index + */ + void set_material(uint material_id); + + /* + * @brief Set transform matrix + * @param transform Transform matrix + */ + void set_transform(const Mat4 &transform); + + /* + * @brief Get vertices + * @return Vertex array + */ + const std::vector &get_vertices() const { + return vertices_; + } + + /* + * @brief Get indices + * @return Index array + */ + const std::vector &get_indices() const { + return indices_; + } + + /* + * @brief Get material index + * @return Material index + */ + uint get_material() const { + return material_id_; + } + + /* + * @brief Get transform matrix + * @return Transform matrix + */ + const Mat4 &get_transform() const { + return transform_; + } + + /* + * @brief Upload mesh data to GPU + * @return True if upload succeeded + */ + bool upload_to_gpu(); + + // Release GPU resources + void release_gpu_resources(); + + /* + * @brief Get VAO handle + * @return VAO handle + */ + uint get_vao() const { + return vao_; + } + + /* + * @brief Check if mesh is uploaded to GPU + * @return True if uploaded + */ + bool is_uploaded() const { + return uploaded_; + } private: - std::vector vertices_; - std::vector indices_; - uint material_id_; - Mat4 transform_; - - uint vao_; - uint vbo_; - uint ebo_; - bool uploaded_; + std::vector vertices_; + std::vector indices_; + uint material_id_; + Mat4 transform_; + + uint vao_; + uint vbo_; + uint ebo_; + bool uploaded_; }; } // namespace are diff --git a/include/scene/scene.h b/include/scene/scene.h index f5d34c2..f4c6a0f 100644 --- a/include/scene/scene.h +++ b/include/scene/scene.h @@ -3,70 +3,96 @@ #include "basic/types.h" #include "scene/camera.h" -#include "scene/mesh.h" -#include "scene/material.h" #include "scene/light.h" -#include +#include "scene/material.h" +#include "scene/mesh.h" #include +#include namespace are { -/// @brief Scene container holding all scene objects +// Scene container holding all scene objects class Scene { public: - /// @brief Constructor - Scene(); - - /// @brief Destructor - ~Scene(); - - /// @brief Add mesh to scene - /// @param mesh Mesh to add - /// @return Mesh index - uint add_mesh(std::shared_ptr mesh); - - /// @brief Add material to scene - /// @param material Material to add - /// @return Material index - uint add_material(std::shared_ptr material); - - /// @brief Add light to scene - /// @param light Light to add - /// @return Light index - uint add_light(std::shared_ptr light); - - /// @brief Set active camera - /// @param camera Camera to set - void set_camera(std::shared_ptr camera); - - /// @brief Get active camera - /// @return Active camera - const Camera& get_camera() const { return *camera_; } - - /// @brief Get all meshes - /// @return Mesh list - const std::vector>& get_meshes() const { return meshes_; } - - /// @brief Get all materials - /// @return Material list - const std::vector>& get_materials() const { return materials_; } - - /// @brief Get all lights - /// @return Light list - const std::vector>& get_lights() const { return lights_; } - - /// @brief Clear all scene objects - void clear(); - - /// @brief Update scene (animations, transforms, etc.) - /// @param delta_time Time since last update - void update(float delta_time); + // Constructor + Scene(); + + // Destructor + ~Scene(); + + /* + * @brief Add mesh to scene + * @param mesh Mesh to add + * @return Mesh index + */ + uint add_mesh(std::shared_ptr mesh); + + /* + * @brief Add material to scene + * @param material Material to add + * @return Material index + */ + uint add_material(std::shared_ptr material); + + /* + * @brief Add light to scene + * @param light Light to add + * @return Light index + */ + uint add_light(std::shared_ptr light); + + /* + * @brief Set active camera + * @param camera Camera to set + */ + void set_camera(std::shared_ptr camera); + + /* + * @brief Get active camera + * @return Active camera + */ + const Camera &get_camera() const { + return *camera_; + } + + /* + * @brief Get all meshes + * @return Mesh list + */ + const std::vector> &get_meshes() const { + return meshes_; + } + + /* + * @brief Get all materials + * @return Material list + */ + const std::vector> &get_materials() const { + return materials_; + } + + /* + * @brief Get all lights + * @return Light list + */ + const std::vector> &get_lights() const { + return lights_; + } + + // Clear all scene objects + void clear(); + + /* + * @brief Update scene (animations, transforms, etc.) + * @param delta_time Time since last update + */ + void update(float delta_time); private: - std::shared_ptr camera_; - std::vector> meshes_; - std::vector> materials_; - std::vector> lights_; + std::shared_ptr camera_; + std::vector> meshes_; + std::vector> materials_; + std::vector> lights_; }; } // namespace are diff --git a/include/utils/config.h b/include/utils/config.h index f9a7790..e0ee70c 100644 --- a/include/utils/config.h +++ b/include/utils/config.h @@ -6,63 +6,85 @@ namespace are { -/// @brief Configuration manager for loading engine settings -/// @note This module should be implemented by the user +/* + * @brief Configuration manager for loading engine settings + * @note This module should be implemented by the user + */ class Config { public: - /// @brief Load configuration from file - /// @param path Configuration file path - /// @return True if loading succeeded - static bool load(const std::string& path); - - /// @brief Save configuration to file - /// @param path Configuration file path - /// @return True if saving succeeded - static bool save(const std::string& path); - - /// @brief Get string value - /// @param key Configuration key - /// @param default_value Default value if key not found - /// @return Configuration value - static std::string get_string(const std::string& key, const std::string& default_value = ""); - - /// @brief Get integer value - /// @param key Configuration key - /// @param default_value Default value if key not found - /// @return Configuration value - static int get_int(const std::string& key, int default_value = 0); - - /// @brief Get float value - /// @param key Configuration key - /// @param default_value Default value if key not found - /// @return Configuration value - static float get_float(const std::string& key, float default_value = 0.0f); - - /// @brief Get boolean value - /// @param key Configuration key - /// @param default_value Default value if key not found - /// @return Configuration value - static bool get_bool(const std::string& key, bool default_value = false); - - /// @brief Set string value - /// @param key Configuration key - /// @param value Configuration value - static void set_string(const std::string& key, const std::string& value); - - /// @brief Set integer value - /// @param key Configuration key - /// @param value Configuration value - static void set_int(const std::string& key, int value); - - /// @brief Set float value - /// @param key Configuration key - /// @param value Configuration value - static void set_float(const std::string& key, float value); - - /// @brief Set boolean value - /// @param key Configuration key - /// @param value Configuration value - static void set_bool(const std::string& key, bool value); + /* + * @brief Load configuration from file + * @param path Configuration file path + * @return True if loading succeeded + */ + static bool load(const std::string &path); + + /* + * @brief Save configuration to file + * @param path Configuration file path + * @return True if saving succeeded + */ + static bool save(const std::string &path); + + /* + * @brief Get string value + * @param key Configuration key + * @param default_value Default value if key not found + * @return Configuration value + */ + static std::string get_string(const std::string &key, const std::string &default_value = ""); + + /* + * @brief Get integer value + * @param key Configuration key + * @param default_value Default value if key not found + * @return Configuration value + */ + static int get_int(const std::string &key, int default_value = 0); + + /* + * @brief Get float value + * @param key Configuration key + * @param default_value Default value if key not found + * @return Configuration value + */ + static float get_float(const std::string &key, float default_value = 0.0f); + + /* + * @brief Get boolean value + * @param key Configuration key + * @param default_value Default value if key not found + * @return Configuration value + */ + static bool get_bool(const std::string &key, bool default_value = false); + + /* + * @brief Set string value + * @param key Configuration key + * @param value Configuration value + */ + static void set_string(const std::string &key, const std::string &value); + + /* + * @brief Set integer value + * @param key Configuration key + * @param value Configuration value + */ + static void set_int(const std::string &key, int value); + + /* + * @brief Set float value + * @param key Configuration key + * @param value Configuration value + */ + static void set_float(const std::string &key, float value); + + /* + * @brief Set boolean value + * @param key Configuration key + * @param value Configuration value + */ + static void set_bool(const std::string &key, bool value); }; } // namespace are diff --git a/include/utils/logger.h b/include/utils/logger.h index 6ec84ab..07faee1 100644 --- a/include/utils/logger.h +++ b/include/utils/logger.h @@ -1,74 +1,65 @@ #ifndef ARE_INCLUDE_CORE_LOGGER_H #define ARE_INCLUDE_CORE_LOGGER_H -#include #include +#include namespace are { -/** - * @enum LogLevel - * @brief Logging severity levels - */ +// Logging severity levels enum class LogLevel { - ARE_LOG_TRACE, - ARE_LOG_DEBUG, - ARE_LOG_INFO, - ARE_LOG_WARN, - ARE_LOG_ERROR, - ARE_LOG_CRITICAL + ARE_LOG_TRACE, + ARE_LOG_DEBUG, + ARE_LOG_INFO, + ARE_LOG_WARN, + ARE_LOG_ERROR, + ARE_LOG_CRITICAL }; -/** - * @class Logger - * @brief Thread-safe logging system - * - * This class provides a simple interface for logging messages with different - * severity levels. It wraps spdlog for actual logging functionality. - */ +// Thread-safe logging system class Logger { public: - /** - * @brief Initialize the logging system - * @param min_level Minimum log level to display - */ - static void init(LogLevel min_level = LogLevel::ARE_LOG_INFO); + /** + * @brief Initialize the logging system + * @param min_level Minimum log level to display + */ + static void init(LogLevel min_level = LogLevel::ARE_LOG_INFO); - /** - * @brief Shutdown the logging system - */ - static void shutdown(); + /** + * @brief Shutdown the logging system + */ + static void shutdown(); - /** - * @brief Log a message with file/function/line information - * @param level Log severity level - * @param file Source file name - * @param func Function name - * @param line Line number - * @param message Log message - */ - static void log(LogLevel level, const char* file, const char* func, - int line, const std::string& message); + /** + * @brief Log a message with file/function/line information + * @param level Log severity level + * @param file Source file name + * @param func Function name + * @param line Line number + * @param message Log message + */ + static void log(LogLevel level, const char *file, const char *func, + int line, const std::string &message); - /** - * @brief Set minimum log level - * @param level Minimum log level to display - */ - static void set_level(LogLevel level); + /** + * @brief Set minimum log level + * @param level Minimum log level to display + */ + static void set_level(LogLevel level); private: - static std::shared_ptr logger_impl_; ///< Internal logger implementation - static bool initialized_; ///< Initialization flag + static std::shared_ptr logger_impl_; ///< Internal logger implementation + static bool initialized_; ///< Initialization flag }; } // namespace are // Logging macros -#define ARE_LOG_TRACE(msg) are::Logger::log(are::LogLevel::ARE_LOG_TRACE, __FILE__, __func__, __LINE__, msg) -#define ARE_LOG_DEBUG(msg) are::Logger::log(are::LogLevel::ARE_LOG_DEBUG, __FILE__, __func__, __LINE__, msg) -#define ARE_LOG_INFO(msg) are::Logger::log(are::LogLevel::ARE_LOG_INFO, __FILE__, __func__, __LINE__, msg) -#define ARE_LOG_WARN(msg) are::Logger::log(are::LogLevel::ARE_LOG_WARN, __FILE__, __func__, __LINE__, msg) -#define ARE_LOG_ERROR(msg) are::Logger::log(are::LogLevel::ARE_LOG_ERROR, __FILE__, __func__, __LINE__, msg) +#define ARE_LOG_TRACE(msg) are::Logger::log(are::LogLevel::ARE_LOG_TRACE, __FILE__, __func__, __LINE__, msg) +#define ARE_LOG_DEBUG(msg) are::Logger::log(are::LogLevel::ARE_LOG_DEBUG, __FILE__, __func__, __LINE__, msg) +#define ARE_LOG_INFO(msg) are::Logger::log(are::LogLevel::ARE_LOG_INFO, __FILE__, __func__, __LINE__, msg) +#define ARE_LOG_WARN(msg) are::Logger::log(are::LogLevel::ARE_LOG_WARN, __FILE__, __func__, __LINE__, msg) +#define ARE_LOG_ERROR(msg) are::Logger::log(are::LogLevel::ARE_LOG_ERROR, __FILE__, __func__, __LINE__, msg) #define ARE_LOG_CRITICAL(msg) are::Logger::log(are::LogLevel::ARE_LOG_CRITICAL, __FILE__, __func__, __LINE__, msg) #endif // ARE_INCLUDE_CORE_LOGGER_H