增加直接根据buffer创建纹理
This commit is contained in:
parent
2c3c5294c6
commit
b9efaff10c
@ -67,8 +67,6 @@ public:
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
const uint32_t GetSwapChainImageCount ()const {return attr->sc_texture.GetCount();}
|
const uint32_t GetSwapChainImageCount ()const {return attr->sc_texture.GetCount();}
|
||||||
//ImageView *GetColorImageView (int index) {return attr->sc_image_views[index];}
|
|
||||||
//ImageView *GetDepthImageView () {return attr->depth.view;}
|
|
||||||
|
|
||||||
RenderPass * GetRenderPass () {return main_rp;}
|
RenderPass * GetRenderPass () {return main_rp;}
|
||||||
Framebuffer * GetFramebuffer (int index) {return render_frame[index];}
|
Framebuffer * GetFramebuffer (int index) {return render_frame[index];}
|
||||||
@ -148,11 +146,17 @@ public: //material相关
|
|||||||
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Texture2D *CreateTexture2D( const VkFormat video_format,Buffer *buf,uint32_t width,uint32_t height,
|
||||||
|
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);
|
||||||
|
|
||||||
Texture2D *CreateTexture2D( const VkFormat video_format,void *data,uint32_t width,uint32_t height,uint32_t size,
|
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 VkImageAspectFlags aspectMask =VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
const uint usage =VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_SAMPLED_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 VkImageLayout image_layout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_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);
|
bool ChangeTexture2D(Texture2D *,void *data,uint32_t left,uint32_t top,uint32_t width,uint32_t height,uint32_t size);
|
||||||
Sampler *CreateSampler(VkSamplerCreateInfo *);
|
Sampler *CreateSampler(VkSamplerCreateInfo *);
|
||||||
|
|
||||||
|
@ -30,6 +30,8 @@ namespace
|
|||||||
vb.info.offset =0;
|
vb.info.offset =0;
|
||||||
vb.info.range =size;
|
vb.info.range =size;
|
||||||
|
|
||||||
|
vb.memory =dm;
|
||||||
|
|
||||||
if(!data)
|
if(!data)
|
||||||
return(true);
|
return(true);
|
||||||
|
|
||||||
|
@ -31,28 +31,39 @@ Texture2D *Device::CreateTexture2D(const VkFormat format,uint32_t width,uint32_t
|
|||||||
return VK_NAMESPACE::CreateTexture2D(attr->device,attr->physical_device,format,width,height,aspectMask,usage,image_layout,(fp.optimalTilingFeatures&VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)?VK_IMAGE_TILING_OPTIMAL:VK_IMAGE_TILING_LINEAR);
|
return VK_NAMESPACE::CreateTexture2D(attr->device,attr->physical_device,format,width,height,aspectMask,usage,image_layout,(fp.optimalTilingFeatures&VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)?VK_IMAGE_TILING_OPTIMAL:VK_IMAGE_TILING_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)
|
Texture2D *Device::CreateTexture2D(const VkFormat format,Buffer *buf,uint32_t width,uint32_t height,const VkImageAspectFlags aspectMask,const uint usage,const VkImageLayout image_layout)
|
||||||
{
|
{
|
||||||
|
if(!buf)return(nullptr);
|
||||||
|
|
||||||
Texture2D *tex=CreateTexture2D(format,width,height,aspectMask,usage,image_layout);
|
Texture2D *tex=CreateTexture2D(format,width,height,aspectMask,usage,image_layout);
|
||||||
|
|
||||||
if(!tex)return(nullptr);
|
if(!tex)return(nullptr);
|
||||||
|
|
||||||
ChangeTexture2D(tex,data,0,0,width,height,size);
|
ChangeTexture2D(tex,buf,0,0,width,height);
|
||||||
|
|
||||||
return(tex);
|
return(tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Device::ChangeTexture2D(Texture2D *tex,void *data,uint32_t left,uint32_t top,uint32_t width,uint32_t height,uint32_t size)
|
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)
|
||||||
{
|
{
|
||||||
if(!tex||!data
|
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);
|
||||||
|
|
||||||
|
delete buf;
|
||||||
|
return(tex);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Device::ChangeTexture2D(Texture2D *tex,Buffer *buf,uint32_t left,uint32_t top,uint32_t width,uint32_t height)
|
||||||
|
{
|
||||||
|
if(!tex||!buf
|
||||||
||left<0||left+width>tex->GetWidth()
|
||left<0||left+width>tex->GetWidth()
|
||||||
||top<0||top+height>tex->GetHeight()
|
||top<0||top+height>tex->GetHeight()
|
||||||
||width<=0||height<=0
|
||width<=0||height<=0)
|
||||||
||size<=0)
|
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
Buffer *buf=CreateBuffer(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,size,data);
|
|
||||||
|
|
||||||
VkBufferImageCopy buffer_image_copy;
|
VkBufferImageCopy buffer_image_copy;
|
||||||
buffer_image_copy.bufferOffset = 0;
|
buffer_image_copy.bufferOffset = 0;
|
||||||
buffer_image_copy.bufferRowLength = 0;
|
buffer_image_copy.bufferRowLength = 0;
|
||||||
@ -118,9 +129,25 @@ bool Device::ChangeTexture2D(Texture2D *tex,void *data,uint32_t left,uint32_t to
|
|||||||
texture_cmd_buf->End();
|
texture_cmd_buf->End();
|
||||||
|
|
||||||
SubmitTexture(*texture_cmd_buf);
|
SubmitTexture(*texture_cmd_buf);
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Device::ChangeTexture2D(Texture2D *tex,void *data,uint32_t left,uint32_t top,uint32_t width,uint32_t height,uint32_t size)
|
||||||
|
{
|
||||||
|
if(!tex||!data
|
||||||
|
||left<0||left+width>tex->GetWidth()
|
||||||
|
||top<0||top+height>tex->GetHeight()
|
||||||
|
||width<=0||height<=0
|
||||||
|
||size<=0)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
Buffer *buf=CreateBuffer(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,size,data);
|
||||||
|
|
||||||
|
bool result=ChangeTexture2D(tex,buf,left,top,width,height);
|
||||||
|
|
||||||
delete buf;
|
delete buf;
|
||||||
return(true);
|
|
||||||
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Device::SubmitTexture(const VkCommandBuffer *cmd_bufs,const uint32_t count)
|
bool Device::SubmitTexture(const VkCommandBuffer *cmd_bufs,const uint32_t count)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user