File vk_renderer.hpp
File List > atlas > drivers > vulkan-cpp > vk_renderer.hpp
Go to the documentation of this file
#pragma once
#include <string>
#include <drivers/renderer_context.hpp>
#include <drivers/vulkan-cpp/vk_swapchain.hpp>
#include <drivers/vulkan-cpp/vk_command_buffer.hpp>
#include <drivers/vulkan-cpp/vk_shader_group.hpp>
#include <drivers/vulkan-cpp/vk_pipeline.hpp>
#include <vector>
#include <drivers/vulkan-cpp/mesh.hpp>
#include <drivers/vulkan-cpp/vk_uniform_buffer.hpp>
#include <vector>
#include <map>
#include <core/scene/components.hpp>
namespace atlas::vk {
class vk_renderer : public render_context {
public:
vk_renderer(const vk_swapchain& p_swapchain, const std::string& p_tag);
~vk_renderer() override = default;
private:
void start_frame(const vk_command_buffer& p_current,
const vk_swapchain& p_swapchain_handler) override;
void post_frame() override;
void background_color(const std::array<float, 4>& p_color) override;
private:
vk_swapchain m_main_swapchain{};
vk_command_buffer m_current_command_buffer{};
VkClearColorValue m_color;
vk_shader_group m_shader_group;
vk_pipeline m_main_pipeline{};
uint32_t m_image_count = 0;
// descriptors for global uniforms for global camera data
std::vector<vk_uniform_buffer> m_global_uniforms{};
descriptor_set m_global_descriptor{};
// Contain descriptor layouts that gets used by the main VkPipeline
// (graphics pipeline)
std::vector<VkDescriptorSetLayout> m_geometry_descriptor_layout;
// This is for caching any loaded mesh and only modifying this mesh if
// that entity is there. It is for this vk_renderer to manage
// std::string = the name of the entity
// mesh = corresponding to the entity that is being loaded
std::map<std::string, mesh> m_cached_meshes;
// std::string = entity name
// descriptor_set for now will represent the material descriptor set
// std::map<std::string, descriptor_set> m_geometry_descriptor;
std::map<std::string, std::map<std::string, descriptor_set>>
m_mesh_descriptors;
descriptor_set_layout m_material_descriptor_layout;
bool m_begin_initialize = true;
uint32_t m_current_frame = 0;
camera m_camera;
glm::mat4 m_model = { 1.f };
};
};