#pragma once #include "core/memory.h" #include "core/state.h" #include "core/event.h" #include "core/camera.h" #include "core/log.h" #include "rendering/vertex_array.h" #include "rendering/vertex_buffer.h" #include "rendering/index_buffer.h" #include "rendering/shader.h" #include "rendering/texture.h" namespace Donut { class SimulationState : public State { public: ~SimulationState() = default; void on_enter() override; void on_exit() override; void on_update(float delta_time) override; void on_render() override; void on_event(Event& event) override; private: void handle_key_input(float delta_time); void update_texture(); private: Scope m_camera; Ref m_vertex_array; Ref m_vertex_buffer; Ref m_index_buffer; Ref m_shader; Ref m_texture; Ref m_compute_shader; Ref m_processed_texture; float m_compute_brightness = 0.0f; float m_compute_contrast = 1.0f; float m_compute_saturation = 1.0f; bool m_use_compute_shader = true; bool m_keys[1024] = { false }; bool m_first_mouse = true; float m_last_x = 0.0f; float m_last_y = 0.0f; float m_delta_time = 0.0f; float m_last_frame = 0.0f; bool m_mouse_dragging = false; float m_texture_time = 0.0f; }; };