修正vkCmdBindVertexBuffers的错误用法,VertexInput类连动更改
This commit is contained in:
parent
31f92f8de6
commit
0f389f907d
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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];
|
||||
|
Loading…
x
Reference in New Issue
Block a user