Как я могу прочитать и написать изображение в формате uint? - PullRequest
1 голос
/ 30 марта 2019

Я хочу читать и писать с изображения, в котором хранятся целые числа без знака.Как я могу читать и писать?Стандартный способ чтения и записи в изображение использует imageLoad / imageStore , но при использовании спецификатора формата r32ui компилятор ошибки с no matching overloaded function found.

Это не может скомпилировать:

#version 450

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

layout(set = 0, binding = 0, r32ui) uniform writeonly uimage3D img;

void main() {
    imageStore(img, ivec3(1,2,3), uint(4));
}

Это прекрасно компилируется :

#version 450

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

layout(set = 0, binding = 0, rgba8ui) uniform writeonly uimage3D img;

void main() {
    imageStore(img, ivec3(1,2,3), uvec4(4,5,6,7));
}

Я пытался использовать uvec3 для координат вместо ivec3,и uvec4 для записи данных в случае, если я неправильно понимаю, что формат хранит.Использование двухмерных изображений также не имеет значения.

1 Ответ

2 голосов
/ 30 марта 2019

Полученное сообщение об ошибке верное, просто нет перегруженной версии imageStore, которая принимает одно целое число без знака (см. specs ).

Так что при использовании r32ui квалификатор, вам все равно нужно передать 4-компонентный вектор без знака, как во втором примере, но вместо этого построить его из одного значения:

void main() 
{
    imageStore(img, ivec3(1,2,3), uvec4(4));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...