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;}
|
||||
|
||||
bool Begin();
|
||||
bool End()
|
||||
virtual bool Begin();
|
||||
virtual bool End()
|
||||
{
|
||||
if(!cmd_begin)
|
||||
return(false);
|
||||
@ -50,6 +50,8 @@ public:
|
||||
#endif//_DEBUG
|
||||
};//class GPUCmdBuffer
|
||||
|
||||
class DescriptorBinding;
|
||||
|
||||
class RenderCmdBuffer:public GPUCmdBuffer
|
||||
{
|
||||
uint32_t cv_count;
|
||||
@ -60,6 +62,8 @@ class RenderCmdBuffer:public GPUCmdBuffer
|
||||
RenderPassBeginInfo rp_begin;
|
||||
VkPipelineLayout pipeline_layout;
|
||||
|
||||
DescriptorBinding *desc_binding=nullptr;
|
||||
|
||||
private:
|
||||
|
||||
void SetClear();
|
||||
@ -69,6 +73,15 @@ public:
|
||||
RenderCmdBuffer(const GPUDeviceAttribute *attr,VkCommandBuffer cb);
|
||||
~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 VkExtent2D &);
|
||||
void SetViewport(const VkViewport &vp){viewport=vp;}
|
||||
|
@ -1,32 +1,30 @@
|
||||
#ifndef HGL_GRAPH_DESCRIPTOR_BINDING_MANAGE_INCLUDE
|
||||
#define HGL_GRAPH_DESCRIPTOR_BINDING_MANAGE_INCLUDE
|
||||
#pragma once
|
||||
|
||||
#include<hgl/type/Map.h>
|
||||
#include<hgl/type/String.h>
|
||||
#include<hgl/graph/VK.h>
|
||||
#include<hgl/graph/VKDescriptorSetType.h>
|
||||
namespace hgl
|
||||
{
|
||||
namespace graph
|
||||
{
|
||||
class DeviceBuffer;
|
||||
class Texture;
|
||||
class Material;
|
||||
class MaterialParameters;
|
||||
|
||||
/**
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
||||
class DeviceBuffer;
|
||||
class Texture;
|
||||
class Material;
|
||||
class MaterialParameters;
|
||||
|
||||
/**
|
||||
* 描述符绑定器<Br>
|
||||
* 一般用于注册通用数据,为材质进行自动绑定。
|
||||
*/
|
||||
class DescriptorBinding
|
||||
{
|
||||
class DescriptorBinding
|
||||
{
|
||||
DescriptorSetType set_type; ///<描述符合集类型
|
||||
|
||||
Map<AnsiString,DeviceBuffer *> ubo_map;
|
||||
Map<AnsiString,DeviceBuffer *> ssbo_map;
|
||||
Map<AnsiString,Texture *> texture_map;
|
||||
|
||||
public:
|
||||
public:
|
||||
|
||||
DescriptorBinding(const DescriptorSetType &dst)
|
||||
{
|
||||
@ -99,14 +97,13 @@ namespace hgl
|
||||
texture_map.DeleteByValue(tex);
|
||||
}
|
||||
|
||||
private:
|
||||
private:
|
||||
|
||||
void BindUBO(MaterialParameters *,const BindingMap &,bool dynamic);
|
||||
|
||||
public:
|
||||
public:
|
||||
|
||||
bool Bind(Material *);
|
||||
};//class DescriptorBinding
|
||||
}//namespace graph
|
||||
}//namespace hgl
|
||||
#endif//HGL_GRAPH_DESCRIPTOR_BINDING_MANAGE_INCLUDE
|
||||
};//class DescriptorBinding
|
||||
|
||||
VK_NAMESPACE_END
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include<hgl/graph/VKQueue.h>
|
||||
#include<hgl/graph/VKPipeline.h>
|
||||
#include<hgl/graph/VKCommandBuffer.h>
|
||||
#include<hgl/graph/VKDescriptorBindingManage.h>
|
||||
//#include<iostream>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
@ -31,11 +32,14 @@ class IRenderTarget
|
||||
graph::ViewportInfo vp_info;
|
||||
graph::DeviceBuffer *ubo_vp_info;
|
||||
|
||||
DescriptorBinding desc_binding;
|
||||
|
||||
public:
|
||||
|
||||
RenderFramework * GetRenderFramework ()const{return render_framework;}
|
||||
GPUDevice * GetDevice ()const;
|
||||
VkDevice GetVkDevice ()const;
|
||||
DescriptorBinding * GetDescriptorBinding(){return &desc_binding;}
|
||||
|
||||
const VkExtent2D &GetExtent ()const{return extent;}
|
||||
|
||||
@ -73,6 +77,14 @@ public: // Command Buffer
|
||||
|
||||
virtual RenderCmdBuffer * BeginRender ()=0;
|
||||
virtual void EndRender ()=0;
|
||||
|
||||
public:
|
||||
|
||||
virtual void Bind (Material *mtl)
|
||||
{
|
||||
if(mtl)
|
||||
desc_binding.Bind(mtl);
|
||||
}
|
||||
};//class IRenderTarget
|
||||
|
||||
struct RenderTargetData
|
||||
@ -115,6 +127,8 @@ protected:
|
||||
RenderTarget(RenderFramework *rf,RenderTargetData *rtd):IRenderTarget(rf,rtd->fbo->GetExtent())
|
||||
{
|
||||
data=rtd;
|
||||
|
||||
data->cmd_buf->SetDescriptorBinding(GetDescriptorBinding());
|
||||
}
|
||||
|
||||
public:
|
||||
@ -164,6 +178,7 @@ public:
|
||||
return(nullptr);
|
||||
|
||||
data->cmd_buf->Begin();
|
||||
data->cmd_buf->SetDescriptorBinding(GetDescriptorBinding());
|
||||
data->cmd_buf->BindFramebuffer(data->fbo);
|
||||
return data->cmd_buf;
|
||||
}
|
||||
|
@ -91,6 +91,9 @@ bool RenderCmdBuffer::BindDescriptorSets(Material *mtl)
|
||||
{
|
||||
if(!mtl)return(false);
|
||||
|
||||
if(desc_binding)
|
||||
desc_binding->Bind(mtl);
|
||||
|
||||
{
|
||||
uint32_t count=0;
|
||||
|
||||
|
@ -5,17 +5,21 @@
|
||||
#include<hgl/graph/RenderFramework.h>
|
||||
#include<hgl/graph/VKBuffer.h>
|
||||
|
||||
#include<hgl/graph/mtl/UBOCommon.h> //未来UBO统合看能不能不引用
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
||||
GPUDevice *IRenderTarget::GetDevice ()const{return render_framework->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;
|
||||
|
||||
ubo_vp_info=GetDevice()->CreateUBO(sizeof(ViewportInfo),&vp_info);
|
||||
|
||||
desc_binding.AddUBO(mtl::SBS_ViewportInfo.name,ubo_vp_info);
|
||||
|
||||
OnResize(ext);
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@ bool Std2DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
|
||||
mci->AddStruct(SBS_ViewportInfo);
|
||||
|
||||
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
|
||||
DescriptorSetType::Static,
|
||||
DescriptorSetType::RenderTarget,
|
||||
SBS_ViewportInfo);
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ bool Std3DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
|
||||
mci->AddStruct(SBS_ViewportInfo);
|
||||
|
||||
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
|
||||
DescriptorSetType::Static,
|
||||
DescriptorSetType::RenderTarget,
|
||||
SBS_ViewportInfo);
|
||||
|
||||
return(true);
|
||||
|
Loading…
x
Reference in New Issue
Block a user