ULRE/example/Vulkan/RenderSurface.h

64 lines
2.1 KiB
C
Raw Normal View History

#ifndef HGL_GRAPH_RENDER_SURFACE_INCLUDE
#define HGL_GRAPH_RENDER_SURFACE_INCLUDE
#include<hgl/type/List.h>
#include"VK.h"
#include"Window.h"
#include"RenderSurfaceAttribute.h"
#include"VKBuffer.h"
#include"VKCommandBuffer.h"
2019-04-12 16:39:22 +08:00
//#include"VKDescriptorSet.h"
#include"VKRenderPass.h"
VK_NAMESPACE_BEGIN
using RefRenderSurfaceAttribute=SharedPtr<RenderSurfaceAttribute>;
class RenderSurface
{
RefRenderSurfaceAttribute rsa;
private:
friend RenderSurface *CreateRenderSuface(VkInstance,const PhysicalDevice *,Window *);
RenderSurface(RefRenderSurfaceAttribute &ref_rsa)
{
rsa=ref_rsa;
}
public:
virtual ~RenderSurface()=default;
VkSurfaceKHR GetSurface () {return rsa->surface;}
2019-04-15 22:19:09 +08:00
VkDevice GetDevice () {return rsa->device;}
const PhysicalDevice *GetPhysicalDevice ()const {return rsa->physical_device;}
public:
Buffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
VertexBuffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
#define CREATE_FORMAT_BUFFER_OBJECT(LargeName,type) Buffer *Create##LargeName(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,format,count,sharing_mode);}
CREATE_FORMAT_BUFFER_OBJECT(VBO,VERTEX)
CREATE_FORMAT_BUFFER_OBJECT(IBO,INDEX)
#undef CREATE_FORMAT_BUFFER_OBJECT
#define CREATE_BUFFER_OBJECT(LargeName,type) Buffer *Create##LargeName(VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size,sharing_mode);}
CREATE_BUFFER_OBJECT(UBO,UNIFORM)
CREATE_BUFFER_OBJECT(SBO,STORAGE)
CREATE_BUFFER_OBJECT(INBO,INDIRECT)
#undef CREATE_BUFFER_OBJECT
CommandBuffer * CreateCommandBuffer ();
2019-04-12 16:39:22 +08:00
// DescriptorSet * CreateDescSet(int);
RenderPass *CreateRenderPass();
};//class RenderSurface
VK_NAMESPACE_END
#endif//HGL_GRAPH_RENDER_SURFACE_INCLUDE