CommandBuffer将部分函数移到.h中

This commit is contained in:
hyzboy 2019-05-28 15:07:38 +08:00
parent a80f4bc9fa
commit b428ced06e
2 changed files with 44 additions and 102 deletions

View File

@ -2,6 +2,8 @@
#define HGL_GRAPH_VULKAN_COMMAND_BUFFER_INCLUDE #define HGL_GRAPH_VULKAN_COMMAND_BUFFER_INCLUDE
#include<hgl/graph/vulkan/VK.h> #include<hgl/graph/vulkan/VK.h>
#include<hgl/graph/vulkan/VKPipeline.h>
#include<hgl/graph/vulkan/VKDescriptorSets.h>
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
class CommandBuffer class CommandBuffer
{ {
@ -13,6 +15,8 @@ class CommandBuffer
VkRect2D render_area; VkRect2D render_area;
VkViewport viewport; VkViewport viewport;
VkPipelineLayout pipeline_layout;
public: public:
CommandBuffer(VkDevice dev,const VkExtent2D &extent,VkCommandPool cp,VkCommandBuffer cb); CommandBuffer(VkDevice dev,const VkExtent2D &extent,VkCommandPool cp,VkCommandBuffer cb);
@ -66,30 +70,50 @@ public:
} }
bool BeginRenderPass(RenderPass *rp,Framebuffer *fb); bool BeginRenderPass(RenderPass *rp,Framebuffer *fb);
bool Bind(Pipeline *p);
bool Bind(DescriptorSets *); bool Bind(Pipeline *p)
{
if(!p)return(false);
vkCmdBindPipeline(cmd_buf,VK_PIPELINE_BIND_POINT_GRAPHICS,*p);
return(true);
}
bool Bind(DescriptorSets *dsl)
{
if(!dsl)return(false);
pipeline_layout=dsl->GetPipelineLayout();
vkCmdBindDescriptorSets(cmd_buf,VK_PIPELINE_BIND_POINT_GRAPHICS,pipeline_layout,0,1,dsl->GetDescriptorSets(),0,nullptr);
return(true);
}
void PushConstants(VkShaderStageFlagBits stage_flags,uint32_t offset,uint32_t size,const void *pValues){vkCmdPushConstants(cmd_buf,pipeline_layout,stage_flags,offset,size,pValues);}
bool Bind(Renderable *); bool Bind(Renderable *);
void EndRenderPass();
bool End();
public: void SetViewport(uint32_t first,uint32_t count,const VkViewport *vp){vkCmdSetViewport(cmd_buf,first,count,vp);}
void SetScissor(uint32_t first,uint32_t count,const VkRect2D *sci){vkCmdSetScissor(cmd_buf,first,count,sci);}
void SetDepthBias(float constant_factor,float clamp,float slope_factor); void SetLineWidth(float line_width){vkCmdSetLineWidth(cmd_buf,line_width);}
void SetDepthBounds(float min_db,float max_db);
void SetStencilCompareMask(VkStencilFaceFlags faceMask,uint32_t compareMask);
void SetStencilWriteMask(VkStencilFaceFlags faceMask,uint32_t compareMask);
void SetStencilReference(VkStencilFaceFlags faceMask,uint32_t compareMask);
void SetBlendConstants(const float constants[4]); void SetDepthBias(float constant_factor,float clamp,float slope_factor){vkCmdSetDepthBias(cmd_buf,constant_factor,clamp,slope_factor);}
void SetBlendConstants(const float constants[4]){vkCmdSetBlendConstants(cmd_buf,constants);}
void SetDepthBounds(float min_db,float max_db){vkCmdSetDepthBounds(cmd_buf,min_db,max_db);}
void SetLineWidth(float); void SetStencilCompareMask(VkStencilFaceFlags faceMask,uint32_t compareMask){vkCmdSetStencilCompareMask(cmd_buf,faceMask,compareMask);}
void SetStencilWriteMask(VkStencilFaceFlags faceMask,uint32_t compareMask){vkCmdSetStencilWriteMask(cmd_buf,faceMask,compareMask);}
void SetStencilReference(VkStencilFaceFlags faceMask,uint32_t compareMask){vkCmdSetStencilReference(cmd_buf,faceMask,compareMask);}
public: void Draw(const uint32_t vertex_count){vkCmdDraw(cmd_buf,vertex_count,1,0,0);}
void Draw(const uint32_t vertex_count,const uint32_t instance_count,const uint32_t first_vertex,const uint32_t first_instance){vkCmdDraw(cmd_buf,vertex_count,instance_count,first_vertex,first_instance);}
void DrawIndexed(const uint32_t index_count){vkCmdDrawIndexed(cmd_buf,index_count,1,0,0,0);}
void DrawIndexed(const uint32_t index_count,const uint32_t instance_count,const uint32_t first_index,const uint32_t vertex_offset,const uint32_t first_instance){vkCmdDrawIndexed(cmd_buf,index_count,instance_count,first_index,vertex_offset,first_instance);}
void Draw(const uint32_t vertex_count); void EndRenderPass(){vkCmdEndRenderPass(cmd_buf);}
void Draw(const uint32_t vertex_count,const uint32_t instance_count,const uint32_t first_vertex=0,const uint32_t first_instance=0); bool End(){return(vkEndCommandBuffer(cmd_buf)==VK_SUCCESS);}
void DrawIndexed(const uint32_t index_count);
void DrawIndexed(const uint32_t index_count,const uint32_t instance_count,const uint32_t first_index=0,const uint32_t vertex_offset=0,const uint32_t first_instance=0);
};//class CommandBuffer };//class CommandBuffer
VK_NAMESPACE_END VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_COMMAND_BUFFER_INCLUDE #endif//HGL_GRAPH_VULKAN_COMMAND_BUFFER_INCLUDE

View File

@ -24,6 +24,8 @@ CommandBuffer::CommandBuffer(VkDevice dev,const VkExtent2D &extent,VkCommandPool
render_area.offset.x=0; render_area.offset.x=0;
render_area.offset.y=0; render_area.offset.y=0;
render_area.extent=extent; render_area.extent=extent;
pipeline_layout=nullptr;
} }
CommandBuffer::~CommandBuffer() CommandBuffer::~CommandBuffer()
@ -69,23 +71,7 @@ bool CommandBuffer::BeginRenderPass(RenderPass *rp,Framebuffer *fb)
vkCmdSetViewport(cmd_buf,0,1,&viewport); vkCmdSetViewport(cmd_buf,0,1,&viewport);
vkCmdSetScissor(cmd_buf,0,1,&render_area); vkCmdSetScissor(cmd_buf,0,1,&render_area);
return(true); pipeline_layout=nullptr;
}
bool CommandBuffer::Bind(Pipeline *p)
{
if(!p)return(false);
vkCmdBindPipeline(cmd_buf,VK_PIPELINE_BIND_POINT_GRAPHICS,*p);
return(true);
}
bool CommandBuffer::Bind(DescriptorSets *dsl)
{
if(!dsl)
return(false);
vkCmdBindDescriptorSets(cmd_buf,VK_PIPELINE_BIND_POINT_GRAPHICS,dsl->GetPipelineLayout(),0,1,dsl->GetDescriptorSets(),0,nullptr);
return(true); return(true);
} }
@ -109,72 +95,4 @@ bool CommandBuffer::Bind(Renderable *render_obj)
return(true); return(true);
} }
void CommandBuffer::SetDepthBias(float constant_factor,float clamp,float slope_factor)
{
vkCmdSetDepthBias(cmd_buf,constant_factor,clamp,slope_factor);
}
void CommandBuffer::SetDepthBounds(float min_db,float max_db)
{
vkCmdSetDepthBounds(cmd_buf,min_db,max_db);
}
void CommandBuffer::SetStencilCompareMask(VkStencilFaceFlags faceMask,uint32_t compareMask)
{
vkCmdSetStencilCompareMask(cmd_buf,faceMask,compareMask);
}
void CommandBuffer::SetStencilWriteMask(VkStencilFaceFlags faceMask,uint32_t compareMask)
{
vkCmdSetStencilWriteMask(cmd_buf,faceMask,compareMask);
}
void CommandBuffer::SetStencilReference(VkStencilFaceFlags faceMask,uint32_t compareMask)
{
vkCmdSetStencilReference(cmd_buf,faceMask,compareMask);
}
void CommandBuffer::SetBlendConstants(const float constants[4])
{
vkCmdSetBlendConstants(cmd_buf,constants);
}
void CommandBuffer::SetLineWidth(float line_width)
{
vkCmdSetLineWidth(cmd_buf,line_width);
}
void CommandBuffer::Draw(const uint32_t vertex_count)
{
vkCmdDraw(cmd_buf,vertex_count,1,0,0);
}
void CommandBuffer::Draw(const uint32_t vertex_count,const uint32_t instance_count,const uint32_t first_vertex,const uint32_t first_instance)
{
vkCmdDraw(cmd_buf,vertex_count,instance_count,first_vertex,first_instance);
}
void CommandBuffer::DrawIndexed(const uint32_t index_count)
{
vkCmdDrawIndexed(cmd_buf,index_count,1,0,0,0);
}
void CommandBuffer::DrawIndexed(const uint32_t index_count,const uint32_t instance_count,const uint32_t first_index,const uint32_t vertex_offset,const uint32_t first_instance)
{
vkCmdDrawIndexed(cmd_buf,index_count,instance_count,first_index,vertex_offset,first_instance);
}
void CommandBuffer::EndRenderPass()
{
vkCmdEndRenderPass(cmd_buf);
}
bool CommandBuffer::End()
{
if(vkEndCommandBuffer(cmd_buf)==VK_SUCCESS)
return(true);
return(false);
}
VK_NAMESPACE_END VK_NAMESPACE_END