#pragma once #include #define VULKAN_HPP_NO_STRUCT_CONSTRUCTORS #include #include #include #include #include #include #include #include #include #include struct Window; struct UniformBuffer; struct Texture; /* Contains all of the Vulkan objects involved in rendering the scene */ struct Renderer { Renderer(Window& win); ~Renderer(); std::vector createResources(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; std::unique_ptr box_pipeline; std::unique_ptr> box_buffer; std::unique_ptr uniform_buffer; std::unique_ptr bsp; std::vector textures; uint32_t current_image_idx; uint64_t frame = 0; std::unique_ptr ui; Camera cam{ .pos = glm::vec3(0.0, 5.0, 0.0), }; float fps; bool in_menu = false; bool flycam = false; /* time speed */ float time = 0.0; float speed = 1.0; bool paused = false; bool visibility_testing = false; size_t n_indices; float near_plane = 2.0f; float far_plane = 10000.0f; float tess_factor = 1.8f; float tess_edge_size = 20.0f; };