TheAtlasEngine
 
Loading...
Searching...
No Matches
vk_renderer.hpp
1#pragma once
2#include <drivers/renderer_context.hpp>
3#include <drivers/vulkan-cpp/vk_swapchain.hpp>
4#include <drivers/vulkan-cpp/mesh.hpp>
5#include <vector>
6#include <map>
7#include <string>
8#include <vulkan-cpp/uniform_buffer.hpp>
9#include <vulkan-cpp/pipeline.hpp>
10#include <vulkan-cpp/descriptor_resource.hpp>
11#include <drivers/vulkan-cpp/shader_resource_group.hpp>
12#include <vulkan-cpp/renderpass.hpp>
13#include <drivers/vulkan-cpp/uniforms.hpp>
14
15namespace atlas::vk {
42 class vk_renderer : public render_context {
43 public:
44 vk_renderer(const window_settings& p_settings,
45 uint32_t p_image_size,
46 const std::string& p_tag);
47
48 ~vk_renderer() override = default;
49
50 private:
51 void preload_assets(const VkRenderPass& p_renderpass) override;
52
53 void start_frame(const ::vk::command_buffer& p_current,
54 const window_settings& p_settings,
55 const VkRenderPass& p_renderpass,
56 const VkFramebuffer& p_framebuffer,
57 const glm::mat4& p_proj_view) override;
58 void background_color(const std::array<float, 4>& p_color) override;
59
60 void post_frame() override;
61
62 void current_scene(ref<scene>) override;
63
64 private:
65 VkDevice m_device = nullptr;
66 vk_physical_driver m_physical;
67 glm::mat4 m_proj_view;
68 VkRenderPass m_final_renderpass = nullptr;
69 window_settings m_window_extent;
70 ::vk::command_buffer m_current_command_buffer{};
71 VkClearColorValue m_color;
72
73 uint32_t m_image_count = 0;
74 shader_resource_group m_shader_group;
75 ::vk::pipeline m_main_pipeline;
76 ::vk::descriptor_resource m_global_descriptors;
77 std::vector<VkDescriptorSetLayout> m_sets_layouts;
78
79 std::map<uint32_t, mesh> m_cached_meshes;
80 ::vk::uniform_buffer m_global_uniforms;
81 ::vk::uniform_buffer m_point_light_uniforms;
82
83 // game object-specific meshes
84 std::map<uint32_t, ::vk::uniform_buffer> m_mesh_geometry_set;
85 // TODO: Make this into a material system, eventually
86 std::map<uint64_t, ::vk::uniform_buffer> m_mesh_material_set;
87 std::map<uint32_t, std::map<std::string, ::vk::descriptor_resource>>
88 m_mesh_descriptors;
89 uint32_t m_current_frame = 0;
90 glm::mat4 m_model = { 1.f };
91
92 ::vk::texture m_white_texture;
93
94 ref<scene> m_current_scene;
95 };
96};
is an interface that defines a graphics APi-agnostic renderer
Definition renderer_context.hpp:18
resource group for loading shader sources that give you back VkShaderModule handles
Definition shader_resource_group.hpp:21
vulkan-specific implementation wrapper around VkPhysicalDevice
Definition vk_physical_driver.hpp:23
Something to consider for mesh loading.
Definition vk_renderer.hpp:42
settings for specification for atlas::window
Definition types.hpp:9