如何读取和写入具有 uint 格式的图像?
How do I Read and Write to an image with uint format?
我想从存储无符号整数的图像读取和写入。我怎样才能读和写?读取和写入图像的标准方法是使用 imageLoad/imageStore,但是当使用格式限定符 r32ui 时,编译器 errors 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 来写入数据,以防我误解了存储的格式。使用二维图像也没有区别。
您收到的错误消息是正确的,根本没有采用单个无符号整数的 imageStore
的重载版本(参见 specs)。
因此,当使用 r32ui
限定符时,您仍然需要像在第二个示例中一样传递一个 4 分量无符号向量,而是从单个值构造它:
void main()
{
imageStore(img, ivec3(1,2,3), uvec4(4));
}
我想从存储无符号整数的图像读取和写入。我怎样才能读和写?读取和写入图像的标准方法是使用 imageLoad/imageStore,但是当使用格式限定符 r32ui 时,编译器 errors 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 来写入数据,以防我误解了存储的格式。使用二维图像也没有区别。
您收到的错误消息是正确的,根本没有采用单个无符号整数的 imageStore
的重载版本(参见 specs)。
因此,当使用 r32ui
限定符时,您仍然需要像在第二个示例中一样传递一个 4 分量无符号向量,而是从单个值构造它:
void main()
{
imageStore(img, ivec3(1,2,3), uvec4(4));
}