C++ GL_着色器_存储_缓冲区位置是否与其他着色器位置冲突?

C++ GL_着色器_存储_缓冲区位置是否与其他着色器位置冲突?,c++,opengl,glsl,C++,Opengl,Glsl,我有多个使用着色器存储Buffer的glsl文件。若我将缓冲区基础与其他着色器文件绑定,但它们在存储缓冲区中的位置相同,那个么它们似乎会相互影响。这是否意味着我必须以某种方式解开它?当我为每个文件选择其他位置时,它们似乎对代码没有影响 比如说 first.vs layout(std430, binding = 0) buffer texture_coordinate_layout { vec2 texture_coordinates[]; }; 第二对 layout(std430,

我有多个使用着色器存储Buffer的glsl文件。若我将缓冲区基础与其他着色器文件绑定,但它们在存储缓冲区中的位置相同,那个么它们似乎会相互影响。这是否意味着我必须以某种方式解开它?当我为每个文件选择其他位置时,它们似乎对代码没有影响

比如说

first.vs

layout(std430, binding = 0) buffer texture_coordinate_layout 
{
    vec2 texture_coordinates[];
};
第二对

layout(std430, binding = 0) buffer vertices_layout
{
    vec2 vertices[];
};
当有两个不同的着色器程序时,当我绑定每个程序时

第一个着色器程序

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, m_vertex_ssbo);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, m_texture_coordiante_ssbo);
第二个着色器程序

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, m_vertex_ssbo);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, m_texture_coordiante_ssbo);

缓冲区绑定是上下文状态的一部分,而不是着色器程序。上下文中的索引0是索引0;它与任何程序都没有直接关联


当程序用于呈现目的时,程序仅指定该特定变量使用的索引绑定点。如果需要为程序中的特定变量使用特定缓冲区对象,则在呈现之前,需要确保特定缓冲区绑定到程序将读取的索引处的上下文。总是这样。

所以每次绘制每个着色器之前,我必须再次绑定它。