Vinculando o buffer de vértice
Tudo o que resta agora é vincular o buffer de vértice durante as operações de renderização. Nós vamos estender a função startNextFrame
para fazer isso.
...
VkBuffer vertexBuffers[] = {m_object->vertexBuffer};
VkDeviceSize offsets[] = {0};
m_deviceFunctions->vkCmdBindVertexBuffers(
commandBuffer,
0,
1,
vertexBuffers,
offsets
);
VkBuffer vertexBuffers[] = {m_object->vertexBuffer};
VkDeviceSize offsets[] = {0};
m_deviceFunctions->vkCmdBindVertexBuffers(
commandBuffer,
0,
1,
vertexBuffers,
offsets
);
m_deviceFunctions->vkCmdDraw(
commandBuffer,
static_cast<uint32_t>(m_object->model->vertices.size()),
1,
0,
0
);
m_deviceFunctions->vkCmdEndRenderPass(commandBuffer);
A função vkCmdBindVertexBuffers
é usada para vincular buffers de vértices a ligações, como as que configuramos anteriormente. Os dois primeiros parâmetros, além do buffer de comando, especificam o deslocamento e o número de ligações para as quais especificaremos os buffers de vértices. Os dois últimos parâmetros especificam o array de buffers de vértices para ligar e os offsets de bytes para iniciar a leitura de dados de vértices. Também devemos alterar a chamada para vkCmdDraw
para passar o número de vértices no buffer, em oposição ao número codificado 3
.
Se executarmos o programa agora e deveremos ver o mesmo triângulo que da última vez, só que agora os dados dos vértices são lidos a partir de um buffer de vértice.
No próximo capítulo, implementaremos o mapeamento de textura para tornar a geometria mais interessante.