#ifndef HGL_GRAPH_VULKAN_TEXTURE_INCLUDE #define HGL_GRAPH_VULKAN_TEXTURE_INCLUDE #include #include #include VK_NAMESPACE_BEGIN struct TextureData { Memory * memory =nullptr; VkImage image =VK_NULL_HANDLE; VkImageLayout image_layout=VK_IMAGE_LAYOUT_UNDEFINED; ImageView * image_view =nullptr; uint32 mip_levels =0; bool linear =false; VkFormat format =VK_FORMAT_UNDEFINED; VkImageAspectFlags aspect =0; VkExtent3D extent; };//struct TextureData class Texture { protected: VkDevice device; TextureData *data; public: TextureData * GetData (){return data;} VkDeviceMemory GetDeviceMemory (){return data?data->memory->operator VkDeviceMemory():VK_NULL_HANDLE;} VkImage GetImage (){return data?data->image:VK_NULL_HANDLE;} VkImageLayout GetImageLayout (){return data?data->image_layout:VK_IMAGE_LAYOUT_UNDEFINED;} VkImageView GetVulkanImageView (){return data?data->image_view->operator VkImageView():VK_NULL_HANDLE;} Memory * GetMemory (){return data?data->memory:nullptr;} ImageView * GetImageView (){return data?data->image_view:nullptr;} const uint32 GetMipLevels()const{return data?data->mip_levels:0;} const bool IsLinear ()const{return data?data->linear:false;} const VkFormat GetFormat ()const{return data?data->format:VK_FORMAT_UNDEFINED;} const VkImageAspectFlags GetAspect ()const{return data?data->aspect:0;} const VkExtent3D * GetExtent ()const{return data?&data->extent:nullptr;} public: Texture(VkDevice dev,TextureData *td) { device=dev; data=td; } virtual ~Texture(); };//class Texture //class Texture1D:public Texture //{ // uint32_t length; //};//class Texture1D:public Texture //class Texture1DArray:public Texture //{ // uint32_t length,count; //};//class Texture1DArray:public Texture class Texture2D:public Texture { uint32_t width,height; public: Texture2D(uint32_t w,uint32_t h,VkDevice dev,TextureData *td):width(w),height(h),Texture(dev,td){} ~Texture2D()=default; const uint32_t GetWidth()const{return width;} const uint32_t GetHeight()const{return height;} };//class Texture2D:public Texture //class Texture2DArray:public Texture //{ // uint32_t width,height,count; //};//class Texture2DArray:public Texture //class Texture3D:public Texture //{ // uint32_t width,height,depth; //};//class Texture3D:public Texture //class TextureCubemap:public Texture //{ // uint32_t width,height; //};//class TextureCubemap:public Texture //class TextureCubemapArray:public Texture //{ // uint32_t width,height,count; //};//class TextureCubemapArray:public Texture Texture2D *CreateTexture2D(VkDevice device,VkFormat format,uint32_t width,uint32_t height,VkImageAspectFlagBits aspectMask,VkImage image,VkImageLayout image_layout); Texture2D *CreateTexture2D(VkDevice device,const PhysicalDevice *pd,const VkFormat format,uint32_t width,uint32_t height,const VkImageAspectFlags aspectMask,const uint usage,const VkImageLayout image_layout,const VkImageTiling tiling); VK_NAMESPACE_END #endif//HGL_GRAPH_VULKAN_TEXTURE_INCLUDE