wren
Vulkan-based game engine
Loading...
Searching...
No Matches
renderer.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <tl/expected.hpp>
5#include <vulkan/vulkan.hpp>
6#include <vulkan/vulkan_enums.hpp>
7#include <vulkan/vulkan_structs.hpp>
8
9#include "mesh.hpp"
10#include "wren/graph.hpp"
11#include "wren/pipeline.hpp"
13
14namespace wren {
15
16struct Context;
17
18class Renderer {
19 static constexpr std::string_view SWAPCHAIN_RENDERTARGET_NAME =
20 "swapchain_target";
21
22 public:
23 static auto New(std::shared_ptr<Context> const &ctx)
25
26 void draw();
27
28 auto set_graph_builder(GraphBuilder const &builder) {
29 render_graph = builder.compile().value();
30 }
31 auto get_graph() const { return render_graph; }
32
34 return swapchain_image_views_;
35 }
36
37 auto render_targets() const { return render_targets_; }
38 auto add_target(std::string const &name,
39 std::shared_ptr<RenderTarget> const &target) {
40 render_targets_.emplace(name, target);
41 }
42
44 std::function<void(::vk::CommandBuffer &)> const &cmd_buf)
46
47 private:
48 explicit Renderer(std::shared_ptr<Context> const &ctx);
49
50 auto begin_frame() -> expected<uint32_t>;
51 void end_frame(uint32_t image_index);
52
53 auto recreate_swapchain() -> expected<void>;
54
55 auto choose_swapchain_format(
56 std::vector<::vk::SurfaceFormatKHR> const &formats)
57 -> ::vk::SurfaceFormatKHR;
58 auto choose_swapchain_presentation_mode(
59 std::vector<::vk::PresentModeKHR> const &formats)
60 -> ::vk::PresentModeKHR;
61 auto choose_swapchain_extent(
62 ::vk::SurfaceCapabilitiesKHR const &surface_capabilities)
63 -> ::vk::Extent2D;
64
65 std::unordered_map<std::string, std::shared_ptr<Pipeline>>
66 pipelines;
67 std::shared_ptr<Context> ctx_;
68 ::vk::SwapchainKHR swapchain;
69 std::vector<::vk::Image> swapchain_images;
70 std::vector<::vk::ImageView> swapchain_image_views_;
71
72 std::unordered_map<std::string, std::shared_ptr<RenderTarget>>
73 render_targets_;
74
75 ::vk::Format swapchain_image_format = ::vk::Format::eB8G8R8Srgb;
76 ::vk::Extent2D swapchain_extent;
77
78 ::vk::Semaphore image_available;
79 ::vk::Semaphore render_finished;
80 ::vk::Fence in_flight_fence;
81
82 ::vk::CommandPool command_pool_;
83 ::vk::CommandBuffer one_time_cmd_buffer;
84
85 Graph render_graph;
86
87 Mesh m;
88};
89
90} // namespace wren
Definition graph.hpp:39
auto compile() const -> expected< Graph >
Definition graph.cpp:20
Definition mesh.hpp:39
Definition renderer.hpp:18
auto submit_command_buffer(std::function< void(::vk::CommandBuffer &)> const &cmd_buf) -> expected< void >
Definition renderer.cpp:93
auto add_target(std::string const &name, std::shared_ptr< RenderTarget > const &target)
Definition renderer.hpp:38
auto render_targets() const
Definition renderer.hpp:37
void draw()
Definition renderer.cpp:20
auto swapchain_images_views() const
Definition renderer.hpp:33
static auto New(std::shared_ptr< Context > const &ctx) -> expected< std::shared_ptr< Renderer > >
Definition renderer.cpp:122
auto set_graph_builder(GraphBuilder const &builder)
Definition renderer.hpp:28
auto get_graph() const
Definition renderer.hpp:31
Definition editor.hpp:14
tl::expected< T, Err > expected
Definition errors.hpp:49
Definition graph.hpp:23