修正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); return(true);
} }
bool CommandBuffer::Bind(VertexInput *vi,const VkDeviceSize offset) bool CommandBuffer::Bind(VertexInput *vi)
{ {
if(!vi) if(!vi)
return(false); return(false);
const List<VkBuffer> &buf_list=vi->GetBufferList(); const uint count=vi->GetCount();
if(buf_list.GetCount()<=0) if(count<=0)
return(false); return(false);
vkCmdBindVertexBuffers(cmd_buf,0,buf_list.GetCount(),buf_list.GetData(),&offset); vkCmdBindVertexBuffers(cmd_buf,0,count,vi->GetBuffer(),vi->GetOffset());
return(true); return(true);
} }

View File

@ -44,7 +44,7 @@ public:
bool Begin(RenderPass *rp,Framebuffer *fb); bool Begin(RenderPass *rp,Framebuffer *fb);
bool Bind(Pipeline *p); bool Bind(Pipeline *p);
bool Bind(PipelineLayout *pl); 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);
void Draw(const uint32_t vertex_count,const uint32_t instance_count,const uint32_t first_vertex=0,const uint32_t first_instance=0); 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(); bool End();

View File

@ -2,7 +2,7 @@
#include"VKBuffer.h" #include"VKBuffer.h"
VK_NAMESPACE_BEGIN 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) if(!buf)
return(false); return(false);
@ -19,10 +19,11 @@ bool VertexInput::Add(uint32_t location,VertexBuffer *buf,bool instance)
attrib.binding=binding_index; attrib.binding=binding_index;
attrib.location=location; attrib.location=location;
attrib.format=buf->GetFormat(); attrib.format=buf->GetFormat();
attrib.offset=0; attrib.offset=offset;
vib_list.Add(new VertexInputBuffer(binding,attrib,buf)); vib_list.Add(new VertexInputBuffer(binding,attrib,buf));
buf_list.Add(buf->GetBuffer()); buf_list.Add(buf->GetBuffer());
buf_offset.Add(offset);
binding_list.Add(binding); binding_list.Add(binding);
attribute_list.Add(attrib); attribute_list.Add(attrib);

View File

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

View File

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