修正vkCmdBindVertexBuffers的错误用法,VertexInput类连动更改

This commit is contained in:
hyzboy 2019-04-20 19:27:10 +08:00
parent 31f92f8de6
commit 0f389f907d
5 changed files with 15 additions and 12 deletions

View File

@ -83,17 +83,17 @@ bool CommandBuffer::Bind(PipelineLayout *pl)
return(true);
}
bool CommandBuffer::Bind(VertexInput *vi,const VkDeviceSize offset)
bool CommandBuffer::Bind(VertexInput *vi)
{
if(!vi)
return(false);
const List<VkBuffer> &buf_list=vi->GetBufferList();
const uint count=vi->GetCount();
if(buf_list.GetCount()<=0)
if(count<=0)
return(false);
vkCmdBindVertexBuffers(cmd_buf,0,buf_list.GetCount(),buf_list.GetData(),&offset);
vkCmdBindVertexBuffers(cmd_buf,0,count,vi->GetBuffer(),vi->GetOffset());
return(true);
}

View File

@ -44,7 +44,7 @@ public:
bool Begin(RenderPass *rp,Framebuffer *fb);
bool Bind(Pipeline *p);
bool Bind(PipelineLayout *pl);
bool Bind(VertexInput *vi,const VkDeviceSize offset=0);
bool Bind(VertexInput *vi);
void Draw(const uint32_t vertex_count);
void Draw(const uint32_t vertex_count,const uint32_t instance_count,const uint32_t first_vertex=0,const uint32_t first_instance=0);
bool End();

View File

@ -2,7 +2,7 @@
#include"VKBuffer.h"
VK_NAMESPACE_BEGIN
bool VertexInput::Add(uint32_t location,VertexBuffer *buf,bool instance)
bool VertexInput::Add(uint32_t location,VertexBuffer *buf,bool instance,VkDeviceSize offset)
{
if(!buf)
return(false);
@ -14,15 +14,16 @@ bool VertexInput::Add(uint32_t location,VertexBuffer *buf,bool instance)
binding.binding=binding_index;
binding.stride=buf->GetStride();
binding.inputRate=instance?VK_VERTEX_INPUT_RATE_INSTANCE:VK_VERTEX_INPUT_RATE_VERTEX;
binding.inputRate=instance?VK_VERTEX_INPUT_RATE_INSTANCE:VK_VERTEX_INPUT_RATE_VERTEX;
attrib.binding=binding_index;
attrib.location=location;
attrib.format=buf->GetFormat();
attrib.offset=0;
attrib.offset=offset;
vib_list.Add(new VertexInputBuffer(binding,attrib,buf));
buf_list.Add(buf->GetBuffer());
buf_offset.Add(offset);
binding_list.Add(binding);
attribute_list.Add(attrib);

View File

@ -31,6 +31,7 @@ class VertexInput
ObjectList<VertexInputBuffer> vib_list;
List<VkBuffer> buf_list;
List<VkDeviceSize> buf_offset;
List<VkVertexInputBindingDescription> binding_list;
List<VkVertexInputAttributeDescription> attribute_list;
@ -40,12 +41,13 @@ public:
VertexInput()=default;
virtual ~VertexInput()=default;
bool Add(uint32_t location,VertexBuffer *,bool instance=false);
bool Add(uint32_t location,VertexBuffer *,bool instance=false,VkDeviceSize offset=0);
public:
const uint GetCount()const{return buf_list.GetCount();}
const List<VkBuffer> &GetBufferList()const{return buf_list;}
const uint GetCount ()const{return buf_list.GetCount();}
const VkBuffer * GetBuffer ()const{return buf_list.GetData();}
const VkDeviceSize * GetOffset ()const{return buf_offset.GetData();}
const VkPipelineVertexInputStateCreateInfo GetPipelineVertexInputStateCreateInfo()const;
};//class VertexInput

View File

@ -214,7 +214,7 @@ int main(int,char **)
device->Wait();
device->QueuePresent();
wait_seconds(1);
wait_seconds(3);
for(int i=0;i<image_count;i++)
delete fb[i];