Vulkan API — урок 59. Модель в действии

Теперь загрузим вершины и индексы из файла модели. Перед этим удалим глобальные массивы vertices и indices. Заменим их не константными членами класса: std::vector<Vertex> vertices; std::vector<uint32_t> indices; VDeleter<VkBuffer> vertexBuffer{device, vkDestroyBuffer}; VDeleter<VkDeviceMemory> vertexBufferMemory{device, vkFreeMemory}; Тип индексов теперь uint32_t, потому как вершин будет гораздо больше, чем 65535.… Continue Reading

Vulkan API — урок 57. Этап проверки глубины (+листинг)

Вложение глубины теперь готово к использованию, но проверку глубины все еще нужно активировать в графическом конвейере. Сие действо настраивается в структуре VkPipelineDepthStencilStateCreateInfo. VkPipelineDepthStencilStateCreateInfo depthStencil = {}; depthStencil.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; Поле depthTestEnable думаю понятно из названия, активирует проверку глубины. Поле depthWriteEnable определяет, будет ли… Continue Reading

Vulkan API — урок 56. Доработки имеющегося под третью координату

Render pass Сейчас нужно включить вложение глубины (depth attachment) в  createRenderPass. Для начала определим VkAttachementDescription. format должен быть аналогичен самому изображению. На этот раз мы не заботимся о хранении данных глубины (storeOp), потому как они не будут использоваться после того, как отрисовка… Continue Reading

Vulkan API — урок 55. Буфер глубины (Depth buffering или Z-buffering)

Итак, для проблемы предыдущего урока есть два способа решения: Подавать вершины в соответствующем порядке – от глубинных до верхних. Использовать тестирование глубины с буфером глубины (для аналогов можно так же встретить термин «Z-буферизация»). Первый вариант в основном используется для отрисовки прозрачных объектов,… Continue Reading

Vulkan API — урок 54. Третья координата.

Перед тем как загружать модели, давайте определимся с третьей координатой, т.к. ранее её мы не использовали. Изменим структуру Vertex для использования 3D векторов при позиционировании и обновим format в соответствующем VkVertexInputAttributeDescription: struct Vertex { glm::vec3 pos; glm::vec3 color; glm::vec2 texCoord;… Continue Reading

Vulkan API — урок 53. Наложение текстур (+ листинг)

И последний шаг — доработать шейдеры, для получения цветов из текстуры. Для начала изменим vertex shader, для того, что бы он пропускал через себя координаты для fragment shader: layout(location = 0) in vec2 inPosition; layout(location = 1) in vec3 inColor;… Continue Reading

Vulkan API — урок 52. Координаты текстуры

Это будет коротенький, но важный урок перед завершением очередного этапа. Существует еще один важный компонент, необходимый для отображения текстур – фактические координаты каждой вершины. Координаты определяют, как изображение будет на самом деле отражено на геометрии. Добавим vec2 в структуру Vertex для координат… Continue Reading

Vulkan API — урок 51. Обновление дескрипторов

Для получения шейдером изображения через объект sampler нам понадобится дескриптор (descriptor). Ранее в уроках uniform buffers дескрипторы уже встречались, сейчас же посмотрим с новый тип дескрискриптора: combined image sampler. Необходимо изменить следующие дескрипторы: макета (layout), пула (pool) и набора (set). Перейдем… Continue Reading

Vulkan API — урок 50. Samplers

Шейдеры могут читать тексели непосредственно из изображения, но это не часто практикуется, когда изображения являются текстурами. Текстуры, как правило, доступны через модели (samplers), которые будут использовать различные фильтрации и преобразования, что в итоге и создаст конечный цвет. Эти фильтры полезны… Continue Reading

Vulkan API — урок 49. Texture image view

Ранее, когда работали над swap chain и буфером кадров, мы видели, что изображения доступны через mage views, но не напрямую. Аналог необходим и для изображения текстуры. Добавим новый член класса VkImageView для изображения текстуры и создадим функцию createTextureImageView, где создадим его: VDeleter… Continue Reading