绑定顶点缓冲

扩展createCommandBuffers函数,使用顶点缓冲进行渲染操作:

vkCmdBindPipeline(commandBuffers[i],
VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline);

VkBuffer vertexBuffers[] = {vertexBuffer};
VkDeviceSize offsets[] = {0};
vkCmdBindVertexBuffers(commandBuffers[i], 0, 1, vertexBuffers, offsets);

vkCmdDraw(commandBuffers[i],
static_cast<uint32_t>(vertices.size()), 1, 0, 0);

我们使用vkCmdBindVertexBuffers函数来绑定顶点缓冲。它的第二和第三个参数用于指定偏移值和我们要绑定的顶点缓冲的数量。它的最后两个参数用于指定需要绑定的顶点缓冲数组以及顶点数据在顶点缓冲中的偏移值数组。我们还需要修改vkCmdDraw函数调用,使用顶点缓冲中的顶点个数替换之前硬编码的数字3。

现在编译运行程序,我们可以看到下面的窗口:

image

尝试修改顶点的颜色数据:

const std::vector<Vertex> vertices = {
        {{0.0f, -0.5f}, {1.0f, 1.0f, 1.0f}},
        {{0.5f, 0.5f}, {0.0f, 1.0f, 0.0f}},
        {{-0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}}
};

再次编译运行程序,可以看到:

image

下一章节,我们会介绍一种更高效的写入顶点数据到顶点缓冲的方式。

本章节代码:

C++:

https://vulkan-tutorial.com/code/18_vertex_buffer.cpp

Vertex Shader:

https://vulkan-tutorial.com/code/17_shader_vertexbuffer.vert

Fragment Shader:

https://vulkan-tutorial.com/code/17_shader_vertexbuffer.frag