CommandBuffer将部分函数移到.h中
This commit is contained in:
parent
a80f4bc9fa
commit
b428ced06e
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user