diff --git a/example/Vulkan/VKCommandBuffer.cpp b/example/Vulkan/VKCommandBuffer.cpp index 5aa7fdde..a7e87657 100644 --- a/example/Vulkan/VKCommandBuffer.cpp +++ b/example/Vulkan/VKCommandBuffer.cpp @@ -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 &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); } diff --git a/example/Vulkan/VKCommandBuffer.h b/example/Vulkan/VKCommandBuffer.h index 3f338a67..307e4100 100644 --- a/example/Vulkan/VKCommandBuffer.h +++ b/example/Vulkan/VKCommandBuffer.h @@ -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(); diff --git a/example/Vulkan/VKVertexInput.cpp b/example/Vulkan/VKVertexInput.cpp index a756c878..5f50aa15 100644 --- a/example/Vulkan/VKVertexInput.cpp +++ b/example/Vulkan/VKVertexInput.cpp @@ -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); diff --git a/example/Vulkan/VKVertexInput.h b/example/Vulkan/VKVertexInput.h index 75f19e90..995e93ed 100644 --- a/example/Vulkan/VKVertexInput.h +++ b/example/Vulkan/VKVertexInput.h @@ -31,6 +31,7 @@ class VertexInput ObjectList vib_list; List buf_list; + List buf_offset; List binding_list; List 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 &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 diff --git a/example/Vulkan/main.cpp b/example/Vulkan/main.cpp index 2435217f..005f1b2c 100644 --- a/example/Vulkan/main.cpp +++ b/example/Vulkan/main.cpp @@ -214,7 +214,7 @@ int main(int,char **) device->Wait(); device->QueuePresent(); - wait_seconds(1); + wait_seconds(3); for(int i=0;i