Я использую vkGetPhysicalDeviceSurfaceFormatsKHR
, чтобы получить поддерживаемые форматы изображений для цепочки подкачки, и (в Linux + Nvidia, используя SDL) я получаю VK_FORMAT_B8G8R8A8_UNORM
в качестве первого варианта, и я иду дальше и создаю цепочку подкачки с этим форматом:
VkSwapchainCreateInfoKHR swapchain_info = {
...
.imageFormat = format, /* taken from vkGetPhysicalDeviceSurfaceFormatsKHR */
...
};
Пока все имеет смысл. Формат изображения, используемый для рисования на экране, - это обычный 8-битный-канальный BGRA.
В рамках моего процесса обучения я до сих пор настраивал множество вещей, но еще не создал графический конвейер 1. Итак, я пытаюсь использовать единственную команду, для которой не нужен конвейер: vkCmdClearColorImage
2.
VkClearColorValue
, используемый для определения прозрачного цвета, может принимать цвет как float
, uint32_t
или int32_t
, в зависимости от формата изображения. Я ожидал, исходя из формата изображения, предоставленного цепочке подкачки, что я должен дать ему uint32_t
значений, но это не кажется правильным. Знаю, потому что цвет экрана не изменился. Я попробовал дать ему float
s, и он работает.
У меня вопрос: почему чистый цвет нужно указывать в float
s, когда формат изображения - VK_FORMAT_B8G8R8A8_UNORM
?
1 На самом деле у меня есть, но я подумал, что сначала попробую более простой случай отсутствия конвейера. Я пытаюсь постепенно использовать Vulkan (учитывая его многословность), особенно потому, что я также пишу по нему учебные пособия как я узнал.
2 На самом деле, технически не требуется проход рендеринга, но я подумал, эй, я не использую здесь какие-либо конвейеры, поэтому давайте попробуем это без конвейера, и это сработало. < / sub>
Мой цикл рендеринга по сути следующий:
- получить изображение из свопчейна
- create a command buffer with the following:
- transition from
VK_IMAGE_LAYOUT_UNDEFINED
toVK_IMAGE_LAYOUT_GENERAL
(because I'm clearing the image outside a render pass) - очистить изображение
- переход с
VK_IMAGE_LAYOUT_GENERAL
наVK_IMAGE_LAYOUT_PRESENT_SRC_KHR
- transition from
- отправить буфер команд в очередь (заботясь о синхронизации с swapchain с семафорами)
- представить для презентации