#pragma once #include "copium/asset/AssetMeta.h" #include "copium/core/Scene.h" #include "copium/buffer/Framebuffer.h" #include "copium/event/EventHandler.h" #include "copium/mesh/Mesh.h" #include "copium/pipeline/DescriptorPool.h" #include "copium/pipeline/DescriptorSet.h" #include "copium/pipeline/Pipeline.h" #include "copium/renderer/Renderer.h" namespace Copium { class Application final : EventHandler { CP_DELETE_COPY_AND_MOVE_CTOR(Application); private: AssetHandle framebuffer; AssetHandle texture2D; AssetHandle texture2D2; AssetHandle font; AssetHandle graphicsPipeline; std::unique_ptr descriptorPool; std::unique_ptr descriptorSet; std::unique_ptr descriptorSetImGui; std::unique_ptr scene; std::unique_ptr mesh; std::unique_ptr commandBuffer; public: Application(); ~Application(); bool Update(); EventResult OnEvent(const Event& event) override; private: void InitializeFrameBuffer(); void InitializeScene(); void InitializeTextureSampler(); void InitializeDescriptorSets(); void InitializeGraphicsPipeline(); void InitializeMesh(); void InitializeCommandBuffer(); void RecordCommandBuffer(); void UpdateUniformBuffer(); }; }