ULRE/inc/hgl/graph/vulkan/VKCommandBuffer.h

75 lines
2.2 KiB
C
Raw Normal View History

#ifndef HGL_GRAPH_VULKAN_COMMAND_BUFFER_INCLUDE
#define HGL_GRAPH_VULKAN_COMMAND_BUFFER_INCLUDE
#include"VK.h"
VK_NAMESPACE_BEGIN
2019-04-18 22:10:24 +08:00
class RenderPass;
class Framebuffer;
class Pipeline;
class Material;
class Renderable;
2019-04-16 13:21:21 +08:00
2019-04-18 22:10:24 +08:00
class CommandBuffer
{
VkDevice device;
VkCommandPool pool;
VkCommandBuffer cmd_buf;
2019-04-16 13:21:21 +08:00
2019-04-18 22:10:24 +08:00
VkClearValue clear_values[2];
VkRect2D render_area;
VkViewport viewport;
2019-04-16 13:21:21 +08:00
2019-04-18 22:10:24 +08:00
public:
2019-04-16 13:21:21 +08:00
2019-04-20 02:28:57 +08:00
CommandBuffer(VkDevice dev,const VkExtent2D &extent,VkCommandPool cp,VkCommandBuffer cb);
2019-04-18 22:10:24 +08:00
~CommandBuffer();
operator VkCommandBuffer(){return cmd_buf;}
2019-04-18 22:10:24 +08:00
void SetRenderArea(const VkRect2D &ra){render_area=ra;}
void SetClearColor(float r,float g,float b,float a=1.0f)
{
clear_values[0].color.float32[0]=r;
clear_values[0].color.float32[1]=g;
clear_values[0].color.float32[2]=b;
clear_values[0].color.float32[3]=a;
}
void SetClearDepthStencil(float d=1.0f,float s=0)
{
clear_values[1].depthStencil.depth=d;
clear_values[1].depthStencil.stencil=s;
}
2019-04-25 11:42:00 +08:00
//以上设定在Begin开始后即不可改变
bool Begin();
bool BeginRenderPass(RenderPass *rp,Framebuffer *fb);
2019-04-25 11:42:00 +08:00
bool Bind(Pipeline *p);
bool Bind(Material *);
bool Bind(Renderable *);
void EndRenderPass();
2019-04-25 11:42:00 +08:00
bool End();
public:
2019-04-25 11:38:57 +08:00
void SetDepthBias(float constant_factor,float clamp,float slope_factor);
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 SetLineWidth(float);
2019-04-25 11:42:00 +08:00
public:
void Draw(const uint32_t vertex_count);
void Draw(const uint32_t vertex_count,const uint32_t instance_count,const uint32_t first_vertex=0,const uint32_t first_instance=0);
2019-04-25 14:10:18 +08:00
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);
2019-04-18 22:10:24 +08:00
};//class CommandBuffer
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_COMMAND_BUFFER_INCLUDE