#pragma once #include "glm/glm.hpp" #include "cbt/scene.hpp" #include "cbt/gfx.hpp" namespace cbt::scenes { class cornell_box final : public scene { public: auto init() -> bool override; auto update(float delta_time) -> void override; auto render(int width, int height) -> void override; auto on_mouse_drag(double dx, double dy) -> void override; private: gfx::pipeline m_scene_pipeline; gfx::pipeline m_light_pipeline; gfx::pipeline m_post_pipeline; gfx::render_target m_rt{0, 0}; float m_yaw = 0.0f; // degrees, horizontal orbit float m_pitch = 0.0f; // degrees, vertical orbit float m_radius = 4.0f; auto build_scene_pipeline() -> bool; auto build_light_pipeline() -> bool; auto build_post_pipeline() -> bool; }; }