ULRE/inc/hgl/graph/VKImageView.h

66 lines
2.6 KiB
C
Raw Normal View History

#ifndef HGL_GRAPH_VULKAN_IMAGE_VIEW_INCLUDE
#define HGL_GRAPH_VULKAN_IMAGE_VIEW_INCLUDE
#include<hgl/graph/VK.h>
VK_NAMESPACE_BEGIN
class ImageView
{
protected:
VkDevice device;
VkImageView image_view;
2022-01-07 11:56:32 +08:00
ImageViewCreateInfo *ivci;
VkExtent3D extent;
private:
2020-10-24 21:50:36 +08:00
friend ImageView *CreateImageView(VkDevice device,VkImageViewType type,VkFormat format,const VkExtent3D &ext,const uint32_t &miplevel,VkImageAspectFlags aspectMask,VkImage img);
2022-01-07 11:56:32 +08:00
ImageView(VkDevice dev,VkImageView iv,ImageViewCreateInfo *ci,const VkExtent3D &ext)
{
device =dev;
image_view =iv;
2022-01-07 11:56:32 +08:00
ivci =ci;
extent =ext;
}
public:
virtual ~ImageView();
operator VkImageView(){return image_view;}
public:
2022-01-07 11:56:32 +08:00
const VkImageViewType GetViewType ()const{return ivci->viewType;}
const VkFormat GetFormat ()const{return ivci->format;}
const VkExtent3D & GetExtent ()const{return extent;}
2022-01-07 11:56:32 +08:00
const VkImageAspectFlags GetAspectFlags ()const{return ivci->subresourceRange.aspectMask;}
const uint32_t GetLayerCount ()const{return ivci->subresourceRange.layerCount;}
2022-01-07 11:56:32 +08:00
const bool hasColor ()const{return ivci->subresourceRange.aspectMask&VK_IMAGE_ASPECT_COLOR_BIT;}
const bool hasDepth ()const{return ivci->subresourceRange.aspectMask&VK_IMAGE_ASPECT_DEPTH_BIT;}
const bool hasStencil ()const{return ivci->subresourceRange.aspectMask&VK_IMAGE_ASPECT_STENCIL_BIT;}
const bool hasDepthStencil ()const{return ivci->subresourceRange.aspectMask&(VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT);}
};//class ImageView
2020-10-24 21:50:36 +08:00
ImageView *CreateImageView(VkDevice device,VkImageViewType type,VkFormat format,const VkExtent3D &ext,const uint32_t &miplevel,VkImageAspectFlags aspectMask,VkImage img);
2019-05-18 15:41:49 +08:00
2020-07-25 18:53:50 +08:00
#define CREATE_IMAGE_VIEW(short_name,larget_name) \
2020-10-24 21:50:36 +08:00
inline ImageView *CreateImageView##short_name(VkDevice device,VkFormat format,const VkExtent3D &ext,const uint32_t &miplevel,VkImageAspectFlags aspectMask,VkImage img=VK_NULL_HANDLE) \
2020-07-25 18:53:50 +08:00
{ \
2020-10-24 21:50:36 +08:00
return CreateImageView(device,VK_IMAGE_VIEW_TYPE_##larget_name,format,ext,miplevel,aspectMask,img); \
2020-07-25 18:53:50 +08:00
}
2019-05-18 15:41:49 +08:00
CREATE_IMAGE_VIEW(1D,1D);
CREATE_IMAGE_VIEW(2D,2D);
CREATE_IMAGE_VIEW(3D,3D);
CREATE_IMAGE_VIEW(Cube,CUBE);
CREATE_IMAGE_VIEW(1DArray,1D_ARRAY);
CREATE_IMAGE_VIEW(2DArray,2D_ARRAY);
CREATE_IMAGE_VIEW(CubeArray,CUBE_ARRAY);
#undef CREATE_IMAGE_VIEW
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_IMAGE_VIEW_INCLUDE