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

Opengl 如何将一组无绑定图像放入ubo,opengl,glsl,shader,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_

我已经有一个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上则不行。我假设我的无绑定_图像、r32ui和一致性限定符有问题,但我不确定如何正确设置它们

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

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位整数。这样,<>代码> IDOMGRONG/<代码>的数组步长是8字节,它与64位整数的C或C++数组相匹配。

如果你想把无黏图像/采样器放在统一块中,你必须把它们实际放在块定义中。就像其他变量一样:

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位整数。这样,<>代码> IDOGIGHORION/COD>的数组步长是8字节,它与64位整数的C或C++数组相匹配。

“我试图向UBO中添加一组无绑定图像:”这与<代码> VIEVHYSTRADYDATA < /代码>有何关联?这是一个统一变量,而不是统一块的成员。”我正在尝试向ubo添加一个无绑定图像数组:“它与
视图\共享\数据
有何关联?这是一个统一变量,不是统一块的成员。我试过你说的,仍然适用于nvidia,在amd上我得到:“错误:内存限定符只能应用于图像变量、缓冲区变量和着色器存储块的声明”我试过你说的,仍然适用于nvidia,在amd上我得到:错误:内存限定符只能应用于图像变量、缓冲区变量和着色器存储块的声明中