ULRE/example/Vulkan/VKVertexAttributeBinding.cpp

82 lines
1.9 KiB
C++
Raw Normal View History

2019-04-26 22:39:27 +08:00
#include"VKVertexAttributeBinding.h"
#include"VKShaderModule.h"
2019-04-26 22:39:27 +08:00
VK_NAMESPACE_BEGIN
VertexAttributeBinding::VertexAttributeBinding(VertexShaderModule *s)
2019-04-26 22:39:27 +08:00
{
vsm=s;
2019-04-26 22:39:27 +08:00
attr_count=vsm->GetAttrCount();
2019-04-26 22:39:27 +08:00
if(attr_count<=0)
2019-04-26 22:39:27 +08:00
{
binding_list=nullptr;
attribute_list=nullptr;
2019-04-26 22:39:27 +08:00
return;
}
binding_list=hgl_copy_new(attr_count,vsm->GetDescList());
attribute_list=hgl_copy_new(attr_count,vsm->GetAttrList());
2019-04-26 22:39:27 +08:00
}
VertexAttributeBinding::~VertexAttributeBinding()
{
delete[] attribute_list;
2019-04-26 22:39:27 +08:00
delete[] binding_list;
vsm->Release(this);
2019-04-26 22:39:27 +08:00
}
const uint VertexAttributeBinding::GetBinding(const UTF8String &name)
{
return vsm->GetBinding(name);
}
2019-04-26 22:39:27 +08:00
bool VertexAttributeBinding::SetInstance(const uint index,bool instance)
{
if(index>=attr_count)return(false);
2019-04-26 22:39:27 +08:00
binding_list[index].inputRate=instance?VK_VERTEX_INPUT_RATE_INSTANCE:VK_VERTEX_INPUT_RATE_VERTEX;
return(true);
}
bool VertexAttributeBinding::SetStride(const uint index,const uint32_t &stride)
2019-04-26 22:39:27 +08:00
{
if(index>=attr_count)return(false);
binding_list[index].stride=stride;
return(true);
2019-04-26 22:39:27 +08:00
}
bool VertexAttributeBinding::SetFormat(const uint index,const VkFormat &format)
2019-04-27 00:48:49 +08:00
{
if(index>=attr_count)return(false);
2019-04-27 00:48:49 +08:00
attribute_list[index].format=format;
2019-04-27 00:48:49 +08:00
return(true);
}
bool VertexAttributeBinding::SetOffset(const uint index,const uint32_t offset)
2019-04-27 00:48:49 +08:00
{
if(index>=attr_count)return(false);
attribute_list[index].offset=offset;
return(true);
2019-04-27 00:48:49 +08:00
}
2019-04-26 22:39:27 +08:00
void VertexAttributeBinding::Write(VkPipelineVertexInputStateCreateInfo &vis_create_info) const
{
const uint32_t count=vsm->GetAttrCount();
2019-04-26 22:39:27 +08:00
vis_create_info.vertexBindingDescriptionCount = count;
vis_create_info.pVertexBindingDescriptions = binding_list;
vis_create_info.vertexAttributeDescriptionCount = count;
vis_create_info.pVertexAttributeDescriptions = attribute_list;
2019-04-26 22:39:27 +08:00
}
VK_NAMESPACE_END