GL_SHADER_STORAGE_BUFFER 位置是不是与其他着色器位置冲突?
Posted
技术标签:
【中文标题】GL_SHADER_STORAGE_BUFFER 位置是不是与其他着色器位置冲突?【英文标题】:Does GL_SHADER_STORAGE_BUFFER locations collide with other shaders locations?GL_SHADER_STORAGE_BUFFER 位置是否与其他着色器位置冲突? 【发布时间】:2020-07-13 14:52:14 【问题描述】:我有多个使用着色器存储缓冲区的 glsl 文件。如果我将缓冲区基础与其他着色器文件绑定,但它们在存储缓冲区中的位置相同,它们似乎会相互影响。这是否意味着我必须以某种方式解除绑定?当我为每个文件选择其他位置时,它们似乎对代码没有影响。
例如
first.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);
【问题讨论】:
【参考方案1】:缓冲区绑定是上下文状态的一部分,不是着色器程序。上下文中的索引 0 是索引 0;它不直接与任何程序关联。
当程序用于渲染目的时,该程序仅指定用于该特定变量的索引绑定点。如果您需要为程序中的特定变量使用特定缓冲区对象,那么在渲染之前,您需要确保特定缓冲区绑定到程序将读取的索引处的上下文。 总是。
【讨论】:
所以我不得不在每次为每个着色器绘制之前再次绑定它。以上是关于GL_SHADER_STORAGE_BUFFER 位置是不是与其他着色器位置冲突?的主要内容,如果未能解决你的问题,请参考以下文章