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

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

Vulkan API — урок 48. Вспомогательные функции

Копирование изображений Перед тем, как вернуться к createTextureImage, создадим еще одну вспомогательную функцию copyImage: void copyImage(VkImage srcImage, VkImage dstImage, uint32_t width, uint32_t height) { VkCommandBuffer commandBuffer = beginSingleTimeCommands(); endSingleTimeCommands(commandBuffer); } Подобно буферам, необходимо указать, какая часть изображения должна быть скопирована в… Continue Reading

Vulkan API — урок 47. Изменение формата

Функция, что мы собираемся написать сейчас, включает запись и повторное выполнение буфера коман, так что теперь самое время переместить логику во вспомогательную функцию, или две: VkCommandBuffer beginSingleTimeCommands() { VkCommandBufferAllocateInfo allocInfo = {}; allocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; allocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; allocInfo.commandPool =… Continue Reading

Vulkan API — урок 46. Изображение текстуры

Этот урок идет скорее не как отдельный, а как небольшое дополнение к предыдущему. Теперь абстрагируем создание изображения в функции createImage, как это было сделано ранее для буферов. Создадим функцию и переместим все операции создания в неё. Параметры width, height, format, tiling… Continue Reading

Vulkan API — урок 45. Промежуточное изображение

Теперь создадим изображение в общедоступной памяти. Пиксели в объекте изображения известны как тексели (texel(s)), так и и будем называть впредь. Добавим следующие две следующие переменные в функцию createTextureImage: VDeleter<VkImage> stagingImage{device, vkDestroyImage}; VDeleter<VkDeviceMemory> stagingImageMemory{device, vkFreeMemory}; Параметры для изображения определяются в структуре… Continue Reading

Vulkan API — урок 44. Текстурирование (texture mapping), предисловие

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

Vulkan API — урок 43. 3D, еще и движется (+листинг)

Теперь же мы можем поговорить о самом наборе дескрипторов. Для этого добавим функцию createDescriptorSet: void initVulkan() { … createDescriptorPool(); createDescriptorSet(); … } … void createDescriptorSet() { } Далее заполняем нужную для его создания информацию в структуре VkDescriptorSetAllocateInfo. Необходимо указать descriptor pool,… Continue Reading

Vulkan API — урок 42. Descriptor pool

Набор дескрипторов не может быть создан непосредственно, он должны быть выделен из пула, примерно как буферы команд. Эквивалент для наборов дескрипторов называется descriptor pool, что логично. Для его настройки напишем новую функцию createDescriptorPool. void initVulkan() { … createUniformBuffer(); createDescriptorPool(); … }… Continue Reading

Vulkan API — урок 40.

Следующий шаг – определить UBO на стороне С++ и сказать Vulkan’у об этом дескрипторе в vertex shader. struct UniformBufferObject { glm::mat4 model; glm::mat4 view; glm::mat4 proj; }; Мы можем точно соответствовать определению в шейдере используя типы данных в GLM. Данные в матрицах… Continue Reading

Vulkan API — урок 39. Глобальные переменные

В связи с небольшим изменением в самих уроках, до текстур доберемся через 5 уроков, включая этот. Из-за особенностей переводимых разными людьми текстов, перед этим был вынужден переводить handle как дескриптор, как общепринятый вариант, что бы не внести больше путаницы в умы читателей, хотя… Continue Reading