64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
#pragma once
|
|
#include "../Renderer.hpp"
|
|
#include "forward.hpp"
|
|
|
|
namespace render::vk {
|
|
class Allocator;
|
|
class SwapChain;
|
|
class Pipeline;
|
|
class CommandCenter;
|
|
|
|
/// Vulkan rendering
|
|
class Renderer final: public render::Renderer {
|
|
public:
|
|
virtual ~Renderer();
|
|
|
|
static bool Load(Window& window, const renderOptions& options);
|
|
|
|
void loadUI(Window &) override;
|
|
|
|
static _FORCE_INLINE_ Renderer *Get() { return static_cast<Renderer*>(render::Renderer::Get()); }
|
|
|
|
void beginFrame() override;
|
|
std::function<buffer::params(glm::mat4)> beginWorldPass() override;
|
|
std::function<buffer::params(const std::vector<glm::mat4> &)> beginEntityPass() override;
|
|
size_t drawIndicatorCube(glm::mat4 model) override;
|
|
void endPass() override;
|
|
void swapBuffer(Window&) override;
|
|
|
|
void setClearColor(glm::vec4) override;
|
|
void setCurvature(glm::vec4, float) override;
|
|
|
|
/// Apply camera matrices
|
|
void lookFrom(const Camera &) override;
|
|
void reloadShaders(const passOptions &) override;
|
|
void reloadTextures(const std::string &, float mipMapLOD, float anisotropy) override;
|
|
|
|
void setResized() { framebufferResized = true; }
|
|
|
|
private:
|
|
Renderer(VkInstance, VkDevice, const PhysicalDeviceInfo &, const renderOptions &);
|
|
|
|
renderOptions options;
|
|
|
|
VkInstance instance;
|
|
VkSurfaceKHR surface;
|
|
VkDevice device;
|
|
|
|
std::unique_ptr<PhysicalDeviceInfo> physicalInfo;
|
|
std::unique_ptr<Allocator> allocator;
|
|
std::unique_ptr<SwapChain> swapChain;
|
|
std::unique_ptr<Pipeline> pipeline;
|
|
std::unique_ptr<CommandCenter> commandCenter;
|
|
|
|
size_t currentFrame = 0;
|
|
uint32_t currentImage = UINT32_MAX;
|
|
std::vector<VkSemaphore> imageAvailableSemaphores;
|
|
std::vector<VkSemaphore> renderFinishedSemaphores;
|
|
std::vector<VkFence> inFlightFences;
|
|
|
|
bool framebufferResized = false;
|
|
void recreateSwapChain();
|
|
void destroySwapChain();
|
|
};
|
|
} |