Toast Engine
Loading...
Searching...
No Matches
sdl_output_target.hpp
1
4
5#pragma once
6
7#include "output_target_base.hpp"
8#include "vulkan_swapchain.hpp"
9
10#include <SDL3/SDL.h>
11#include <SDL3/SDL_vulkan.h>
12#include <optional>
13#include <vector>
14
15namespace renderer {
16
17class SDLOutputTarget final : public IOutputTarget {
18public:
19 static auto getRequiredInstanceExtensions() -> std::vector<const char*>;
20 static auto getRequiredInstanceExtensions(SDL_Window* window) -> std::vector<const char*>;
21 static auto getRequiredDeviceExtensions() -> std::vector<const char*>;
22 static auto queryExtent(SDL_Window* window) -> vk::Extent2D;
23
24 SDLOutputTarget(const VulkanCore& core, SDL_Window* window, vk::Extent2D preferred_extent);
25 ~SDLOutputTarget() override = default;
26
27 SDLOutputTarget(const SDLOutputTarget&) = delete;
28 auto operator=(const SDLOutputTarget&) -> SDLOutputTarget& = delete;
29 SDLOutputTarget(SDLOutputTarget&&) = delete;
30 auto operator=(SDLOutputTarget&&) -> SDLOutputTarget& = delete;
31
32 [[nodiscard]]
33 auto getExtent() const -> vk::Extent2D override;
34 [[nodiscard]]
35 auto getColorFormat() const -> vk::Format override;
36 [[nodiscard]]
37 auto getImageCount() const -> uint32_t override;
38 [[nodiscard]]
39 auto getColorImage(uint32_t index) const -> const vk::Image& override;
40 [[nodiscard]]
41 auto getColorAttachment(uint32_t index) const -> const vk::raii::ImageView& override;
42 [[nodiscard]]
43 auto acquireNextImage(uint64_t timeout, vk::Semaphore image_available, vk::Fence in_flight_fence)
44 -> vk::ResultValue<uint32_t> override;
45 [[nodiscard]]
46 auto present(uint32_t image_index, vk::Semaphore render_finished) -> vk::Result override;
47
48 auto recordFinalize(vk::CommandBuffer command_buffer, uint32_t image_index) -> void override;
49
50 auto recreate(vk::Extent2D extent) -> void override;
51
52 [[nodiscard]]
53 auto isPresentable() const -> bool override;
54
55 [[nodiscard]]
56 auto getWindow() const -> SDL_Window*;
57
58 [[nodiscard]]
59 auto getSurface() const -> const vk::raii::SurfaceKHR&;
60
61private:
62 static auto createSurface(const VulkanCore& core, SDL_Window* window) -> vk::raii::SurfaceKHR;
63
64 const VulkanCore* m_core = nullptr;
65 SDL_Window* m_window = nullptr;
66 vk::raii::SurfaceKHR m_surface = nullptr;
67 std::optional<VulkanSwapchain> m_swapchain;
68};
69
70}
Definition output_target_base.hpp:20
Definition vulkan_core.hpp:48