ULRE/example/Vulkan/VKVertexInput.cpp

46 lines
1.4 KiB
C++
Raw Normal View History

#include"VKVertexInput.h"
VK_NAMESPACE_BEGIN
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());
binding_list.Add(binding);
attribute_list.Add(attrib);
return(true);
}
const VkPipelineVertexInputStateCreateInfo VertexInput::GetPipelineVertexInputStateCreateInfo()const
{
VkPipelineVertexInputStateCreateInfo vertexInputInfo = {};
vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
vertexInputInfo.vertexBindingDescriptionCount = binding_list.GetCount();
vertexInputInfo.pVertexBindingDescriptions = binding_list.GetData();
vertexInputInfo.vertexAttributeDescriptionCount = attribute_list.GetCount();
vertexInputInfo.pVertexAttributeDescriptions = attribute_list.GetData();
return vertexInputInfo;
}
VK_NAMESPACE_END