繁体   English   中英

GL_SHADER_STORAGE_BUFFER 位置是否与其他着色器位置冲突?

[英]Does GL_SHADER_STORAGE_BUFFER locations collide with other shaders locations?

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

例如

第一个.vs

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

第二个.vs

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);

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

当程序用于渲染目的时,该程序仅指定用于该特定变量的索引绑定点。 如果您需要将特定缓冲区 object 用于程序中的特定变量,那么在渲染之前,您需要确保特定缓冲区绑定到程序将读取的索引处的上下文。 总是

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM