Я загружаю изображение RGBA PNG в vulkan. У меня нет ошибки во время процесса, но мой шейдер показывает мне белую текстуру.
Я быстро понял, что если я умножу выбранный пиксель на 0,00390625 (что составляет 1/256), я получу правильный цвет. Таким образом, в процессе кажется, что vulkan просто копирует мое 8-битное значение в версию с плавающей запятой, не преобразовывая ее. что мне не хватает?
Я использую комбинированный сэмплер изображений в GLSL и изображение, созданное в формате VK_FORMAT_R8G8B8A8_UINT. Я не знаю, где сказать Vulkan для преобразования данных?


Проблема в том, что когда вы создаете изображение в формате VK_FORMAT_R8G8B8A8_UINT, суффикс UINT явно говорит Vulkan, что вы хотите, чтобы каждое значение RGBA отображалось в шейдере как 8-битное целое число без знака.
Вместо этого вы хотите VK_FORMAT_R8G8B8A8_UNORM. Суффикс UNORM говорит Vulkan взять 8 бит и преобразовать их в значение с плавающей запятой в диапазоне [0, 1].
Большинство распространенных форматов имеют как возможные суффиксы
_UNORM Преобразует данные в формат с плавающей запятой в диапазоне [0, 1]_SNORM Преобразует данные в формат с плавающей запятой в диапазоне [-1, 1]_USCALED Преобразует данные в формат с плавающей запятой без изменения значения_SSCALED Преобразует данные в формат с плавающей запятой без изменения значения (но обрабатывает ввод как подписанный)_UINT Интерпретирует значение как целое число без знака_SINT Интерпретирует значение как целое число со знакомКроме того, для форматов, которые достаточно широки для поддержки значений с плавающей запятой, таких как VK_FORMAT_R16G16B16A16_* и VK_FORMAT_R32G32B32A32_*, также доступен суффикс _SFLOAT, сообщающий Vulkan, что значения в каналах уже являются значениями с плавающей запятой. UFLOAT нет, потому что числа с плавающей запятой без знака не поддерживаются.
В 9 случаях из 10 при работе с данными изображения, загруженными из какого-либо локального файла в буфер RGB, вам нужна _UNORM версия любого формата, который вы отправляете драйверу, чтобы автоматически масштабировать значения до соответствующего диапазона с плавающей запятой [0, 1] .
Я забыл об этом, спасибо!