Создание буфера индексов
This commit is contained in:
		
							parent
							
								
									c3f0d2dc35
								
							
						
					
					
						commit
						7bc7098d98
					
				@ -29,6 +29,8 @@ class Vulkan
 | 
			
		||||
        std::vector<VkCommandBuffer> commandBuffers; // Буферы команд
 | 
			
		||||
        VkBuffer vertexBuffer; // Буфер вершин
 | 
			
		||||
        VkDeviceMemory vertexBufferMemory; // Память буфера вершин
 | 
			
		||||
        VkBuffer indexBuffer; // Буфер индексов
 | 
			
		||||
        VkDeviceMemory indexBufferMemory; // Память буфера индексов
 | 
			
		||||
 | 
			
		||||
        // Структура для хранения флагов
 | 
			
		||||
        struct 
 | 
			
		||||
@ -50,6 +52,7 @@ class Vulkan
 | 
			
		||||
        void createCommandPool(); // Создание пула команд
 | 
			
		||||
        void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size); // Копирование между буферами данных
 | 
			
		||||
        void createVertexBuffer(); // Создание буфера вершин
 | 
			
		||||
        void createIndexBuffer(); // Создание буфера индексов
 | 
			
		||||
};  
 | 
			
		||||
 | 
			
		||||
#endif // VK_H
 | 
			
		||||
							
								
								
									
										35
									
								
								src/vk.cpp
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								src/vk.cpp
									
									
									
									
									
								
							@ -21,11 +21,15 @@ void Vulkan::init(GLFWwindow* window)
 | 
			
		||||
    createGraphicPipeline(); // Создание графического конвейера
 | 
			
		||||
    createCommandPool(); // Создание пула команд
 | 
			
		||||
    createVertexBuffer(); // Создание буфера вершин
 | 
			
		||||
    createIndexBuffer(); // Создание буфера индексов
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// завершение работы
 | 
			
		||||
void Vulkan::destroy()
 | 
			
		||||
{
 | 
			
		||||
    vkDestroyBuffer(logicalDevice, indexBuffer, nullptr); // Уничтожение буфера индексов
 | 
			
		||||
    vkFreeMemory(logicalDevice, indexBufferMemory, nullptr); // Освобождение памяти буфера индексов
 | 
			
		||||
 | 
			
		||||
    vkDestroyBuffer(logicalDevice, vertexBuffer, nullptr); // Уничтожение буфера вершин
 | 
			
		||||
    vkFreeMemory(logicalDevice, vertexBufferMemory, nullptr); // Освобождение памяти буфера вершин
 | 
			
		||||
 | 
			
		||||
@ -885,3 +889,34 @@ void Vulkan::createVertexBuffer()
 | 
			
		||||
    vkDestroyBuffer(logicalDevice, stagingBuffer, nullptr);
 | 
			
		||||
    vkFreeMemory(logicalDevice, stagingBufferMemory, nullptr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Создание буфера индексов
 | 
			
		||||
void Vulkan::createIndexBuffer() 
 | 
			
		||||
{
 | 
			
		||||
    // Индексы, записываемые в буфер
 | 
			
		||||
    uint16_t indices[] = {0, 1, 2, 2, 3, 0};
 | 
			
		||||
    // Размер буфера в байтах
 | 
			
		||||
    VkDeviceSize bufferSize = sizeof(uint16_t) * 6;
 | 
			
		||||
 | 
			
		||||
    // Промежуточный буфер для переноса на устройство
 | 
			
		||||
    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(logicalDevice, stagingBufferMemory, 0, bufferSize, 0, &data);
 | 
			
		||||
    // Копирование вершин в промежуточный буфер
 | 
			
		||||
    memcpy(data, indices, (size_t) bufferSize);
 | 
			
		||||
    // Прекращение отображения памяти буфера
 | 
			
		||||
    vkUnmapMemory(logicalDevice, stagingBufferMemory);
 | 
			
		||||
 | 
			
		||||
    // Создание буфера вершин
 | 
			
		||||
    createBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, indexBuffer, indexBufferMemory);
 | 
			
		||||
    // Копирование из промежуточного в буфер вершин
 | 
			
		||||
    copyBuffer(stagingBuffer, indexBuffer, bufferSize);
 | 
			
		||||
 | 
			
		||||
    // Освобождение памяти и уничтожение буферов
 | 
			
		||||
    vkDestroyBuffer(logicalDevice, stagingBuffer, nullptr);
 | 
			
		||||
    vkFreeMemory(logicalDevice, stagingBufferMemory, nullptr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user