Lluvia
ImageLayout.h
Go to the documentation of this file.
1 
8 #ifndef LLUVIA_CORE_IMAGE_IMAGE_LAYOUT_H_
9 #define LLUVIA_CORE_IMAGE_IMAGE_LAYOUT_H_
10 
13 
14 namespace ll {
15 
16 enum class ImageLayout : ll::enum_t {
17  Undefined = static_cast<ll::enum_t>(vk::ImageLayout::eUndefined),
18  General = static_cast<ll::enum_t>(vk::ImageLayout::eGeneral),
19  ShaderReadOnlyOptimal = static_cast<ll::enum_t>(vk::ImageLayout::eShaderReadOnlyOptimal),
20  TransferSrcOptimal = static_cast<ll::enum_t>(vk::ImageLayout::eTransferSrcOptimal),
21  TransferDstOptimal = static_cast<ll::enum_t>(vk::ImageLayout::eTransferDstOptimal),
22  Preinitialized = static_cast<ll::enum_t>(vk::ImageLayout::ePreinitialized),
23 };
24 
25 namespace impl {
26 
27  constexpr ll::ImageLayout fromVkImageLayout(const vk::ImageLayout& flags) noexcept
28  {
29  return ll::ImageLayout {static_cast<ll::enum_t>(flags)};
30  }
31 
32  constexpr vk::ImageLayout toVkImageLayout(const ll::ImageLayout& flags) noexcept
33  {
34  // return vk::ImageLayout{static_cast<VkFlags>(flags)};
35  return static_cast<vk::ImageLayout>(flags);
36  }
37 
38  constexpr const std::array<std::tuple<const char*, ll::ImageLayout>, 6> ImageLayoutStrings {{std::make_tuple("Undefined", ll::ImageLayout::Undefined),
39  std::make_tuple("General", ll::ImageLayout::General),
40  std::make_tuple("ShaderReadOnlyOptimal", ll::ImageLayout::ShaderReadOnlyOptimal),
41  std::make_tuple("TransferSrcOptimal", ll::ImageLayout::TransferSrcOptimal),
42  std::make_tuple("TransferDstOptimal", ll::ImageLayout::TransferDstOptimal),
43  std::make_tuple("Preinitialized", ll::ImageLayout::Preinitialized)}};
44 
45 } // namespace impl
46 
56 template <typename T = std::string>
57 inline T imageLayoutToString(ll::ImageLayout&& layout) noexcept
58 {
59  return impl::enumToString<ll::ImageLayout, ll::impl::ImageLayoutStrings.size(), ll::impl::ImageLayoutStrings>(std::forward<ll::ImageLayout>(layout));
60 }
61 
77 template <typename T>
78 inline ll::ImageLayout stringToImageLayout(T&& stringValue)
79 {
80  return impl::stringToEnum<ll::ImageLayout, T, ll::impl::ImageLayoutStrings.size(), ll::impl::ImageLayoutStrings>(std::forward<T>(stringValue));
81 }
82 
83 } // namespace ll
84 
85 #endif // LLUVIA_CORE_IMAGE_IMAGE_LAYOUT_H_
Enums.
constexpr const std::array< std::tuple< const char *, ll::ImageLayout >, 6 > ImageLayoutStrings
Definition: ImageLayout.h:38
constexpr vk::ImageLayout toVkImageLayout(const ll::ImageLayout &flags) noexcept
Definition: ImageLayout.h:32
E stringToEnum(T &&stringValue)
Definition: enums.h:172
std::string enumToString(E &&value) noexcept
Definition: enums.h:146
constexpr ll::ImageLayout fromVkImageLayout(const vk::ImageLayout &flags) noexcept
Definition: ImageLayout.h:27
Definition: Buffer.h:28
ImageLayout
Definition: ImageLayout.h:16
uint32_t enum_t
Definition: enums.h:23
ll::ImageLayout stringToImageLayout(T &&stringValue)
Converts from a string-like object to ll::ImageLayout.
Definition: ImageLayout.h:78
T imageLayoutToString(ll::ImageLayout &&layout) noexcept
Converts from vk::ImageLayout enum value to string.
Definition: ImageLayout.h:57