wren
Vulkan-based game engine
Loading...
Searching...
No Matches
graphics_context.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <vk_mem_alloc.h>
4
5#include <tl/expected.hpp>
6#include <vulkan/vulkan.hpp>
7#include <vulkan/vulkan_handles.hpp>
8
10#include "wren/utils/queue.hpp"
11#include "wren/utils/vulkan.hpp"
12
13namespace wren {
14
16 public:
17 static auto Create(
18 const std::string &application_name,
19 const std::vector<std::string_view> &requested_extensions = {},
20 const std::vector<std::string_view> &requested_layers = {})
21 -> expected<std::shared_ptr<GraphicsContext>>;
22
25 auto operator=(const GraphicsContext &) = delete;
26 auto operator=(GraphicsContext &&) = delete;
28
30
31 [[nodiscard]] auto Instance() const { return instance; }
32 void Surface(const ::vk::SurfaceKHR &surface) { this->surface = surface; }
33 [[nodiscard]] auto Surface() const -> ::vk::SurfaceKHR { return surface; }
34
35 [[nodiscard]] auto PhysicalDevice() const -> ::vk::PhysicalDevice {
36 return physical_device;
37 }
38
39 [[nodiscard]] auto Device() const -> const vulkan::Device & { return device; }
40
41 [[nodiscard]] auto allocator() const { return allocator_; }
42
44
46 return vulkan::get_swapchain_support_details(physical_device, surface);
47 }
48
50 return vulkan::Queue::find_queue_family_indices(physical_device, surface);
51 }
52
53 private:
54 GraphicsContext() = default;
55
56 auto CreateInstance(
57 const std::string &application_name,
58 const std::vector<std::string_view> &requested_extensions = {},
59 const std::vector<std::string_view> &requested_layers = {})
60 -> expected<void>;
61
62 auto CreateAllocator() -> expected<void>;
63
64 auto CreateDevice() -> expected<void>;
65 auto PickPhysicalDevice() -> expected<void>;
66 auto IsDeviceSuitable(const ::vk::PhysicalDevice &device) -> bool;
67
68 ::vk::Instance instance;
69 ::vk::PhysicalDevice physical_device;
70
71 vulkan::Device device;
72
73 ::vk::SurfaceKHR surface;
74
75 VmaAllocator allocator_{};
76
77#ifdef WREN_DEBUG
78 auto CreateDebugMessenger() -> expected<void>;
79 ::vk::DebugUtilsMessengerEXT debug_messenger;
80#endif
81};
82
83} // namespace wren
Definition graphics_context.hpp:15
static auto Create(const std::string &application_name, const std::vector< std::string_view > &requested_extensions={}, const std::vector< std::string_view > &requested_layers={}) -> expected< std::shared_ptr< GraphicsContext > >
Definition graphics_context.cpp:21
auto operator=(GraphicsContext &&)=delete
auto Surface() const -> ::vk::SurfaceKHR
Definition graphics_context.hpp:33
auto FindQueueFamilyIndices()
Definition graphics_context.hpp:49
auto operator=(const GraphicsContext &)=delete
auto PhysicalDevice() const -> ::vk::PhysicalDevice
Definition graphics_context.hpp:35
GraphicsContext(GraphicsContext &&)=delete
auto SetupDevice() -> expected< void >
Definition graphics_context.cpp:125
auto GetSwapchainSupport()
Definition graphics_context.hpp:45
~GraphicsContext()
Definition graphics_context.cpp:50
auto allocator() const
Definition graphics_context.hpp:41
GraphicsContext(const GraphicsContext &)=delete
void Surface(const ::vk::SurfaceKHR &surface)
Definition graphics_context.hpp:32
auto Device() const -> const vulkan::Device &
Definition graphics_context.hpp:39
auto InitializeSurface() -> expected< void >
auto Instance() const
Definition graphics_context.hpp:31
static auto find_queue_family_indices(const ::vk::PhysicalDevice &physical_device, const std::optional<::vk::SurfaceKHR > &surface={}) -> expected< QueueFamilyIndices >
Definition queue.cpp:13
Definition ui.hpp:5
auto get_swapchain_support_details(const ::vk::PhysicalDevice &physical_device, const ::vk::SurfaceKHR &surface) -> expected< SwapchainSupportDetails >
Definition vulkan.cpp:78
Definition editor.hpp:14
tl::expected< T, Err > expected
Definition errors.hpp:49