Toast Engine
Loading...
Searching...
No Matches
cubemap_target.hpp
Go to the documentation of this file.
1
6
7#pragma once
8
9#include "vulkan_common.hpp"
10
11#include <optional>
12#include <string_view>
13#include <vector>
14
15namespace renderer {
16class VulkanCore;
17
19public:
20 void create(
21 const VulkanCore& core, vk::Format format, uint32_t size, uint32_t mip_levels, std::string_view debug_name,
22 vk::ImageUsageFlags extra_usage = {}, bool with_face_views = true
23 );
24
25 void transition(vk::CommandBuffer cmd, sync::Usage next);
26
28 void setUsage(sync::Usage usage) noexcept { m_state.usage = usage; }
29
30 [[nodiscard]]
31 auto faceView(uint32_t mip, uint32_t face) const -> vk::ImageView;
32
33 [[nodiscard]]
34 auto cubeView() const -> vk::ImageView {
35 return m_cube_view.has_value() ? **m_cube_view : vk::ImageView {};
36 }
37
38 [[nodiscard]]
39 auto image() const -> vk::Image {
40 return m_image.has_value() ? **m_image : vk::Image {};
41 }
42
43 [[nodiscard]]
44 auto size() const noexcept -> uint32_t {
45 return m_size;
46 }
47
48 [[nodiscard]]
49 auto mipSize(uint32_t mip) const noexcept -> uint32_t {
50 return std::max(m_size >> mip, 1u);
51 }
52
53 [[nodiscard]]
54 auto mipLevels() const noexcept -> uint32_t {
55 return m_mip_levels;
56 }
57
58 [[nodiscard]]
59 auto usage() const noexcept -> sync::Usage {
60 return m_state.usage;
61 }
62
63 [[nodiscard]]
64 auto isReady() const noexcept -> bool {
65 return m_image.has_value() && m_cube_view.has_value();
66 }
67
68 static constexpr uint32_t k_faces = 6;
69
70private:
71 std::optional<vma::raii::Image> m_image;
72 std::optional<vk::raii::ImageView> m_cube_view;
74 std::vector<vk::raii::ImageView> m_face_views;
75
76 uint32_t m_size = 0;
77 uint32_t m_mip_levels = 1;
78 sync::ImageState m_state;
79};
80
81}
Definition cubemap_target.hpp:18
void setUsage(sync::Usage usage) noexcept
For code that transitioned the whole image itself like the vulkan_common upload helpers.
Definition cubemap_target.hpp:28
Definition vulkan_core.hpp:48
Usage
Definition gpu_sync.hpp:15