Put the Viewport in a RenderTarget and pass it after RenderCmdBuffer::Begin. auto bind ViewportInfo to any material.
This commit is contained in:
parent
2f1ccda442
commit
c5e9f151fc
@ -1 +1 @@
|
|||||||
Subproject commit 2b286a47b677b285e849fc5fa5afe132ed33948f
|
Subproject commit f74d7045fa0d143b94103e49093fe18a1d5a884c
|
@ -29,8 +29,8 @@ public:
|
|||||||
|
|
||||||
const bool IsBegin()const{return cmd_begin;}
|
const bool IsBegin()const{return cmd_begin;}
|
||||||
|
|
||||||
bool Begin();
|
virtual bool Begin();
|
||||||
bool End()
|
virtual bool End()
|
||||||
{
|
{
|
||||||
if(!cmd_begin)
|
if(!cmd_begin)
|
||||||
return(false);
|
return(false);
|
||||||
@ -50,6 +50,8 @@ public:
|
|||||||
#endif//_DEBUG
|
#endif//_DEBUG
|
||||||
};//class GPUCmdBuffer
|
};//class GPUCmdBuffer
|
||||||
|
|
||||||
|
class DescriptorBinding;
|
||||||
|
|
||||||
class RenderCmdBuffer:public GPUCmdBuffer
|
class RenderCmdBuffer:public GPUCmdBuffer
|
||||||
{
|
{
|
||||||
uint32_t cv_count;
|
uint32_t cv_count;
|
||||||
@ -60,6 +62,8 @@ class RenderCmdBuffer:public GPUCmdBuffer
|
|||||||
RenderPassBeginInfo rp_begin;
|
RenderPassBeginInfo rp_begin;
|
||||||
VkPipelineLayout pipeline_layout;
|
VkPipelineLayout pipeline_layout;
|
||||||
|
|
||||||
|
DescriptorBinding *desc_binding=nullptr;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void SetClear();
|
void SetClear();
|
||||||
@ -69,6 +73,15 @@ public:
|
|||||||
RenderCmdBuffer(const GPUDeviceAttribute *attr,VkCommandBuffer cb);
|
RenderCmdBuffer(const GPUDeviceAttribute *attr,VkCommandBuffer cb);
|
||||||
~RenderCmdBuffer();
|
~RenderCmdBuffer();
|
||||||
|
|
||||||
|
void SetDescriptorBinding(DescriptorBinding *db) { desc_binding=db; }
|
||||||
|
|
||||||
|
bool End() override
|
||||||
|
{
|
||||||
|
desc_binding=nullptr;
|
||||||
|
|
||||||
|
return GPUCmdBuffer::End();
|
||||||
|
}
|
||||||
|
|
||||||
void SetRenderArea(const VkRect2D &ra){render_area=ra;}
|
void SetRenderArea(const VkRect2D &ra){render_area=ra;}
|
||||||
void SetRenderArea(const VkExtent2D &);
|
void SetRenderArea(const VkExtent2D &);
|
||||||
void SetViewport(const VkViewport &vp){viewport=vp;}
|
void SetViewport(const VkViewport &vp){viewport=vp;}
|
||||||
|
@ -1,112 +1,109 @@
|
|||||||
#ifndef HGL_GRAPH_DESCRIPTOR_BINDING_MANAGE_INCLUDE
|
#pragma once
|
||||||
#define HGL_GRAPH_DESCRIPTOR_BINDING_MANAGE_INCLUDE
|
|
||||||
|
|
||||||
#include<hgl/type/Map.h>
|
#include<hgl/type/Map.h>
|
||||||
#include<hgl/type/String.h>
|
#include<hgl/type/String.h>
|
||||||
#include<hgl/graph/VK.h>
|
#include<hgl/graph/VK.h>
|
||||||
#include<hgl/graph/VKDescriptorSetType.h>
|
#include<hgl/graph/VKDescriptorSetType.h>
|
||||||
namespace hgl
|
|
||||||
|
VK_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
class DeviceBuffer;
|
||||||
|
class Texture;
|
||||||
|
class Material;
|
||||||
|
class MaterialParameters;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述符绑定器<Br>
|
||||||
|
* 一般用于注册通用数据,为材质进行自动绑定。
|
||||||
|
*/
|
||||||
|
class DescriptorBinding
|
||||||
{
|
{
|
||||||
namespace graph
|
DescriptorSetType set_type; ///<描述符合集类型
|
||||||
|
|
||||||
|
Map<AnsiString,DeviceBuffer *> ubo_map;
|
||||||
|
Map<AnsiString,DeviceBuffer *> ssbo_map;
|
||||||
|
Map<AnsiString,Texture *> texture_map;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
DescriptorBinding(const DescriptorSetType &dst)
|
||||||
{
|
{
|
||||||
class DeviceBuffer;
|
set_type=dst;
|
||||||
class Texture;
|
}
|
||||||
class Material;
|
|
||||||
class MaterialParameters;
|
|
||||||
|
|
||||||
/**
|
bool AddUBO(const AnsiString &name,DeviceBuffer *buf)
|
||||||
* 描述符绑定器<Br>
|
{
|
||||||
* 一般用于注册通用数据,为材质进行自动绑定。
|
if(!buf)return(false);
|
||||||
*/
|
if(name.IsEmpty())return(false);
|
||||||
class DescriptorBinding
|
|
||||||
{
|
|
||||||
DescriptorSetType set_type; ///<描述符合集类型
|
|
||||||
|
|
||||||
Map<AnsiString,DeviceBuffer *> ubo_map;
|
return ubo_map.Add(name,buf);
|
||||||
Map<AnsiString,DeviceBuffer *> ssbo_map;
|
}
|
||||||
Map<AnsiString,Texture *> texture_map;
|
|
||||||
|
|
||||||
public:
|
DeviceBuffer *GetUBO(const AnsiString &name)
|
||||||
|
{
|
||||||
|
if(name.IsEmpty())return(nullptr);
|
||||||
|
|
||||||
DescriptorBinding(const DescriptorSetType &dst)
|
return GetObjectFromList(ubo_map,name);
|
||||||
{
|
}
|
||||||
set_type=dst;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AddUBO(const AnsiString &name,DeviceBuffer *buf)
|
void RemoveUBO(DeviceBuffer *buf)
|
||||||
{
|
{
|
||||||
if(!buf)return(false);
|
if(!buf)return;
|
||||||
if(name.IsEmpty())return(false);
|
|
||||||
|
|
||||||
return ubo_map.Add(name,buf);
|
ubo_map.DeleteByValue(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceBuffer *GetUBO(const AnsiString &name)
|
bool AddSSBO(const AnsiString &name,DeviceBuffer *buf)
|
||||||
{
|
{
|
||||||
if(name.IsEmpty())return(nullptr);
|
if(!buf)return(false);
|
||||||
|
if(name.IsEmpty())return(false);
|
||||||
|
|
||||||
return GetObjectFromList(ubo_map,name);
|
return ssbo_map.Add(name,buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoveUBO(DeviceBuffer *buf)
|
DeviceBuffer *GetSSBO(const AnsiString &name)
|
||||||
{
|
{
|
||||||
if(!buf)return;
|
if(name.IsEmpty())return(nullptr);
|
||||||
|
|
||||||
ubo_map.DeleteByValue(buf);
|
return GetObjectFromList(ssbo_map,name);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AddSSBO(const AnsiString &name,DeviceBuffer *buf)
|
void RemoveSSBO(DeviceBuffer *buf)
|
||||||
{
|
{
|
||||||
if(!buf)return(false);
|
if(!buf)return;
|
||||||
if(name.IsEmpty())return(false);
|
|
||||||
|
|
||||||
return ssbo_map.Add(name,buf);
|
ssbo_map.DeleteByValue(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceBuffer *GetSSBO(const AnsiString &name)
|
bool AddTexture(const AnsiString &name,Texture *tex)
|
||||||
{
|
{
|
||||||
if(name.IsEmpty())return(nullptr);
|
if(!tex)return(false);
|
||||||
|
if(name.IsEmpty())return(false);
|
||||||
|
|
||||||
return GetObjectFromList(ssbo_map,name);
|
return texture_map.Add(name,tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoveSSBO(DeviceBuffer *buf)
|
Texture *GetTexture(const AnsiString &name)
|
||||||
{
|
{
|
||||||
if(!buf)return;
|
if(name.IsEmpty())return(nullptr);
|
||||||
|
|
||||||
ssbo_map.DeleteByValue(buf);
|
return GetObjectFromList(texture_map,name);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AddTexture(const AnsiString &name,Texture *tex)
|
void RemoveTexture(Texture *tex)
|
||||||
{
|
{
|
||||||
if(!tex)return(false);
|
if(!tex)return;
|
||||||
if(name.IsEmpty())return(false);
|
|
||||||
|
|
||||||
return texture_map.Add(name,tex);
|
texture_map.DeleteByValue(tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
Texture *GetTexture(const AnsiString &name)
|
private:
|
||||||
{
|
|
||||||
if(name.IsEmpty())return(nullptr);
|
|
||||||
|
|
||||||
return GetObjectFromList(texture_map,name);
|
void BindUBO(MaterialParameters *,const BindingMap &,bool dynamic);
|
||||||
}
|
|
||||||
|
|
||||||
void RemoveTexture(Texture *tex)
|
public:
|
||||||
{
|
|
||||||
if(!tex)return;
|
|
||||||
|
|
||||||
texture_map.DeleteByValue(tex);
|
bool Bind(Material *);
|
||||||
}
|
};//class DescriptorBinding
|
||||||
|
|
||||||
private:
|
VK_NAMESPACE_END
|
||||||
|
|
||||||
void BindUBO(MaterialParameters *,const BindingMap &,bool dynamic);
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
bool Bind(Material *);
|
|
||||||
};//class DescriptorBinding
|
|
||||||
}//namespace graph
|
|
||||||
}//namespace hgl
|
|
||||||
#endif//HGL_GRAPH_DESCRIPTOR_BINDING_MANAGE_INCLUDE
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include<hgl/graph/VKQueue.h>
|
#include<hgl/graph/VKQueue.h>
|
||||||
#include<hgl/graph/VKPipeline.h>
|
#include<hgl/graph/VKPipeline.h>
|
||||||
#include<hgl/graph/VKCommandBuffer.h>
|
#include<hgl/graph/VKCommandBuffer.h>
|
||||||
|
#include<hgl/graph/VKDescriptorBindingManage.h>
|
||||||
//#include<iostream>
|
//#include<iostream>
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
@ -30,12 +31,15 @@ class IRenderTarget
|
|||||||
VkExtent2D extent;
|
VkExtent2D extent;
|
||||||
graph::ViewportInfo vp_info;
|
graph::ViewportInfo vp_info;
|
||||||
graph::DeviceBuffer *ubo_vp_info;
|
graph::DeviceBuffer *ubo_vp_info;
|
||||||
|
|
||||||
|
DescriptorBinding desc_binding;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RenderFramework * GetRenderFramework ()const{return render_framework;}
|
RenderFramework * GetRenderFramework ()const{return render_framework;}
|
||||||
GPUDevice * GetDevice ()const;
|
GPUDevice * GetDevice ()const;
|
||||||
VkDevice GetVkDevice ()const;
|
VkDevice GetVkDevice ()const;
|
||||||
|
DescriptorBinding * GetDescriptorBinding(){return &desc_binding;}
|
||||||
|
|
||||||
const VkExtent2D &GetExtent ()const{return extent;}
|
const VkExtent2D &GetExtent ()const{return extent;}
|
||||||
|
|
||||||
@ -73,6 +77,14 @@ public: // Command Buffer
|
|||||||
|
|
||||||
virtual RenderCmdBuffer * BeginRender ()=0;
|
virtual RenderCmdBuffer * BeginRender ()=0;
|
||||||
virtual void EndRender ()=0;
|
virtual void EndRender ()=0;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void Bind (Material *mtl)
|
||||||
|
{
|
||||||
|
if(mtl)
|
||||||
|
desc_binding.Bind(mtl);
|
||||||
|
}
|
||||||
};//class IRenderTarget
|
};//class IRenderTarget
|
||||||
|
|
||||||
struct RenderTargetData
|
struct RenderTargetData
|
||||||
@ -115,6 +127,8 @@ protected:
|
|||||||
RenderTarget(RenderFramework *rf,RenderTargetData *rtd):IRenderTarget(rf,rtd->fbo->GetExtent())
|
RenderTarget(RenderFramework *rf,RenderTargetData *rtd):IRenderTarget(rf,rtd->fbo->GetExtent())
|
||||||
{
|
{
|
||||||
data=rtd;
|
data=rtd;
|
||||||
|
|
||||||
|
data->cmd_buf->SetDescriptorBinding(GetDescriptorBinding());
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -164,6 +178,7 @@ public:
|
|||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
data->cmd_buf->Begin();
|
data->cmd_buf->Begin();
|
||||||
|
data->cmd_buf->SetDescriptorBinding(GetDescriptorBinding());
|
||||||
data->cmd_buf->BindFramebuffer(data->fbo);
|
data->cmd_buf->BindFramebuffer(data->fbo);
|
||||||
return data->cmd_buf;
|
return data->cmd_buf;
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,9 @@ bool RenderCmdBuffer::BindDescriptorSets(Material *mtl)
|
|||||||
{
|
{
|
||||||
if(!mtl)return(false);
|
if(!mtl)return(false);
|
||||||
|
|
||||||
|
if(desc_binding)
|
||||||
|
desc_binding->Bind(mtl);
|
||||||
|
|
||||||
{
|
{
|
||||||
uint32_t count=0;
|
uint32_t count=0;
|
||||||
|
|
||||||
|
@ -5,17 +5,21 @@
|
|||||||
#include<hgl/graph/RenderFramework.h>
|
#include<hgl/graph/RenderFramework.h>
|
||||||
#include<hgl/graph/VKBuffer.h>
|
#include<hgl/graph/VKBuffer.h>
|
||||||
|
|
||||||
|
#include<hgl/graph/mtl/UBOCommon.h> //未来UBO统合看能不能不引用
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
|
||||||
GPUDevice *IRenderTarget::GetDevice ()const{return render_framework->GetDevice();}
|
GPUDevice *IRenderTarget::GetDevice ()const{return render_framework->GetDevice();}
|
||||||
VkDevice IRenderTarget::GetVkDevice()const{return render_framework->GetDevice()->GetDevice();}
|
VkDevice IRenderTarget::GetVkDevice()const{return render_framework->GetDevice()->GetDevice();}
|
||||||
|
|
||||||
IRenderTarget::IRenderTarget(RenderFramework *rf,const VkExtent2D &ext)
|
IRenderTarget::IRenderTarget(RenderFramework *rf,const VkExtent2D &ext):desc_binding(DescriptorSetType::RenderTarget)
|
||||||
{
|
{
|
||||||
render_framework=rf;
|
render_framework=rf;
|
||||||
|
|
||||||
ubo_vp_info=GetDevice()->CreateUBO(sizeof(ViewportInfo),&vp_info);
|
ubo_vp_info=GetDevice()->CreateUBO(sizeof(ViewportInfo),&vp_info);
|
||||||
|
|
||||||
|
desc_binding.AddUBO(mtl::SBS_ViewportInfo.name,ubo_vp_info);
|
||||||
|
|
||||||
OnResize(ext);
|
OnResize(ext);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,4 +44,4 @@ void RenderTargetData::Clear()
|
|||||||
SAFE_CLEAR(depth_texture);
|
SAFE_CLEAR(depth_texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
|
@ -45,7 +45,7 @@ bool Std2DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
|
|||||||
mci->AddStruct(SBS_ViewportInfo);
|
mci->AddStruct(SBS_ViewportInfo);
|
||||||
|
|
||||||
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
|
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
|
||||||
DescriptorSetType::Static,
|
DescriptorSetType::RenderTarget,
|
||||||
SBS_ViewportInfo);
|
SBS_ViewportInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ bool Std3DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
|
|||||||
mci->AddStruct(SBS_ViewportInfo);
|
mci->AddStruct(SBS_ViewportInfo);
|
||||||
|
|
||||||
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
|
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
|
||||||
DescriptorSetType::Static,
|
DescriptorSetType::RenderTarget,
|
||||||
SBS_ViewportInfo);
|
SBS_ViewportInfo);
|
||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user