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.
graphite/engine/renderer/include/renderer.hpp

133 lines
2.3 KiB
C++
Raw Normal View History

2024-01-03 16:05:02 -05:00
#pragma once
#include <vector>
#include <functional>
#include <map>
#include <memory>
#include <renderer.hpp>
#include <vk.hpp>
#include <module.hpp>
#include "drawlist.hpp"
struct VulkanMesh
{
VkBuffer vertexBuffer;
VkDeviceMemory vertexBufferMemory;
VkBuffer indexBuffer;
VkDeviceMemory indexBufferMemory;
};
struct VulkanTexture
{
VkImage image;
VkDeviceMemory memory;
VkImageView view;
VkSampler sampler;
};
struct VulkanCubemap
{
};
namespace ResourceLimits
{
constexpr size_t maxLights = 35;
constexpr size_t maxDynamicGeometry = 100;
};
struct RequestedFeatures
{
bool debugPass = false;
bool imgui = false;
bool autoload = false;
};
struct RuntimeOptions
{
bool vsync = false;
};
class Pipeline;
class ImGuiWrapper;
class Mesh;
class Texture;
class Cubemap;
class Engine;
class Renderer
{
public:
Renderer(Engine* engine, RequestedFeatures features);
~Renderer();
void NewFrame();
void Draw();
void Resized();
void ChangeOptions(RuntimeOptions);
DrawList& GetDrawList()
{
return m_drawList;
}
//renderer resource operations
void SynthesizeMesh(Mesh* mesh);
void ReleaseMesh(Mesh* mesh);
VulkanMesh GetMesh(Mesh* mesh);
void SynthesizeTexture(Texture* texture);
void ReleaseTexture(Texture* texture);
VulkanTexture GetTexture(Texture* texture);
void SynthesizeCubemap(Cubemap* cubemap) {}
void ReleaseCubemap(Cubemap* cubemap) {}
VulkanCubemap GetTexture(Cubemap* cubemap) {}
void PrepareFrame();
void SubmitFrame();
vk::Instance instance;
VkSurfaceKHR surface;
vk::Device device;
VkSwapchainKHR swapchain;
VkExtent2D swapchainExtent;
VkFormat swapchainImageFormat;
std::vector<VkImage> swapchainImages;
std::vector<VkImageView> swapchainImageViews;
Pipeline* pipeline;
std::vector<VkCommandBuffer> commandBuffers;
VkSemaphore imageAvailableSemaphore;
VkFence submitFence;
std::function<void()> onRender;
std::function<void(VkCommandBuffer)> onRenderPassEnd;
uint32_t imageIndex;
private:
void CreateSwapchain();
void AllocateCommandBuffers();
DrawList m_drawList;
Engine* m_engine;
ImGuiWrapper* m_imWrapper;
std::map<Mesh*, VulkanMesh> m_vulkanMeshes;
std::map<Texture*, VulkanTexture> m_vulkanTextures;
};