ULRE/example/Vulkan/VKVertexInput.cpp

39 lines
1.0 KiB
C++
Raw Normal View History

#include"VKVertexInput.h"
VK_NAMESPACE_BEGIN
//struct VertexInputBuffer
//{
// //按API可以一个binding绑多个attrib但我们仅支持1v1
//
// VkVertexInputBindingDescription binding;
// VkVertexInputAttributeDescription attrib;
// Buffer *buf;
//};
bool VertexInput::Add(VertexBuffer *buf,bool instance)
{
if(!buf)
return(false);
const int binding_index=vib_list.GetCount(); //参考opengl vab,binding_index必须从0开始紧密排列。对应在vkCmdBindVertexBuffer中的缓冲区索引
VkVertexInputBindingDescription binding;
VkVertexInputAttributeDescription attrib;
binding.binding=binding_index;
binding.stride=buf->GetStride();
binding.inputRate=instance?VK_VERTEX_INPUT_RATE_INSTANCE:VK_VERTEX_INPUT_RATE_VERTEX;
attrib.binding=binding_index;
attrib.location=0;
attrib.format=buf->GetFormat();
attrib.offset=0;
vib_list.Add(new VertexInputBuffer(binding,attrib,buf));
buf_list.Add(buf->GetBuffer());
return(true);
}
VK_NAMESPACE_END