完成indexBuffer
							parent
							
								
									b9f19473ef
								
							
						
					
					
						commit
						4406e944f4
					
				| 
						 | 
					@ -122,6 +122,7 @@ void HelloTriangleApplication::initVulkan() {
 | 
				
			||||||
	createCommandPool();
 | 
						createCommandPool();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	createVertexBuffer();
 | 
						createVertexBuffer();
 | 
				
			||||||
 | 
						createIndexBuffer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	createCommandBuffer();
 | 
						createCommandBuffer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -151,6 +152,8 @@ void HelloTriangleApplication::cleanup(GLFWwindow* window) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cleanupSwapChain();
 | 
						cleanupSwapChain();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						vkDestroyBuffer(device, indexBuffer, nullptr);
 | 
				
			||||||
 | 
						vkFreeMemory(device, indexBufferMemory, nullptr);
 | 
				
			||||||
	vkDestroyBuffer(device, vertexBuffer, nullptr);
 | 
						vkDestroyBuffer(device, vertexBuffer, nullptr);
 | 
				
			||||||
	vkFreeMemory(device, vertexBufferMemory, nullptr);
 | 
						vkFreeMemory(device, vertexBufferMemory, nullptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -735,6 +738,28 @@ void HelloTriangleApplication::createVertexBuffer()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void HelloTriangleApplication::createIndexBuffer()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						VkDeviceSize bufferSize = sizeof(indices[0]) * indices.size();
 | 
				
			||||||
 | 
						VkBuffer stagingBuffer;
 | 
				
			||||||
 | 
						VkDeviceMemory stagingBufferMemory;
 | 
				
			||||||
 | 
						createBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, stagingBuffer, stagingBufferMemory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void* data;
 | 
				
			||||||
 | 
						vkMapMemory(device, stagingBufferMemory, 0, bufferSize, 0, &data);
 | 
				
			||||||
 | 
						memcpy(data, indices.data(), (size_t)bufferSize);
 | 
				
			||||||
 | 
						vkUnmapMemory(device, stagingBufferMemory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// host visible buffer as temp buffer
 | 
				
			||||||
 | 
						createBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, indexBuffer, indexBufferMemory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// move the vertex data to the device local buffer
 | 
				
			||||||
 | 
						copyBuffer(stagingBuffer, indexBuffer, bufferSize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						vkDestroyBuffer(device, stagingBuffer, nullptr);
 | 
				
			||||||
 | 
						vkFreeMemory(device, stagingBufferMemory, nullptr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void HelloTriangleApplication::createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VkDeviceMemory& bufferMemory)
 | 
					void HelloTriangleApplication::createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VkDeviceMemory& bufferMemory)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	VkBufferCreateInfo bufferInfo{};
 | 
						VkBufferCreateInfo bufferInfo{};
 | 
				
			||||||
| 
						 | 
					@ -879,8 +904,10 @@ void HelloTriangleApplication::recordCommandBuffer(VkCommandBuffer commandBuffer
 | 
				
			||||||
	VkBuffer vertexBuffers[] = { vertexBuffer };
 | 
						VkBuffer vertexBuffers[] = { vertexBuffer };
 | 
				
			||||||
	VkDeviceSize offsets[] = { 0 };
 | 
						VkDeviceSize offsets[] = { 0 };
 | 
				
			||||||
	vkCmdBindVertexBuffers(commandBuffer, 0, 1, vertexBuffers, offsets);
 | 
						vkCmdBindVertexBuffers(commandBuffer, 0, 1, vertexBuffers, offsets);
 | 
				
			||||||
 | 
						// bind indexBuffer
 | 
				
			||||||
 | 
						vkCmdBindIndexBuffer(commandBuffer, indexBuffer, 0, VK_INDEX_TYPE_UINT16);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	vkCmdDraw(commandBuffer, 3, 1, 0, 0);
 | 
						vkCmdDrawIndexed(commandBuffer, static_cast<uint32_t>(indices.size()), 1, 0, 0, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vkCmdEndRenderPass(commandBuffer);
 | 
						vkCmdEndRenderPass(commandBuffer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -112,13 +112,20 @@ private:
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const std::vector<Vertex> vertices = {
 | 
						const std::vector<Vertex> vertices = {
 | 
				
			||||||
	{{0.0f, -0.5f}, {1.0f, 1.0f, 1.0f}},
 | 
						{{-0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}},
 | 
				
			||||||
	{{0.5f, 0.5f}, {0.0f, 1.0f, 0.0f}},
 | 
						{{0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}},
 | 
				
			||||||
	{{-0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}}
 | 
						{{0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}},
 | 
				
			||||||
 | 
						{{-0.5f,0.5f}, {1.0f,1.0f,1.0f}}
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const std::vector<uint16_t> indices = {
 | 
				
			||||||
 | 
							0,1,2,2,3,0
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	VkBuffer vertexBuffer;
 | 
						VkBuffer vertexBuffer;
 | 
				
			||||||
	VkDeviceMemory vertexBufferMemory;
 | 
						VkDeviceMemory vertexBufferMemory;
 | 
				
			||||||
 | 
						VkBuffer indexBuffer;
 | 
				
			||||||
 | 
						VkDeviceMemory indexBufferMemory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void initWindow(int Width, int Height);
 | 
						void initWindow(int Width, int Height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -179,6 +186,7 @@ private:
 | 
				
			||||||
	void createCommandPool();
 | 
						void createCommandPool();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void createVertexBuffer();
 | 
						void createVertexBuffer();
 | 
				
			||||||
 | 
						void createIndexBuffer();
 | 
				
			||||||
	void createBuffer(VkDeviceSize size,VkBufferUsageFlags usage,VkMemoryPropertyFlags properties,VkBuffer& buffer,VkDeviceMemory& bufferMemory);
 | 
						void createBuffer(VkDeviceSize size,VkBufferUsageFlags usage,VkMemoryPropertyFlags properties,VkBuffer& buffer,VkDeviceMemory& bufferMemory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size);
 | 
						void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue