1
Fork 0
mirror of https://github.com/redstrate/Novus.git synced 2025-05-14 12:37:46 +00:00
novus/renderer/include/rendermanager.h
Joshua Goins 93bb7fec43 Begin adding support for drawing additional objects in the renderer
This will be used in the map editor to draw where objects are. It
doesn't draw anything yet, and can't until we get LGB support in
libphysis.
2025-05-13 15:19:11 -04:00

77 lines
No EOL
1.9 KiB
C++

// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <array>
#include <map>
#include <vector>
#include <QString>
#include <glm/ext/matrix_float4x4.hpp>
#include <physis.hpp>
#include <vulkan/vulkan.h>
#include "camera.h"
#include "device.h"
#include "drawobject.h"
#include "scene.h"
class ImGuiPass;
struct ImGuiContext;
class BaseRenderer;
class RendererPass;
/// Render 3D scenes made up of FFXIV game objects
class RenderManager
{
public:
RenderManager(GameData *data);
bool initSwapchain(VkSurfaceKHR surface, int width, int height);
void resize(VkSurfaceKHR surface, int width, int height);
void destroySwapchain();
DrawObject addDrawObject(const physis_MDL &model, int lod);
void reloadDrawObject(DrawObject &model, uint32_t lod);
Texture addGameTexture(VkFormat format, physis_Texture gameTexture);
void render(const std::vector<DrawObject> &models);
VkRenderPass presentationRenderPass() const;
Camera camera;
Scene scene;
ImGuiContext *ctx = nullptr;
Device &device();
VkSampler defaultSampler();
void addPass(RendererPass *pass);
BaseRenderer *renderer();
private:
void updateCamera(Camera &camera);
void initBlitPipeline();
std::array<VkCommandBuffer, 3> m_commandBuffers;
VkRenderPass m_renderPass = VK_NULL_HANDLE;
VkPipeline m_pipeline = VK_NULL_HANDLE;
VkPipelineLayout m_pipelineLayout = VK_NULL_HANDLE;
VkDescriptorSetLayout m_setLayout = VK_NULL_HANDLE;
VkSampler m_sampler = VK_NULL_HANDLE;
VkDescriptorSet m_descriptorSet = VK_NULL_HANDLE;
std::vector<VkFramebuffer> m_framebuffers;
ImGuiPass *m_imGuiPass = nullptr;
Device *m_device = nullptr;
BaseRenderer *m_renderer = nullptr;
GameData *m_data = nullptr;
std::vector<RendererPass *> m_passes;
};