From e44a89af785c01d5cf75fc231fe18c0022a3e4c9 Mon Sep 17 00:00:00 2001 From: HuYingzhuo Date: Mon, 29 Apr 2019 14:53:56 +0800 Subject: [PATCH] =?UTF-8?q?CommandBuffer=E4=B8=AD=E7=8B=AC=E7=AB=8BBeginRe?= =?UTF-8?q?nderPass/EndRenderPass?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/Vulkan/VKCommandBuffer.cpp | 19 +++++++++++++++---- example/Vulkan/VKCommandBuffer.h | 4 +++- example/Vulkan/main.cpp | 16 +++++++++------- inc/hgl/type/Map.cpp | 6 +++--- inc/hgl/type/Map.h | 12 ++++++------ 5 files changed, 36 insertions(+), 21 deletions(-) diff --git a/example/Vulkan/VKCommandBuffer.cpp b/example/Vulkan/VKCommandBuffer.cpp index 493773ba..652f638a 100644 --- a/example/Vulkan/VKCommandBuffer.cpp +++ b/example/Vulkan/VKCommandBuffer.cpp @@ -31,8 +31,7 @@ CommandBuffer::~CommandBuffer() VkCommandBuffer cmd_bufs[1] = {cmd_buf}; vkFreeCommandBuffers(device, pool, 1, cmd_bufs); } - -bool CommandBuffer::Begin(RenderPass *rp,Framebuffer *fb) +bool CommandBuffer::Begin() { VkCommandBufferBeginInfo cmd_buf_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) return(false); + return(true); +} + +bool CommandBuffer::BeginRenderPass(RenderPass *rp,Framebuffer *fb) +{ VkRenderPassBeginInfo rp_begin; 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); } -bool CommandBuffer::End() +void CommandBuffer::EndRenderPass() { 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 diff --git a/example/Vulkan/VKCommandBuffer.h b/example/Vulkan/VKCommandBuffer.h index 423bed92..049cc0f4 100644 --- a/example/Vulkan/VKCommandBuffer.h +++ b/example/Vulkan/VKCommandBuffer.h @@ -43,10 +43,12 @@ public: //以上设定在Begin开始后即不可改变 - bool Begin(RenderPass *rp,Framebuffer *fb); + bool Begin(); + bool BeginRenderPass(RenderPass *rp,Framebuffer *fb); bool Bind(Pipeline *p); bool Bind(Material *); bool Bind(Renderable *); + void EndRenderPass(); bool End(); public: diff --git a/example/Vulkan/main.cpp b/example/Vulkan/main.cpp index ce98218e..76021724 100644 --- a/example/Vulkan/main.cpp +++ b/example/Vulkan/main.cpp @@ -19,8 +19,8 @@ using namespace hgl; using namespace hgl::graph; -constexpr uint32_t SCREEN_WIDTH=1280; -constexpr uint32_t SCREEN_HEIGHT=720; +constexpr uint32_t SCREEN_WIDTH=128; +constexpr uint32_t SCREEN_HEIGHT=128; struct WorldConfig { @@ -199,11 +199,13 @@ private: if(!cmd_buf) return(false); - cmd_buf->Begin(device->GetRenderPass(),device->GetFramebuffer(0)); - cmd_buf->Bind(pipeline); - cmd_buf->Bind(material); - cmd_buf->Bind(render_obj); - cmd_buf->Draw(VERTEX_COUNT); + cmd_buf->Begin(); + cmd_buf->BeginRenderPass(device->GetRenderPass(),device->GetFramebuffer(0)); + cmd_buf->Bind(pipeline); + cmd_buf->Bind(material); + cmd_buf->Bind(render_obj); + cmd_buf->Draw(VERTEX_COUNT); + cmd_buf->EndRenderPass(); cmd_buf->End(); return(true); diff --git a/inc/hgl/type/Map.cpp b/inc/hgl/type/Map.cpp index 2e709e9a..d3b569c2 100644 --- a/inc/hgl/type/Map.cpp +++ b/inc/hgl/type/Map.cpp @@ -258,7 +258,7 @@ namespace hgl * @return 是否取得成功 */ template - bool _Map::GetKey(int index,F &f) const + bool _Map::GetKey(int index,F &f) { if(index<0||index>=data_list.GetCount())return(false); @@ -276,7 +276,7 @@ namespace hgl * @return 是否取得成功 */ template - bool _Map::GetValue(int index,T &t) const + bool _Map::GetValue(int index,T &t) { if(index<0||index>=data_list.GetCount())return(false); @@ -525,7 +525,7 @@ namespace hgl } template - void _Map::EnumKey(void (*enum_func)(const F &))const + void _Map::EnumKey(void (*enum_func)(const F &)) { const int count=data_list.GetCount(); diff --git a/inc/hgl/type/Map.h b/inc/hgl/type/Map.h index c10c14ee..bbcc0628 100644 --- a/inc/hgl/type/Map.h +++ b/inc/hgl/type/Map.h @@ -40,7 +40,7 @@ namespace hgl bool KeyExist(const F &key)const{return(Find(key)!=-1);} ///<确认这个数据是否存在 bool ValueExist(const T &value)const{return(FindByValue(value)!=-1);} ///<确认这个数据是否存在 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 DeleteByKey(const F &); ///<根据索引将指定数据从列表中移除 virtual int DeleteByKey(const F *,const int); ///<根据索引将指定数据从列表中批量移除 @@ -93,17 +93,17 @@ namespace hgl return count; } - IDItem *GetItem(int n)const{return GetObject(data_list,n);} ///<取指定序号的数据 - bool Get(int,F &,T &)const; ///<取指定序号的数据 - bool GetKey(int,F &)const; ///<取指定序号的索引 - bool GetValue(int,T &)const; ///<取指定序号的数据 + IDItem *GetItem(int n){return GetObject(data_list,n);} ///<取指定序号的数据 + bool Get(int,F &,T &) const; ///<取指定序号的数据 + bool GetKey(int,F &); ///<取指定序号的索引 + bool GetValue(int,T &); ///<取指定序号的数据 bool SetValueBySerial(int,T &); ///<根据序号设置数据 void operator=(const _Map &); ///<操作符重载,复制一个列表 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(bool (*enum_func)(T)); ///<枚举所有数值