Vulkan API — урок 38. Буфер индексов (+листинг)

В реальных приложения скорее всего возникнет необходимость использовать одни и те же вершины для построения различных элементов. Например прямоугольник состоит из двух треугольников, имеющих две общие вершины: Т.е. описанный ранее метод потребует ввода трех вершин для каждого треугольника, но думаю… Continue Reading

Vulkan API — урок 37. Использование staging buffer (+листинг)

Теперь изменим createVertexBuffer таким образом, что бы использовать видимый CPU буфер, только как временный буфер и использовать локальный как фактический буфер устройства вершин. void createVertexBuffer() { VkDeviceSize bufferSize = sizeof(vertices[0]) * vertices.size(); VDeleter<VkBuffer> stagingBuffer{device, vkDestroyBuffer}; VDeleter<VkDeviceMemory> stagingBufferMemory{device, vkFreeMemory}; createBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,… Continue Reading

Vulkan API — урок 36. Что такое staging buffer

На данный момент буфер вершин работает исправно, но вот тип памяти, позволяющий получить к себе доступ из CPU, не самый лучший выбор для чтения из самой видеокарты. Наиболее оптимальным будет VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT и, как правило, он не доступен CPU. В этом и следующем мы… Continue Reading

Vulkan API — урок 35. Память буфера вершин (+ листинг)

Итак, буфер был создан, но ему еще не присвоена память. Первый шаг – выделение памяти для буфера. Опишем запрос требований к памяти используя функцию vkGetBufferMemoryRequirements. VkMemoryRequirements memRequirements; vkGetBufferMemoryRequirements(device, vertexBuffer, &memRequirements); Структура VkMemoryRequirements имеет три поля: size: Размер требуемого объема памяти в… Continue Reading

Vulkan API — урок 34. Создание буфера вершин

Буферы в Vulkan’е являются областями памяти, используемыми для хранения данных произвольных данных, которые могут быть прочитаны видеокартой. Они могут быть использованы для хранения данных вершин, которые нам сейчас нужны, но они могут быть использованы и для множества других целей, которые… Continue Reading

Vulkan API — урок 33. Формат вершин

Следующий шаг – сказать Vulkan’у как передать этот формат данных в vertex shader, когда он будет загружен в память GPU. Для этого необходимо заполнить два типа структур. Binding descriptions Первая – VkVertexInputBindingDescription, и для того, что бы заполнить её правильными данными, добавим новую функцию в… Continue Reading

Vulkan API — урок 32. Данные вершин

В ближайших нескольких уроках мы избавимся от жестко заданных вершин в vertex shader. Начнем с простого создания буфера видимого CPU, и используя memcpy для копирования данных вершин непосредственно в него. После чего рассмотрим, как использовать промежуточный буфер для копирования данных… Continue Reading