CommandBuffer中独立BeginRenderPass/EndRenderPass

This commit is contained in:
HuYingzhuo 2019-04-29 14:53:56 +08:00
parent e96bfe9c4b
commit e44a89af78
5 changed files with 36 additions and 21 deletions

View File

@ -31,8 +31,7 @@ CommandBuffer::~CommandBuffer()
VkCommandBuffer cmd_bufs[1] = {cmd_buf}; VkCommandBuffer cmd_bufs[1] = {cmd_buf};
vkFreeCommandBuffers(device, pool, 1, cmd_bufs); vkFreeCommandBuffers(device, pool, 1, cmd_bufs);
} }
bool CommandBuffer::Begin()
bool CommandBuffer::Begin(RenderPass *rp,Framebuffer *fb)
{ {
VkCommandBufferBeginInfo cmd_buf_info = {}; VkCommandBufferBeginInfo cmd_buf_info = {};
cmd_buf_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; cmd_buf_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
@ -43,6 +42,11 @@ bool CommandBuffer::Begin(RenderPass *rp,Framebuffer *fb)
if(vkBeginCommandBuffer(cmd_buf, &cmd_buf_info)!=VK_SUCCESS) if(vkBeginCommandBuffer(cmd_buf, &cmd_buf_info)!=VK_SUCCESS)
return(false); return(false);
return(true);
}
bool CommandBuffer::BeginRenderPass(RenderPass *rp,Framebuffer *fb)
{
VkRenderPassBeginInfo rp_begin; VkRenderPassBeginInfo rp_begin;
rp_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; rp_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
@ -163,9 +167,16 @@ void CommandBuffer::DrawIndexed(const uint32_t index_count,const uint32_t instan
vkCmdDrawIndexed(cmd_buf,index_count,instance_count,first_index,vertex_offset,first_instance); vkCmdDrawIndexed(cmd_buf,index_count,instance_count,first_index,vertex_offset,first_instance);
} }
bool CommandBuffer::End() void CommandBuffer::EndRenderPass()
{ {
vkCmdEndRenderPass(cmd_buf); vkCmdEndRenderPass(cmd_buf);
return(vkEndCommandBuffer(cmd_buf)==VK_SUCCESS); }
bool CommandBuffer::End()
{
if(vkEndCommandBuffer(cmd_buf)==VK_SUCCESS)
return(true);
return(false);
} }
VK_NAMESPACE_END VK_NAMESPACE_END

View File

@ -43,10 +43,12 @@ public:
//以上设定在Begin开始后即不可改变 //以上设定在Begin开始后即不可改变
bool Begin(RenderPass *rp,Framebuffer *fb); bool Begin();
bool BeginRenderPass(RenderPass *rp,Framebuffer *fb);
bool Bind(Pipeline *p); bool Bind(Pipeline *p);
bool Bind(Material *); bool Bind(Material *);
bool Bind(Renderable *); bool Bind(Renderable *);
void EndRenderPass();
bool End(); bool End();
public: public:

View File

@ -19,8 +19,8 @@
using namespace hgl; using namespace hgl;
using namespace hgl::graph; using namespace hgl::graph;
constexpr uint32_t SCREEN_WIDTH=1280; constexpr uint32_t SCREEN_WIDTH=128;
constexpr uint32_t SCREEN_HEIGHT=720; constexpr uint32_t SCREEN_HEIGHT=128;
struct WorldConfig struct WorldConfig
{ {
@ -199,11 +199,13 @@ private:
if(!cmd_buf) if(!cmd_buf)
return(false); return(false);
cmd_buf->Begin(device->GetRenderPass(),device->GetFramebuffer(0)); cmd_buf->Begin();
cmd_buf->Bind(pipeline); cmd_buf->BeginRenderPass(device->GetRenderPass(),device->GetFramebuffer(0));
cmd_buf->Bind(material); cmd_buf->Bind(pipeline);
cmd_buf->Bind(render_obj); cmd_buf->Bind(material);
cmd_buf->Draw(VERTEX_COUNT); cmd_buf->Bind(render_obj);
cmd_buf->Draw(VERTEX_COUNT);
cmd_buf->EndRenderPass();
cmd_buf->End(); cmd_buf->End();
return(true); return(true);

View File

@ -258,7 +258,7 @@ namespace hgl
* @return * @return
*/ */
template<typename F,typename T,typename DataPair> template<typename F,typename T,typename DataPair>
bool _Map<F,T,DataPair>::GetKey(int index,F &f) const bool _Map<F,T,DataPair>::GetKey(int index,F &f)
{ {
if(index<0||index>=data_list.GetCount())return(false); if(index<0||index>=data_list.GetCount())return(false);
@ -276,7 +276,7 @@ namespace hgl
* @return * @return
*/ */
template<typename F,typename T,typename DataPair> template<typename F,typename T,typename DataPair>
bool _Map<F,T,DataPair>::GetValue(int index,T &t) const bool _Map<F,T,DataPair>::GetValue(int index,T &t)
{ {
if(index<0||index>=data_list.GetCount())return(false); if(index<0||index>=data_list.GetCount())return(false);
@ -525,7 +525,7 @@ namespace hgl
} }
template<typename F,typename T,typename DataPair> template<typename F,typename T,typename DataPair>
void _Map<F,T,DataPair>::EnumKey(void (*enum_func)(const F &))const void _Map<F,T,DataPair>::EnumKey(void (*enum_func)(const F &))
{ {
const int count=data_list.GetCount(); const int count=data_list.GetCount();

View File

@ -40,7 +40,7 @@ namespace hgl
bool KeyExist(const F &key)const{return(Find(key)!=-1);} ///<确认这个数据是否存在 bool KeyExist(const F &key)const{return(Find(key)!=-1);} ///<确认这个数据是否存在
bool ValueExist(const T &value)const{return(FindByValue(value)!=-1);} ///<确认这个数据是否存在 bool ValueExist(const T &value)const{return(FindByValue(value)!=-1);} ///<确认这个数据是否存在
bool Check(const F &key,const T &value)const; ///<确认数据是否是这个 bool Check(const F &key,const T &value)const; ///<确认数据是否是这个
virtual bool Get(const F &,T &)const; ///<取得数据 virtual bool Get(const F &,T &) const; ///<取得数据
virtual bool Delete(const F &,T &); ///<将指定数据从列表中移除,并获得这个数据 virtual bool Delete(const F &,T &); ///<将指定数据从列表中移除,并获得这个数据
virtual bool DeleteByKey(const F &); ///<根据索引将指定数据从列表中移除 virtual bool DeleteByKey(const F &); ///<根据索引将指定数据从列表中移除
virtual int DeleteByKey(const F *,const int); ///<根据索引将指定数据从列表中批量移除 virtual int DeleteByKey(const F *,const int); ///<根据索引将指定数据从列表中批量移除
@ -93,17 +93,17 @@ namespace hgl
return count; return count;
} }
IDItem *GetItem(int n)const{return GetObject(data_list,n);} ///<取指定序号的数据 IDItem *GetItem(int n){return GetObject(data_list,n);} ///<取指定序号的数据
bool Get(int,F &,T &)const; ///<取指定序号的数据 bool Get(int,F &,T &) const; ///<取指定序号的数据
bool GetKey(int,F &)const; ///<取指定序号的索引 bool GetKey(int,F &); ///<取指定序号的索引
bool GetValue(int,T &)const; ///<取指定序号的数据 bool GetValue(int,T &); ///<取指定序号的数据
bool SetValueBySerial(int,T &); ///<根据序号设置数据 bool SetValueBySerial(int,T &); ///<根据序号设置数据
void operator=(const _Map<F,T,IDItem> &); ///<操作符重载,复制一个列表 void operator=(const _Map<F,T,IDItem> &); ///<操作符重载,复制一个列表
void Enum(void (*enum_func)(const F &,T)); ///<枚举所有数据项 void Enum(void (*enum_func)(const F &,T)); ///<枚举所有数据项
void EnumKey(void (*enum_func)(const F &))const; ///<枚举所有索引 void EnumKey(void (*enum_func)(const F &)); ///<枚举所有索引
void EnumValue(void (*enum_func)(T)); ///<枚举所有数值 void EnumValue(void (*enum_func)(T)); ///<枚举所有数值
void EnumValue(bool (*enum_func)(T)); ///<枚举所有数值 void EnumValue(bool (*enum_func)(T)); ///<枚举所有数值