#pragma once #include #define VULKAN_HPP_NO_STRUCT_CONSTRUCTORS #include #include #include #include #include #include #include struct Window; struct UniformBuffer; struct VertexBuffer; struct Texture; /* Contains all of the Vulkan objects involved in rendering the scene */ struct Renderer { Renderer(Window& win); ~Renderer(); std::vector createTextures(const std::vector& names); void draw(); void present(); Window& win; vk::Instance instance; vk::PhysicalDevice phys_dev; vk::Device dev; vk::Fence render_fence; vk::Semaphore image_wait_semaphore, render_wait_semaphore; vk::SurfaceKHR surface; std::unique_ptr swapchain; int queue_family; vk::Queue queue; std::unique_ptr command_buffer; std::unique_ptr render_pass; /* For now, couple it all together as one pipeline with one uniform buffer, vertex buffer, etc */ std::unique_ptr pipeline; std::unique_ptr vertex_buffer; std::unique_ptr uniform_buffer; std::vector textures; uint32_t current_image_idx; uint64_t frame = 0; std::vector> models; std::unique_ptr ui; Camera cam {}; bool capture_mouse = false; bool flycam = false; /* time speed */ float time = 0.0; float speed = 1.0; bool running = true; };