Archived
1
Fork 0
This repository has been archived on 2025-04-12. You can view files and clone it, but cannot push or open issues or pull requests.
graph/include/renderer.h

116 lines
2.8 KiB
C++

#pragma once
#include <vulkan/vulkan.h>
#include "worldpass.h"
#include "postpass.h"
struct RenderTarget {
VkSurfaceKHR surface = nullptr;
VkSwapchainKHR swapchain = nullptr;
VkExtent2D extent = {};
uint32_t numImages = 0, currentImage = 0;
VkImage* swapchainImages = nullptr;
VkImageView* swapchainImageViews = nullptr;
VkFramebuffer* swapchainFramebuffers = nullptr;
VkImage* offscreenColorImages = nullptr;
VkDeviceMemory* offscreenColorMemory = nullptr;
VkImageView* offscreenColorImageViews = nullptr;
VkImage* offscreenDepthImages = nullptr;
VkDeviceMemory* offscreenDepthMemory = nullptr;
VkImageView* offscreenDepthImageViews = nullptr;
VkFramebuffer* offscreenFramebuffers = nullptr;
VkCommandBuffer* commandBuffers = nullptr;
VkSemaphore imageAvailableSemaphore = nullptr;
VkSemaphore renderFinishedSemaphore = nullptr;
VkFence* fences = nullptr;
VkDescriptorSet* postSets = nullptr;
};
class World;
class Mesh;
class Renderer {
public:
Renderer();
~Renderer();
void render(World& world, RenderTarget* target);
RenderTarget* createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTarget* oldRenderTarget = nullptr);
void destroyRenderTarget(RenderTarget* target);
void takeScreenshot(RenderTarget* target);
VkShaderModule createShader(const char* path);
uint32_t findMemoryType(const uint32_t typeFilter, const VkMemoryPropertyFlags properties);
void fillMeshBuffers(Mesh* mesh);
void destroyMeshBuffers(Mesh* mesh);
VkInstance getInstance() const {
return instance_;
}
VkDevice getDevice() const {
return device_;
}
VkRenderPass getRenderPass() const {
return presentationRenderPass_;
}
VkDescriptorPool getDescriptorPool() const {
return descriptorPool_;
}
private:
void createInstance();
#ifdef DEBUG
void createDebugMessenger();
#endif
void createLogicalDevice();
void createCommandPool();
void createPresentationRenderPass();
void createDescriptorPool();
VkInstance instance_ = nullptr;
#ifdef DEBUG
bool enableDebug = false;
PFN_vkCreateDebugUtilsMessengerEXT createMessenger_ = nullptr;
PFN_vkDestroyDebugUtilsMessengerEXT destroyMessenger_ = nullptr;
VkDebugUtilsMessengerEXT messenger_ = nullptr;
#endif
VkPhysicalDevice physicalDevice_ = nullptr;
VkPhysicalDeviceMemoryProperties deviceMemoryProperties_ = {};
VkDevice device_ = nullptr;
struct {
uint32_t graphics = 0, presentation = 0;
} queueIndices;
VkQueue graphicsQueue_ = nullptr;
VkCommandPool commandPool_ = nullptr;
VkRenderPass presentationRenderPass_ = nullptr;
VkDescriptorPool descriptorPool_ = nullptr;
WorldPass* worldPass_ = nullptr;
PostPass* postPass_ = nullptr;
};