using index buffer
This commit is contained in:
parent
eb269cc88e
commit
a6f4b253ae
1 changed files with 38 additions and 9 deletions
47
main.cpp
47
main.cpp
|
|
@ -45,11 +45,14 @@ const std::vector<const char *> gValidationLayers = {
|
|||
};
|
||||
|
||||
const std::vector<Vertex> vertices = {
|
||||
{{0.f, -0.5f}, {1.f, 0.f, 0.f}},
|
||||
{{0.5f, 0.5f}, {0.f, 1.f, 0.f}},
|
||||
{{-0.5f, 0.5f}, {0.f, 0.f, 1.f}},
|
||||
{{-0.5f, -0.5f}, {1.f, 0.f, 0.f}},
|
||||
{{0.5f, -0.5f}, {0.f, 1.f, 0.f}},
|
||||
{{0.5f, 0.5f}, {0.f, 0.f, 1.f}},
|
||||
{{-0.5f, 0.5f}, {1.f, 1.f, 1.f}},
|
||||
};
|
||||
|
||||
const std::vector<uint16_t > indices = { 0, 1, 2, 2, 3, 0 };
|
||||
|
||||
class Application {
|
||||
public:
|
||||
void run() {
|
||||
|
|
@ -107,6 +110,7 @@ private:
|
|||
createSynchronizationObjects();
|
||||
|
||||
createVertexBuffer();
|
||||
createIndexBuffer();
|
||||
}
|
||||
|
||||
void mainLoop() {
|
||||
|
|
@ -782,7 +786,32 @@ private:
|
|||
}
|
||||
|
||||
throw std::runtime_error("no suitable memory for vertex buffer found");
|
||||
return {};
|
||||
}
|
||||
|
||||
void createIndexBuffer() {
|
||||
VkDeviceSize size = sizeof(indices[0]) * indices.size();
|
||||
|
||||
VkBuffer stagingBuffer;
|
||||
VkDeviceMemory stagingBufferMemory;
|
||||
|
||||
createBuffer(&stagingBuffer, &stagingBufferMemory,
|
||||
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, size,
|
||||
VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
|
||||
|
||||
{
|
||||
void* memory;
|
||||
vkMapMemory(mDevice, stagingBufferMemory, 0, size, 0, &memory);
|
||||
memcpy(memory, indices.data(), size);
|
||||
vkUnmapMemory(mDevice, stagingBufferMemory);
|
||||
}
|
||||
|
||||
createBuffer(&mIndexBuffer, &mIndexBufferMemory,
|
||||
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, size,
|
||||
VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT);
|
||||
|
||||
copyBuffer(stagingBuffer, mIndexBuffer, size);
|
||||
|
||||
destroyBuffer(stagingBuffer, stagingBufferMemory);
|
||||
}
|
||||
|
||||
void createVertexBuffer() {
|
||||
|
|
@ -931,8 +960,9 @@ private:
|
|||
VkBuffer vertexBuffers[] = { mVertexBuffer };
|
||||
VkDeviceSize offsets[] = { 0 };
|
||||
vkCmdBindVertexBuffers(commandBuffer, 0, 1, vertexBuffers, offsets);
|
||||
vkCmdBindIndexBuffer(commandBuffer, mIndexBuffer, 0, VK_INDEX_TYPE_UINT16);
|
||||
|
||||
vkCmdDraw(commandBuffer, vertices.size(), 1, 0, 0);
|
||||
vkCmdDrawIndexed(commandBuffer, indices.size(), 1, 0, 0, 0);
|
||||
|
||||
vkCmdEndRenderPass(commandBuffer);
|
||||
|
||||
|
|
@ -1014,10 +1044,6 @@ private:
|
|||
*/
|
||||
}
|
||||
|
||||
void createBuffer() {
|
||||
|
||||
}
|
||||
|
||||
static VkVertexInputBindingDescription getShaderVertexInputDescription() {
|
||||
return {
|
||||
.binding = 0,
|
||||
|
|
@ -1054,6 +1080,7 @@ private:
|
|||
|
||||
void cleanup() {
|
||||
destroyBuffer(mVertexBuffer, mVertexBufferMemory);
|
||||
destroyBuffer(mIndexBuffer, mIndexBufferMemory);
|
||||
|
||||
destroySynchronizationObjects();
|
||||
|
||||
|
|
@ -1115,6 +1142,8 @@ private:
|
|||
|
||||
VkBuffer mVertexBuffer = VK_NULL_HANDLE;
|
||||
VkDeviceMemory mVertexBufferMemory = VK_NULL_HANDLE;
|
||||
VkBuffer mIndexBuffer = VK_NULL_HANDLE;
|
||||
VkDeviceMemory mIndexBufferMemory = VK_NULL_HANDLE;
|
||||
};
|
||||
|
||||
int main() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue