ULRE/example/Vulkan/VKVertexInput.h

70 lines
1.9 KiB
C
Raw Normal View History

#ifndef HGL_GRAPH_VULKAN_VERTEX_INPUT_INCLUDE
#define HGL_GRAPH_VULKAN_VERTEX_INPUT_INCLUDE
#include"VK.h"
VK_NAMESPACE_BEGIN
2019-04-18 22:10:24 +08:00
class VertexBuffer;
2019-04-25 14:10:18 +08:00
class IndexBuffer;
2019-04-18 22:10:24 +08:00
/**
* OpenGL的VAB<br>
* BUFFER中包括多种数据
*/
class VertexInput
{
struct VertexInputBuffer
{
//按API可以一个binding绑多个attrib但我们仅支持1v1
VkVertexInputBindingDescription binding;
VkVertexInputAttributeDescription attrib;
VertexBuffer *buffer;
public:
VertexInputBuffer(VkVertexInputBindingDescription bind,VkVertexInputAttributeDescription attr,VertexBuffer *buf)
{
binding=bind;
attrib=attr;
buffer=buf;
}
};
2019-04-25 14:10:18 +08:00
ObjectList<VertexInputBuffer> vib_list;
List<VkBuffer> buf_list;
List<VkDeviceSize> buf_offset;
List<VkVertexInputBindingDescription> binding_list;
List<VkVertexInputAttributeDescription> attribute_list;
2019-04-25 14:10:18 +08:00
IndexBuffer *indices_buffer=nullptr;
VkDeviceSize indices_offset=0;
public:
VertexInput()=default;
virtual ~VertexInput()=default;
bool Add(uint32_t location,VertexBuffer *,bool instance=false,VkDeviceSize offset=0);
2019-04-25 14:10:18 +08:00
bool AddIndices(IndexBuffer *ib,VkDeviceSize offset=0)
{
if(!ib)return(false);
indices_buffer=ib;
indices_offset=offset;
}
public:
const uint GetCount ()const{return buf_list.GetCount();}
const VkBuffer * GetBuffer ()const{return buf_list.GetData();}
const VkDeviceSize * GetOffset ()const{return buf_offset.GetData();}
2019-04-25 14:10:18 +08:00
IndexBuffer * GetIndexBuffer()const{return indices_buffer;}
const VkDeviceSize GetIndexOffset()const{return indices_offset;}
const VkPipelineVertexInputStateCreateInfo GetPipelineVertexInputStateCreateInfo()const;
};//class VertexInput
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_VERTEX_INPUT_INCLUDE