diff --git a/example/common/VulkanAppFramework.h b/example/common/VulkanAppFramework.h index 6111d34c..1ca00e21 100644 --- a/example/common/VulkanAppFramework.h +++ b/example/common/VulkanAppFramework.h @@ -225,12 +225,7 @@ public: cb->BindPipeline(ri->GetPipeline()); cb->BindDescriptorSets(ri->GetMaterial()); cb->BindVBO(ri); - - if (vid->ib_access->buffer) - cb->DrawIndexed(vid->ib_access->buffer->GetCount()); - else - cb->Draw(vid->vertex_count); - + cb->Draw(vid); cb->EndRenderPass(); cb->End(); diff --git a/inc/hgl/graph/VK.h b/inc/hgl/graph/VK.h index e628a6de..bdca499b 100644 --- a/inc/hgl/graph/VK.h +++ b/inc/hgl/graph/VK.h @@ -54,6 +54,8 @@ class DeviceMemory; class DeviceBuffer; struct DeviceBufferData; +struct VertexInputData; + class VertexAttribBuffer; using VAB=VertexAttribBuffer; diff --git a/inc/hgl/graph/VKCommandBuffer.h b/inc/hgl/graph/VKCommandBuffer.h index 10e20071..06cb9bb7 100644 --- a/inc/hgl/graph/VKCommandBuffer.h +++ b/inc/hgl/graph/VKCommandBuffer.h @@ -200,6 +200,8 @@ public: //draw void DrawIndirect (VkBuffer buf, uint32_t drawCount,uint32_t stride=sizeof(VkDrawIndirectCommand )){return DrawIndirect( buf,0,drawCount,stride);} void DrawIndexedIndirect(VkBuffer buf, uint32_t drawCount,uint32_t stride=sizeof(VkDrawIndexedIndirectCommand )){return DrawIndexedIndirect( buf,0,drawCount,stride);} + void Draw (const VertexInputData *vid); + public: //dynamic state };//class RenderCmdBuffer:public GPUCmdBuffer diff --git a/src/SceneGraph/Vulkan/VKCommandBufferRender.cpp b/src/SceneGraph/Vulkan/VKCommandBufferRender.cpp index 2a712a3b..f8241d7f 100644 --- a/src/SceneGraph/Vulkan/VKCommandBufferRender.cpp +++ b/src/SceneGraph/Vulkan/VKCommandBufferRender.cpp @@ -183,4 +183,12 @@ void RenderCmdBuffer::DrawIndexedIndirect( VkBuffer buffer, for(uint32_t i=0;iib_access->buffer) + DrawIndexed(vid->ib_access->buffer->GetCount()); + else + Draw(vid->vertex_count); +} VK_NAMESPACE_END