add new create function of Framebuffer
This commit is contained in:
parent
9b6ea20cca
commit
8fc19e802d
2
CMCore
2
CMCore
@ -1 +1 @@
|
|||||||
Subproject commit 0c045fb8b1ce2588876c433fbd72e457bd23d2df
|
Subproject commit 1f1d1b80350a40bfeaf50ab6cf8c6be8a613c374
|
@ -236,7 +236,7 @@ public:
|
|||||||
|
|
||||||
int AcquireNextImage()
|
int AcquireNextImage()
|
||||||
{
|
{
|
||||||
return sc_render_target->AcquireNextImage(present_complete_semaphore);
|
return sc_render_target->AcquireNextImage(*present_complete_semaphore);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void SubmitDraw(int index)
|
virtual void SubmitDraw(int index)
|
||||||
@ -244,7 +244,7 @@ public:
|
|||||||
VkCommandBuffer cb=*cmd_buf[index];
|
VkCommandBuffer cb=*cmd_buf[index];
|
||||||
|
|
||||||
sc_render_target->Submit(cb,present_complete_semaphore,render_complete_semaphore);
|
sc_render_target->Submit(cb,present_complete_semaphore,render_complete_semaphore);
|
||||||
sc_render_target->PresentBackbuffer(render_complete_semaphore);
|
sc_render_target->PresentBackbuffer(*render_complete_semaphore);
|
||||||
sc_render_target->Wait();
|
sc_render_target->Wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,7 +266,7 @@ public: //Command Buffer 相关
|
|||||||
public: //FrameBuffer相关
|
public: //FrameBuffer相关
|
||||||
|
|
||||||
Framebuffer *CreateFramebuffer(RenderPass *rp,ImageView **color_list,const uint color_count,ImageView *depth);
|
Framebuffer *CreateFramebuffer(RenderPass *rp,ImageView **color_list,const uint color_count,ImageView *depth);
|
||||||
Framebuffer *CreateFramebuffer(RenderPass *,List<ImageView *> &color,ImageView *depth);
|
// Framebuffer *CreateFramebuffer(RenderPass *,List<ImageView *> &color,ImageView *depth);
|
||||||
Framebuffer *CreateFramebuffer(RenderPass *,ImageView *color,ImageView *depth);
|
Framebuffer *CreateFramebuffer(RenderPass *,ImageView *color,ImageView *depth);
|
||||||
Framebuffer *CreateFramebuffer(RenderPass *,ImageView *);
|
Framebuffer *CreateFramebuffer(RenderPass *,ImageView *);
|
||||||
|
|
||||||
@ -274,25 +274,26 @@ public:
|
|||||||
|
|
||||||
bool SubmitTexture (const VkCommandBuffer *cmd_bufs,const uint32_t count=1); ///<提交纹理处理到队列
|
bool SubmitTexture (const VkCommandBuffer *cmd_bufs,const uint32_t count=1); ///<提交纹理处理到队列
|
||||||
|
|
||||||
RenderTarget *CreateRenderTarget(Framebuffer *);
|
RenderTarget *CreateRenderTarget( Framebuffer *,const uint32_t fence_count=1);
|
||||||
|
|
||||||
RenderTarget *CreateRenderTarget( const uint,const uint,const List<VkFormat> &,
|
|
||||||
const VkImageLayout color_final_layout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
|
||||||
const VkImageLayout depth_final_layout=VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
|
||||||
|
|
||||||
RenderTarget *CreateRenderTarget( const uint,const uint,const VkFormat,const VkImageLayout final_layout);
|
|
||||||
|
|
||||||
RenderTarget *CreateRenderTarget( const uint,const uint,
|
|
||||||
const VkFormat color_format,
|
|
||||||
const VkFormat depth_format,
|
|
||||||
const VkImageLayout color_final_layout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
|
||||||
const VkImageLayout depth_final_layout=VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
|
||||||
|
|
||||||
RenderTarget *CreateRenderTarget( const uint,const uint,
|
RenderTarget *CreateRenderTarget( const uint,const uint,
|
||||||
const List<VkFormat> &color_format_list,
|
const List<VkFormat> &color_format_list,
|
||||||
const VkFormat depth_format,
|
const VkFormat depth_format,
|
||||||
const VkImageLayout color_final_layout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
const VkImageLayout color_final_layout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||||
const VkImageLayout depth_final_layout=VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
const VkImageLayout depth_final_layout=VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
|
||||||
|
const uint32_t fence_count=1);
|
||||||
|
|
||||||
|
RenderTarget *CreateRenderTarget( const uint,const uint,
|
||||||
|
const VkFormat color_format,
|
||||||
|
const VkFormat depth_format,
|
||||||
|
const VkImageLayout color_final_layout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||||
|
const VkImageLayout depth_final_layout=VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
|
||||||
|
const uint32_t fence_count=1);
|
||||||
|
|
||||||
|
RenderTarget *CreateRenderTarget( const uint,const uint,const VkFormat,const VkImageLayout final_layout,const uint32_t fence_count=1);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
Pipeline *CreatePipeline(const InlinePipeline &,const Material *,const RenderTarget *);
|
Pipeline *CreatePipeline(const InlinePipeline &,const Material *,const RenderTarget *);
|
||||||
Pipeline *CreatePipeline( PipelineData *, const Material *,const RenderTarget *);
|
Pipeline *CreatePipeline( PipelineData *, const Material *,const RenderTarget *);
|
||||||
|
@ -2,33 +2,11 @@
|
|||||||
#define HGL_GRAPH_VULKAN_RENDER_TARGET_INCLUDE
|
#define HGL_GRAPH_VULKAN_RENDER_TARGET_INCLUDE
|
||||||
|
|
||||||
#include<hgl/graph/vulkan/VK.h>
|
#include<hgl/graph/vulkan/VK.h>
|
||||||
#include<hgl/graph/vulkan/VKFence.h>
|
|
||||||
#include<hgl/graph/vulkan/VKRenderPass.h>
|
#include<hgl/graph/vulkan/VKRenderPass.h>
|
||||||
#include<hgl/graph/vulkan/VKFramebuffer.h>
|
#include<hgl/graph/vulkan/VKFramebuffer.h>
|
||||||
#include<hgl/graph/vulkan/VKSwapchain.h>
|
#include<hgl/graph/vulkan/VKSwapchain.h>
|
||||||
|
#include<hgl/graph/vulkan/VKSubmitQueue.h>
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
class SubmitQueue
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
|
|
||||||
Device *device;
|
|
||||||
VkQueue queue;
|
|
||||||
|
|
||||||
uint32_t current_fence;
|
|
||||||
ObjectList<Fence> fence_list;
|
|
||||||
|
|
||||||
SubmitInfo submit_info;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
SubmitQueue(Device *dev,VkQueue q,const uint32_t fence_count=1);
|
|
||||||
virtual ~SubmitQueue();
|
|
||||||
|
|
||||||
bool Wait(const bool wait_wall=true,const uint64_t time_out=HGL_NANO_SEC_PER_SEC);
|
|
||||||
bool Submit(const VkCommandBuffer &cmd_buf,vulkan::Semaphore *wait_sem,vulkan::Semaphore *complete_sem);
|
|
||||||
bool Submit(const VkCommandBuffer *cmd_buf,const uint32_t count,vulkan::Semaphore *wait_sem,vulkan::Semaphore *complete_sem);
|
|
||||||
};//class SumbitQueue
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 渲染目标
|
* 渲染目标
|
||||||
*/
|
*/
|
||||||
@ -42,11 +20,17 @@ protected:
|
|||||||
|
|
||||||
CommandBuffer *command_buffer;
|
CommandBuffer *command_buffer;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
ObjectList<Texture2D> color_texture;
|
||||||
|
Texture2D *depth_texture;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
friend class Device;
|
friend class Device;
|
||||||
|
|
||||||
RenderTarget(Device *dev,Framebuffer *_fb,CommandBuffer *_cb,const uint32_t fence_count=1);
|
RenderTarget(Device *dev,Framebuffer *_fb,CommandBuffer *_cb,const uint32_t fence_count=1);
|
||||||
|
RenderTarget(Device *dev,Framebuffer *_fb,CommandBuffer *_cb,Texture2D **color_texture_list,const uint32_t color_count,Texture2D *depth_texture,const uint32_t fence_count=1);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -57,6 +41,9 @@ public:
|
|||||||
virtual const VkRenderPass GetRenderPass ()const {return fb->GetRenderPass();}
|
virtual const VkRenderPass GetRenderPass ()const {return fb->GetRenderPass();}
|
||||||
virtual const uint32_t GetColorCount ()const {return fb->GetColorCount();}
|
virtual const uint32_t GetColorCount ()const {return fb->GetColorCount();}
|
||||||
virtual const VkFramebuffer GetFramebuffer ()const {return fb->GetFramebuffer();}
|
virtual const VkFramebuffer GetFramebuffer ()const {return fb->GetFramebuffer();}
|
||||||
|
|
||||||
|
virtual Texture2D * GetColorTexture (const int index=0){return color_texture[index];}
|
||||||
|
virtual Texture2D * GetDepthTexture (){return depth_texture;}
|
||||||
};//class RenderTarget
|
};//class RenderTarget
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -89,19 +76,27 @@ public:
|
|||||||
|
|
||||||
const uint32_t GetCurrentFrameIndices()const{return current_frame;}
|
const uint32_t GetCurrentFrameIndices()const{return current_frame;}
|
||||||
|
|
||||||
|
virtual Texture2D * GetColorTexture(const int index=0) override{return swapchain->GetColorTexture(index);}
|
||||||
|
virtual Texture2D * GetDepthTexture() override{return swapchain->GetDepthTexture();}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求下一帧画面的索引
|
* 请求下一帧画面的索引
|
||||||
* @param present_complete_semaphore 推送完成信号
|
* @param present_complete_semaphore 推送完成信号
|
||||||
*/
|
*/
|
||||||
int AcquireNextImage(vulkan::Semaphore *present_complete_semaphore);
|
int AcquireNextImage(VkSemaphore present_complete_semaphore);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 推送后台画面到前台
|
* 推送后台画面到前台
|
||||||
* @param render_complete_semaphore 渲染完成信号
|
* @param render_complete_semaphore 渲染完成信号
|
||||||
*/
|
*/
|
||||||
bool PresentBackbuffer(vulkan::Semaphore *render_complete_semaphore);
|
bool PresentBackbuffer(VkSemaphore *render_complete_semaphore,const uint32_t count);
|
||||||
|
|
||||||
|
bool PresentBackbuffer(VkSemaphore render_complete_semaphore)
|
||||||
|
{
|
||||||
|
return PresentBackbuffer(&render_complete_semaphore,1);
|
||||||
|
}
|
||||||
};//class SwapchainRenderTarget:public RenderTarget
|
};//class SwapchainRenderTarget:public RenderTarget
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
#endif//HGL_GRAPH_VULKAN_RENDER_TARGET_INCLUDE
|
#endif//HGL_GRAPH_VULKAN_RENDER_TARGET_INCLUDE
|
||||||
|
@ -1,13 +1,33 @@
|
|||||||
#include<hgl/graph/vulkan/VKDevice.h>
|
#include<hgl/graph/vulkan/VKDevice.h>
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
VkFramebuffer CreateVulkanFramebuffer(VkDevice device,RenderPass *rp,const VkExtent2D &extent,VkImageView *attachments,const uint attachmentCount)
|
||||||
|
{
|
||||||
|
FramebufferCreateInfo fb_info;
|
||||||
|
|
||||||
|
fb_info.renderPass = *rp;
|
||||||
|
fb_info.attachmentCount = attachmentCount;
|
||||||
|
fb_info.pAttachments = attachments;
|
||||||
|
fb_info.width = extent.width;
|
||||||
|
fb_info.height = extent.height;
|
||||||
|
fb_info.layers = 1;
|
||||||
|
|
||||||
|
VkFramebuffer fb;
|
||||||
|
|
||||||
|
if(vkCreateFramebuffer(device,&fb_info,nullptr,&fb)!=VK_SUCCESS)
|
||||||
|
return(nullptr);
|
||||||
|
|
||||||
|
return fb;
|
||||||
|
}
|
||||||
|
|
||||||
Framebuffer *Device::CreateFramebuffer(RenderPass *rp,ImageView **color_list,const uint color_count,ImageView *depth)
|
Framebuffer *Device::CreateFramebuffer(RenderPass *rp,ImageView **color_list,const uint color_count,ImageView *depth)
|
||||||
{
|
{
|
||||||
uint att_count=color_count;
|
uint att_count=color_count;
|
||||||
|
|
||||||
if(depth)++att_count;
|
if(depth)++att_count;
|
||||||
|
|
||||||
VkImageView *attachments=new VkImageView[att_count];
|
AutoDeleteArray<VkImageView> attachments=new VkImageView[att_count];
|
||||||
|
VkImageView *ap=attachments;
|
||||||
|
|
||||||
if(color_count)
|
if(color_count)
|
||||||
{
|
{
|
||||||
@ -15,6 +35,7 @@ Framebuffer *Device::CreateFramebuffer(RenderPass *rp,ImageView **color_list,con
|
|||||||
|
|
||||||
const VkFormat *cf=cf_list.GetData();
|
const VkFormat *cf=cf_list.GetData();
|
||||||
ImageView **iv=color_list;
|
ImageView **iv=color_list;
|
||||||
|
|
||||||
for(uint i=0;i<color_count;i++)
|
for(uint i=0;i<color_count;i++)
|
||||||
{
|
{
|
||||||
if(*cf!=(*iv)->GetFormat())
|
if(*cf!=(*iv)->GetFormat())
|
||||||
@ -38,35 +59,28 @@ Framebuffer *Device::CreateFramebuffer(RenderPass *rp,ImageView **color_list,con
|
|||||||
attachments[color_count]=*depth;
|
attachments[color_count]=*depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
const VkExtent3D extent=depth->GetExtent();
|
VkExtent2D extent;
|
||||||
|
extent.width=depth->GetExtent().width;
|
||||||
|
extent.height=depth->GetExtent().height;
|
||||||
|
|
||||||
FramebufferCreateInfo *fb_info=new FramebufferCreateInfo;
|
VkFramebuffer fbo=CreateVulkanFramebuffer(GetDevice(),rp,extent,attachments,att_count);
|
||||||
|
|
||||||
fb_info->renderPass = *rp;
|
if(!fbo)
|
||||||
fb_info->attachmentCount = att_count;
|
|
||||||
fb_info->pAttachments = attachments;
|
|
||||||
fb_info->width = extent.width;
|
|
||||||
fb_info->height = extent.height;
|
|
||||||
fb_info->layers = 1;
|
|
||||||
|
|
||||||
VkFramebuffer fb;
|
|
||||||
|
|
||||||
if(vkCreateFramebuffer(GetDevice(),fb_info,nullptr,&fb)!=VK_SUCCESS)
|
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
return(new Framebuffer(GetDevice(),fb,fb_info,depth));
|
return(new Framebuffer(GetDevice(),fbo,extent,*rp,color_count,depth));
|
||||||
}
|
|
||||||
|
|
||||||
Framebuffer *Device::CreateFramebuffer(RenderPass *rp,List<ImageView *> &color,ImageView *depth)
|
|
||||||
{
|
|
||||||
if(!rp)return(nullptr);
|
|
||||||
|
|
||||||
if(rp->GetColorFormat().GetCount()!=color.GetCount())return(nullptr);
|
|
||||||
|
|
||||||
if(color.GetCount()==0&&!depth)return(nullptr);
|
|
||||||
|
|
||||||
return CreateFramebuffer(rp,color.GetData(),color.GetCount(),depth);
|
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
//Framebuffer *Device::CreateFramebuffer(RenderPass *rp,List<ImageView *> &color,ImageView *depth)
|
||||||
|
//{
|
||||||
|
// if(!rp)return(nullptr);
|
||||||
|
//
|
||||||
|
// if(rp->GetColorFormat().GetCount()!=color.GetCount())return(nullptr);
|
||||||
|
//
|
||||||
|
// if(color.GetCount()==0&&!depth)return(nullptr);
|
||||||
|
//
|
||||||
|
// return CreateFramebuffer(rp,color.GetData(),color.GetCount(),depth);
|
||||||
|
//}
|
||||||
|
|
||||||
Framebuffer *Device::CreateFramebuffer(RenderPass *rp,ImageView *color,ImageView *depth)
|
Framebuffer *Device::CreateFramebuffer(RenderPass *rp,ImageView *color,ImageView *depth)
|
||||||
{
|
{
|
||||||
|
@ -1,25 +1,33 @@
|
|||||||
#include<hgl/graph/vulkan/VKDevice.h>
|
#include<hgl/graph/vulkan/VKDevice.h>
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
RenderTarget *Device::CreateRenderTarget(Framebuffer *fb)
|
RenderTarget *Device::CreateRenderTarget(Framebuffer *fb,const uint32_t fence_count)
|
||||||
{
|
{
|
||||||
CommandBuffer *cb=CreateCommandBuffer(fb->GetExtent(),fb->GetAttachmentCount());
|
CommandBuffer *cb=CreateCommandBuffer(fb->GetExtent(),fb->GetAttachmentCount());
|
||||||
|
|
||||||
return(new RenderTarget(this,fb,cb));
|
return(new RenderTarget(this,fb,cb,fence_count));
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderTarget *Device::CreateRenderTarget( const uint w,const uint h,
|
RenderTarget *Device::CreateRenderTarget( const uint w,const uint h,
|
||||||
const List<VkFormat> &color_format_list,
|
const List<VkFormat> &color_format_list,
|
||||||
const VkFormat depth_format,
|
const VkFormat depth_format,
|
||||||
const VkImageLayout color_layout,
|
const VkImageLayout color_layout,
|
||||||
const VkImageLayout depth_layout)
|
const VkImageLayout depth_layout,
|
||||||
|
const uint32_t fence_count)
|
||||||
{
|
{
|
||||||
if(w<=0||h<=0)return(nullptr);
|
if(w<=0||h<=0)return(nullptr);
|
||||||
|
|
||||||
RenderPass *rp=CreateRenderPass(color_format_list,depth_format,color_layout,depth_layout); //Renderpass内部会验证格式,所以不需要自己处理
|
RenderPass *rp=CreateRenderPass(color_format_list,depth_format,color_layout,depth_layout); //Renderpass内部会验证格式,所以不需要自己处理
|
||||||
|
|
||||||
ObjectList<Texture2D> color_texture_list;
|
if(!rp)return(nullptr);
|
||||||
List<ImageView *> color_texture_image_view_list;
|
|
||||||
|
const uint32_t color_count=color_format_list.GetCount();
|
||||||
|
|
||||||
|
AutoDeleteObjectArray<Texture2D> color_texture_list(color_count);
|
||||||
|
AutoDeleteArray<ImageView *> color_iv_list=new ImageView *[color_count]; //iv只是从Texture2D中取出来的,无需一个个delete
|
||||||
|
|
||||||
|
Texture2D **tp=color_texture_list;
|
||||||
|
ImageView **iv=color_iv_list;
|
||||||
|
|
||||||
for(const VkFormat &fmt:color_format_list)
|
for(const VkFormat &fmt:color_format_list)
|
||||||
{
|
{
|
||||||
@ -31,29 +39,37 @@ RenderTarget *Device::CreateRenderTarget( const uint w,const uint h,
|
|||||||
return(nullptr);
|
return(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
color_texture_list.Add(color_texture);
|
*tp++=color_texture;
|
||||||
color_texture_image_view_list.Add(color_texture->GetImageView());
|
*iv++=color_texture->GetImageView();
|
||||||
}
|
}
|
||||||
|
|
||||||
Texture2D *depth_texture=(depth_format!=FMT_UNDEFINED)?CreateAttachmentTextureDepth(depth_format,w,h):nullptr;
|
Texture2D *depth_texture=(depth_format!=FMT_UNDEFINED)?CreateAttachmentTextureDepth(depth_format,w,h):nullptr;
|
||||||
|
|
||||||
Framebuffer *fb=CreateFramebuffer(rp,color_texture_image_view_list,depth_texture->GetImageView());
|
Framebuffer *fb=CreateFramebuffer(rp,color_iv_list,color_count,depth_texture?depth_texture->GetImageView():nullptr);
|
||||||
|
|
||||||
if(!fb)
|
if(fb)
|
||||||
{
|
{
|
||||||
SAFE_CLEAR(depth_texture)
|
CommandBuffer *cb=CreateCommandBuffer(fb->GetExtent(),fb->GetAttachmentCount());
|
||||||
delete rp;
|
|
||||||
return nullptr;
|
if(cb)
|
||||||
|
{
|
||||||
|
color_texture_list.DiscardObject();
|
||||||
|
|
||||||
|
return(new RenderTarget(this,fb,cb,color_texture_list,color_count,depth_texture,fence_count));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(CreateRenderTarget(fb));
|
SAFE_CLEAR(depth_texture);
|
||||||
|
delete rp;
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderTarget *Device::CreateRenderTarget( const uint w,const uint h,
|
RenderTarget *Device::CreateRenderTarget( const uint w,const uint h,
|
||||||
const VkFormat color_format,
|
const VkFormat color_format,
|
||||||
const VkFormat depth_format,
|
const VkFormat depth_format,
|
||||||
const VkImageLayout color_layout,
|
const VkImageLayout color_layout,
|
||||||
const VkImageLayout depth_layout)
|
const VkImageLayout depth_layout,
|
||||||
|
const uint32_t fence_count)
|
||||||
{
|
{
|
||||||
if(w<=0||h<=0)return(nullptr);
|
if(w<=0||h<=0)return(nullptr);
|
||||||
|
|
||||||
@ -61,6 +77,26 @@ RenderTarget *Device::CreateRenderTarget( const uint w,const uint h,
|
|||||||
|
|
||||||
color_format_list.Add(color_format);
|
color_format_list.Add(color_format);
|
||||||
|
|
||||||
return CreateRenderTarget(w,h,color_format_list,depth_format,color_layout,depth_layout);
|
return CreateRenderTarget(w,h,color_format_list,depth_format,color_layout,depth_layout,fence_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
RenderTarget *Device::CreateRenderTarget(const uint w,const uint h,const VkFormat format,const VkImageLayout final_layout,const uint32_t fence_count)
|
||||||
|
{
|
||||||
|
if(w<=0||h<=0)return(nullptr);
|
||||||
|
|
||||||
|
if(format==FMT_UNDEFINED)return(nullptr);
|
||||||
|
|
||||||
|
List<VkFormat> color_format_list;
|
||||||
|
|
||||||
|
if(IsDepthFormat(format))
|
||||||
|
{
|
||||||
|
return CreateRenderTarget(w,h,color_format_list,format,VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,final_layout,fence_count);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
color_format_list.Add(format);
|
||||||
|
|
||||||
|
return CreateRenderTarget(w,h,color_format_list,FMT_UNDEFINED,final_layout,VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,fence_count);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
Loading…
x
Reference in New Issue
Block a user