VulkanEngine 0.1
Graphics engine using Vulkan
Loading...
Searching...
No Matches
Image.h
1// Copyright (c) 2024 Michael Carlie. All Rights Reserved.
2//
3// This software is released under the MIT License.
4// https://opensource.org/licenses/MIT
5
6#ifndef INCLUDE_VULKANENGINE_IMAGE_H_
7#define INCLUDE_VULKANENGINE_IMAGE_H_
8
9#include <VulkanEngine/ImageBase.h>
10#include <VulkanEngine/StagedBufferDestination.h>
11
12#ifdef __clang__
13#pragma clang diagnostic push
14#pragma clang diagnostic ignored "-Wnullability-completeness"
15#endif
16#include <vk_mem_alloc.h>
17#ifdef __clang__
18#pragma clang diagnostic pop
19#endif
20
21namespace VulkanEngine {
22
29template <vk::Format format, vk::ImageType image_type, vk::ImageTiling tiling,
30 vk::SampleCountFlagBits // NOLINT(whitespace/indent_namespace)
31 sample_count_flags> // NOLINT(whitespace/indent_namespace)
32class Image : public StagedBufferDestination, public ImageBase {
33 public:
42 Image(vk::ImageLayout initial_layout, vk::ImageUsageFlags usage_flags,
43 VmaMemoryUsage vma_memory_usage, uint32_t _width, uint32_t _height,
44 uint32_t _depth, size_t pixel_size, bool generate_mip_maps);
45
47 virtual ~Image();
48
51 void setImageData(const void* data);
52
56 void createImageView(vk::ImageViewType image_view_type,
57 vk::ImageAspectFlags image_aspect_flags);
58
64 void transitionImageLayout(vk::ImageLayout new_layout,
65 const vk::CommandBuffer& command_buffer = nullptr);
66
68 const vk::Format getVkFormat() const;
69
71 const vk::SampleCountFlagBits getVkSampleCountFlags() const;
72
74 virtual vk::Image getVkImage() const;
75
77 virtual vk::ImageView getVkImageView() const;
78
79 protected:
83 virtual void insertTransferCommand(const vk::CommandBuffer& command_buffer,
84 const vk::Buffer& source_buffer);
85
87 virtual size_t getStagingBufferSize() const;
88
89 private:
94 void createImage(vk::ImageUsageFlags usage_flags, VmaMemoryUsage vma_usage);
95
99 void generateMipmaps(const vk::CommandBuffer& command_buffer);
100
101 protected:
103 uint32_t width;
104
106 uint32_t height;
107
109 uint32_t depth;
110
112 size_t data_size;
113
116
118 vk::ImageLayout vk_image_layout;
119
121 vk::Image vk_image;
122
124 vk::ImageView vk_image_view;
125
127 VkImageCreateInfo image_create_info;
128};
129
130} // namespace VulkanEngine
131
132#include <Image.cpp> // NOLINT(build/include)
133
134#endif // INCLUDE_VULKANENGINE_IMAGE_H_
Base class for image types.
Definition: ImageBase.h:14
Definition: Image.h:32
uint32_t mipmap_levels
The number of mipmap images to generate.
Definition: Image.h:115
vk::ImageView vk_image_view
The vk::ImageView created in createImageView().
Definition: Image.h:124
virtual size_t getStagingBufferSize() const
Definition: Image.cpp:251
void transitionImageLayout(vk::ImageLayout new_layout, const vk::CommandBuffer &command_buffer=nullptr)
Definition: Image.cpp:96
size_t data_size
The total size of Image's data.
Definition: Image.h:112
VkImageCreateInfo image_create_info
VkImageCreateInfo.
Definition: Image.h:127
void setImageData(const void *data)
Definition: Image.cpp:63
uint32_t height
The height of the Image.
Definition: Image.h:106
vk::Image vk_image
Internal vk_image.
Definition: Image.h:121
vk::ImageLayout vk_image_layout
The current vk::ImageLayout.
Definition: Image.h:118
const vk::Format getVkFormat() const
Get the vk::Format of the image.
Definition: Image.cpp:184
virtual vk::ImageView getVkImageView() const
Get the vk::ImageView.
Definition: Image.cpp:206
void createImageView(vk::ImageViewType image_view_type, vk::ImageAspectFlags image_aspect_flags)
Definition: Image.cpp:70
const vk::SampleCountFlagBits getVkSampleCountFlags() const
Get vk::SampleCountFlagBits.
Definition: Image.cpp:192
virtual ~Image()
Destructor.
Definition: Image.cpp:53
uint32_t depth
The depth of the Image.
Definition: Image.h:109
virtual vk::Image getVkImage() const
Get the interal vulkan image.
Definition: Image.cpp:199
uint32_t width
The width of the Image.
Definition: Image.h:103
virtual void insertTransferCommand(const vk::CommandBuffer &command_buffer, const vk::Buffer &source_buffer)
Definition: Image.cpp:213
Definition: StagedBufferDestination.h:19
TODO development of this class is in progress.
Definition: Attribute.h:13