use tiling instead use_optimal/use_linear
This commit is contained in:
parent
33a6f3f6e4
commit
a3ce45ffa8
@ -107,27 +107,27 @@ public: //Image
|
||||
|
||||
public: //Texture
|
||||
|
||||
Texture2D *CreateTexture2D(Memory *mem,VkImage image,ImageView *image_view,VkImageLayout image_layout,bool linear);
|
||||
Texture2D *CreateTexture2D(VkFormat format,uint32_t width,uint32_t height,VkImageAspectFlagBits aspectMask,VkImage image,VkImageLayout image_layout,bool linear=false);
|
||||
Texture2D *CreateTexture2D(Memory *mem,VkImage image,ImageView *image_view,VkImageLayout image_layout,VkImageTiling tiling);
|
||||
Texture2D *CreateTexture2D(VkFormat format,uint32_t width,uint32_t height,VkImageAspectFlagBits aspectMask,VkImage image,VkImageLayout image_layout,VkImageTiling tiling=VK_IMAGE_TILING_OPTIMAL);
|
||||
|
||||
Texture2D *CreateTexture2D(const VkFormat format,uint32_t width,uint32_t height,const VkImageAspectFlags aspectMask,const uint usage,const VkImageLayout image_layout,bool linear=false);
|
||||
Texture2D *CreateTexture2D(const VkFormat format,uint32_t width,uint32_t height,const VkImageAspectFlags aspectMask,const uint usage,const VkImageLayout image_layout,VkImageTiling tiling=VK_IMAGE_TILING_OPTIMAL);
|
||||
|
||||
Texture2D *CreateTexture2DColor(const VkFormat video_format,uint32_t width,uint32_t height,bool linear=false)
|
||||
Texture2D *CreateTexture2DColor(const VkFormat video_format,uint32_t width,uint32_t height,const VkImageTiling tiling=VK_IMAGE_TILING_OPTIMAL)
|
||||
{
|
||||
return CreateTexture2D(video_format,width,height,
|
||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_SAMPLED_BIT,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
linear);
|
||||
(tiling==VK_IMAGE_TILING_OPTIMAL?VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:VK_IMAGE_LAYOUT_GENERAL),
|
||||
tiling);
|
||||
}
|
||||
|
||||
Texture2D *CreateTexture2DDepth(const VkFormat video_format,uint32_t width,uint32_t height,bool linear=false)
|
||||
Texture2D *CreateTexture2DDepth(const VkFormat video_format,uint32_t width,uint32_t height,const VkImageTiling tiling=VK_IMAGE_TILING_OPTIMAL)
|
||||
{
|
||||
return CreateTexture2D(video_format,width,height,
|
||||
VK_IMAGE_ASPECT_DEPTH_BIT,
|
||||
VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_SAMPLED_BIT,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
linear);
|
||||
(tiling==VK_IMAGE_TILING_OPTIMAL?VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:VK_IMAGE_LAYOUT_GENERAL),
|
||||
tiling);
|
||||
}
|
||||
|
||||
Texture2D *CreateAttachmentTexture(const VkFormat video_format,uint32_t width,uint32_t height,const VkImageAspectFlags aspectMask,const uint usage,const VkImageLayout image_layout)
|
||||
@ -155,13 +155,13 @@ public: //Texture
|
||||
const VkImageAspectFlags aspectMask =VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
const uint usage =VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_SAMPLED_BIT,
|
||||
const VkImageLayout image_layout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
const bool linear =false);
|
||||
const VkImageTiling tiling =VK_IMAGE_TILING_OPTIMAL);
|
||||
|
||||
Texture2D *CreateTexture2D( const VkFormat video_format,void *data,uint32_t width,uint32_t height,uint32_t size,
|
||||
const VkImageAspectFlags aspectMask =VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
const uint usage =VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_SAMPLED_BIT,
|
||||
const VkImageLayout image_layout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
const bool linear =false);
|
||||
const VkImageTiling tiling =VK_IMAGE_TILING_OPTIMAL);
|
||||
|
||||
bool ChangeTexture2D(Texture2D *,Buffer *buf,uint32_t left,uint32_t top,uint32_t width,uint32_t height);
|
||||
bool ChangeTexture2D(Texture2D *,void *data,uint32_t left,uint32_t top,uint32_t width,uint32_t height,uint32_t size);
|
||||
|
@ -12,7 +12,7 @@ struct TextureData
|
||||
VkImageLayout image_layout=VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
ImageView * image_view =nullptr;
|
||||
uint32 mip_levels =0;
|
||||
bool linear =false;
|
||||
VkImageTiling tiling =VK_IMAGE_TILING_OPTIMAL;
|
||||
};//struct TextureData
|
||||
|
||||
class Texture
|
||||
@ -35,7 +35,8 @@ public:
|
||||
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 bool IsOptimal ()const{return data?data->tiling==VK_IMAGE_TILING_OPTIMAL:false;}
|
||||
const bool IsLinear ()const{return data?data->tiling==VK_IMAGE_TILING_LINEAR:false;}
|
||||
|
||||
const VkFormat GetFormat ()const{return data?data->image_view->GetFormat():VK_FORMAT_UNDEFINED;}
|
||||
const VkImageAspectFlags GetAspect ()const{return data?data->image_view->GetAspectFlags():0;}
|
||||
|
@ -99,7 +99,7 @@ namespace
|
||||
#pragma pack(pop)
|
||||
}//namespace
|
||||
|
||||
Texture2D *CreateTextureFromFile(Device *device,const OSString &filename,bool use_optimar)
|
||||
Texture2D *CreateTextureFromFile(Device *device,const OSString &filename)
|
||||
{
|
||||
if(!device)
|
||||
return(nullptr);
|
||||
@ -139,7 +139,6 @@ Texture2D *CreateTextureFromFile(Device *device,const OSString &filename,bool us
|
||||
if(file_length<sizeof(Tex2DFileHeader)+total_bytes)
|
||||
return(nullptr);
|
||||
|
||||
if(use_optimar)
|
||||
{
|
||||
vulkan::Buffer *buf=device->CreateBuffer(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,total_bytes);
|
||||
|
||||
@ -157,9 +156,5 @@ Texture2D *CreateTextureFromFile(Device *device,const OSString &filename,bool us
|
||||
delete buf;
|
||||
return tex;
|
||||
}
|
||||
else
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
VK_NAMESPACE_END
|
||||
|
@ -20,7 +20,7 @@ namespace
|
||||
}
|
||||
}//namespace
|
||||
|
||||
Texture2D *Device::CreateTexture2D(Memory *mem,VkImage image,ImageView *image_view,VkImageLayout image_layout,bool linear)
|
||||
Texture2D *Device::CreateTexture2D(Memory *mem,VkImage image,ImageView *image_view,VkImageLayout image_layout,VkImageTiling tiling)
|
||||
{
|
||||
TextureData *tex_data=new TextureData;
|
||||
|
||||
@ -30,50 +30,39 @@ Texture2D *Device::CreateTexture2D(Memory *mem,VkImage image,ImageView *image_vi
|
||||
tex_data->image_view = image_view;
|
||||
|
||||
tex_data->mip_levels = 0;
|
||||
tex_data->linear = linear;
|
||||
tex_data->tiling = tiling;
|
||||
|
||||
return(new Texture2D(attr->device,tex_data));
|
||||
}
|
||||
|
||||
Texture2D *Device::CreateTexture2D(VkFormat format,uint32_t width,uint32_t height,VkImageAspectFlagBits aspectMask,VkImage image,VkImageLayout image_layout,bool linear)
|
||||
Texture2D *Device::CreateTexture2D(VkFormat format,uint32_t width,uint32_t height,VkImageAspectFlagBits aspectMask,VkImage image,VkImageLayout image_layout,VkImageTiling tiling)
|
||||
{
|
||||
VkExtent3D extent={width,height,1};
|
||||
|
||||
ImageView *iv=CreateImageView(attr->device,VK_IMAGE_VIEW_TYPE_2D,format,extent,aspectMask,image);
|
||||
|
||||
return this->CreateTexture2D(nullptr,image,iv,image_layout,false);
|
||||
return this->CreateTexture2D(nullptr,image,iv,image_layout,tiling);
|
||||
}
|
||||
|
||||
Texture2D *Device::CreateTexture2D(const VkFormat format,uint32_t width,uint32_t height,const VkImageAspectFlags aspectMask,const uint usage,const VkImageLayout image_layout,bool linear)
|
||||
Texture2D *Device::CreateTexture2D(const VkFormat format,uint32_t width,uint32_t height,const VkImageAspectFlags aspectMask,const uint usage,const VkImageLayout image_layout,VkImageTiling tiling)
|
||||
{
|
||||
const VkFormatProperties fp=attr->physical_device->GetFormatProperties(format);
|
||||
|
||||
enum VkImageTiling tiling;
|
||||
|
||||
if(linear)
|
||||
{
|
||||
if(fp.linearTilingFeatures&VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
|
||||
tiling=VK_IMAGE_TILING_LINEAR;
|
||||
else
|
||||
return(nullptr);
|
||||
}
|
||||
else
|
||||
if(tiling==VK_IMAGE_TILING_OPTIMAL)
|
||||
{
|
||||
if(fp.optimalTilingFeatures&VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
|
||||
{
|
||||
tiling=VK_IMAGE_TILING_OPTIMAL;
|
||||
}
|
||||
else
|
||||
tiling=VK_IMAGE_TILING_LINEAR;
|
||||
}
|
||||
|
||||
if(tiling==VK_IMAGE_TILING_LINEAR)
|
||||
{
|
||||
if(fp.linearTilingFeatures&VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
|
||||
{
|
||||
tiling=VK_IMAGE_TILING_LINEAR;
|
||||
linear=true;
|
||||
}
|
||||
else
|
||||
return(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
VkImage img=CreateImage(format,width,height,usage,tiling);
|
||||
|
||||
@ -92,14 +81,14 @@ Texture2D *Device::CreateTexture2D(const VkFormat format,uint32_t width,uint32_t
|
||||
|
||||
ImageView *iv=CreateImageView2D(attr->device,format,ext,aspectMask,img);
|
||||
|
||||
return CreateTexture2D(mem,img,iv,image_layout,linear);
|
||||
return CreateTexture2D(mem,img,iv,image_layout,tiling);
|
||||
}
|
||||
|
||||
Texture2D *Device::CreateTexture2D(const VkFormat format,Buffer *buf,uint32_t width,uint32_t height,const VkImageAspectFlags aspectMask,const uint usage,const VkImageLayout image_layout,const bool linear)
|
||||
Texture2D *Device::CreateTexture2D(const VkFormat format,Buffer *buf,uint32_t width,uint32_t height,const VkImageAspectFlags aspectMask,const uint usage,const VkImageLayout image_layout,const VkImageTiling tiling)
|
||||
{
|
||||
if(!buf)return(nullptr);
|
||||
|
||||
Texture2D *tex=CreateTexture2D(format,width,height,aspectMask,usage,image_layout,false);
|
||||
Texture2D *tex=CreateTexture2D(format,width,height,aspectMask,usage,image_layout,tiling);
|
||||
|
||||
if(!tex)return(nullptr);
|
||||
|
||||
@ -108,13 +97,13 @@ Texture2D *Device::CreateTexture2D(const VkFormat format,Buffer *buf,uint32_t wi
|
||||
return(tex);
|
||||
}
|
||||
|
||||
Texture2D *Device::CreateTexture2D(const VkFormat format,void *data,uint32_t width,uint32_t height,uint32_t size,const VkImageAspectFlags aspectMask,const uint usage,const VkImageLayout image_layout,const bool linear)
|
||||
Texture2D *Device::CreateTexture2D(const VkFormat format,void *data,uint32_t width,uint32_t height,uint32_t size,const VkImageAspectFlags aspectMask,const uint usage,const VkImageLayout image_layout,const VkImageTiling tiling)
|
||||
{
|
||||
Buffer *buf=CreateBuffer(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,size,data);
|
||||
|
||||
if(!buf)return(nullptr);
|
||||
|
||||
Texture2D *tex=CreateTexture2D(format,buf,width,height,aspectMask,image_layout,linear);
|
||||
Texture2D *tex=CreateTexture2D(format,buf,width,height,aspectMask,image_layout,tiling);
|
||||
|
||||
delete buf;
|
||||
return(tex);
|
||||
|
Loading…
x
Reference in New Issue
Block a user