Конфликтуют ли местоположения GL_SHADER_STORAGE_BUFFER с другими местоположениями шейдеров? - PullRequest
3 голосов
/ 13 июля 2020

У меня есть несколько файлов glsl, которые используют буфер хранилища шейдеров. Если я связываю базы буферов с другими файлами шейдеров, но они находятся в одном и том же месте в буфере хранения, они, кажется, влияют друг на друга. Значит ли это, что надо как-то его отвязать? Когда я выбрал другие места для каждого файла, казалось, что они не повлияли на код.

например

first.vs

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

second.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 Ответ

5 голосов
/ 13 июля 2020

Привязки буфера являются частью состояния контекста, не программой шейдера. Индекс 0 в контексте - это индекс 0; он не связан напрямую с какой-либо программой.

Программа только указывает, какая индексированная точка привязки используется для этой конкретной переменной, когда программа используется для целей визуализации. Если вам нужно использовать конкретный буферный объект для конкретной переменной в программе, то перед рендерингом вам необходимо убедиться, что конкретный буфер привязан к контексту по индексу, который программа будет читать. Всегда .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...