1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#pragma once
#include "vke.h"
#include "resource.hpp"
namespace vks
{
struct Texture : public Resource {
VkImage image = VK_NULL_HANDLE;
VkImageView view = VK_NULL_HANDLE;
VkSampler sampler = VK_NULL_HANDLE;
VkImageCreateInfo infos = {VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO};
VkImageLayout imageLayout;
VkDescriptorImageInfo descriptor;
void create (ptrVkDev _device,
VkImageType imageType, VkFormat format, uint32_t width, uint32_t height,
VkImageUsageFlags usage, VkMemoryPropertyFlags memProps = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
VkImageTiling tiling = VK_IMAGE_TILING_OPTIMAL,
uint32_t mipLevels = 1, uint32_t arrayLayers = 1,
VkImageCreateFlags flags = 0,
VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT,
VkImageLayout initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
VkSharingMode sharingMode = VK_SHARING_MODE_EXCLUSIVE);
Texture ();
Texture (ptrVkDev _device, VkFormat _format, VkImage importedImg = VK_NULL_HANDLE,
uint32_t _width = 0, uint32_t height = 0, VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT,
uint32_t mipLevels = 1, uint32_t arrayLayers = 1);
Texture (ptrVkDev _device,
VkImageType imageType, VkFormat format, uint32_t width, uint32_t height,
VkImageUsageFlags usage, VkMemoryPropertyFlags memProps = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
VkImageTiling tiling = VK_IMAGE_TILING_OPTIMAL,
uint32_t mipLevels = 1, uint32_t arrayLayers = 1,
VkImageCreateFlags flags = 0,
VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT,
VkImageLayout initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
VkSharingMode sharingMode = VK_SHARING_MODE_EXCLUSIVE);
Texture (ptrVkDev _device, VkQueue copyQueue, VkImageType imageType, VkFormat format,
std::vector<Texture> texArray, uint32_t width, uint32_t height,
VkImageUsageFlags _usage = VK_IMAGE_USAGE_SAMPLED_BIT);
/** @brief Update image descriptor from current sampler, view and image layout */
void updateDescriptor();
virtual VkWriteDescriptorSet getWriteDescriptorSet (VkDescriptorSet ds, uint32_t binding, VkDescriptorType descriptorType);
void destroy();
void setImageLayout(
VkCommandBuffer cmdbuffer,
VkImageLayout oldImageLayout,
VkImageLayout newImageLayout,
VkImageSubresourceRange subresourceRange,
VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask);
// Fixed sub resource on first mip level and layer
void setImageLayout(
VkCommandBuffer cmdbuffer,
VkImageAspectFlags aspectMask,
VkImageLayout oldImageLayout,
VkImageLayout newImageLayout,
VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask);
void copyTo (VkQueue copyQueue, unsigned char* buffer, VkDeviceSize bufferSize);
void createView (VkImageViewType viewType, VkImageAspectFlags aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
uint32_t levelCount = 1, uint32_t layerCount = 1, VkComponentMapping components =
{VK_COMPONENT_SWIZZLE_R,VK_COMPONENT_SWIZZLE_G,VK_COMPONENT_SWIZZLE_B,VK_COMPONENT_SWIZZLE_A });
void createSampler (VkFilter filter = VK_FILTER_NEAREST, VkSamplerAddressMode addressMode = VK_SAMPLER_ADDRESS_MODE_REPEAT,
VkSamplerMipmapMode mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST,
VkBorderColor borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
VkCompareOp compareOp = VK_COMPARE_OP_NEVER);
void buildMipmaps (VkQueue copyQueue, VkCommandBuffer _blitCmd = VK_NULL_HANDLE);
void loadStbLinearNoSampling (std::string filename,
ptrVkDev device,
VkImageUsageFlags imageUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
bool flipY = true);
};
}
|