如何将无绑定图像数组放入ubo

时间:2018-10-02 13:38:45

标签: opengl glsl shader

我已经有一个ubo:

layout (std140, binding = 0) uniform view_shared_data {
    uniform int matrixIndex;
    uniform int projectionIndex;
    uniform uint set_only_input_id;
    uniform Matrices[MAX_MATRICES] matrices;
};

我正在尝试向ubo添加一系列无绑定图像:

layout(bindless_image, r32ui) coherent uniform uimage2D[MAX_MATRICES] id_texture;

我只会使用imageAtomicMax()写入图像。

这在使用nvida gpu的Windows上可以正常编译,但是在使用amd的Linux上则可以正常编译。我假设我的bindless_image,r32ui和相干限定符出了点问题,但是我不确定如何正确设置它们。

1 个答案:

答案 0 :(得分:4)

如果要将无绑定图像/采样器放在统一的块中,则必须将它们放入块定义中。就像其他任何变量一样:

layout (std140, binding = 0) uniform view_shared_data {
    uniform int matrixIndex;
    uniform int projectionIndex;
    uniform uint set_only_input_id;
    uniform Matrices[MAX_MATRICES] matrices;
    layout(r32ui) coherent uimage2D[MAX_MATRICES] id_texture;
};

缓冲区支持的接口块中的每个不透明类型都是单个64位整数。因此,id_texture的数组步长为8个字节,与64位整数的C或C ++数组匹配。