Спецификация OpenGL прямо запрещает это? Очевидно нет. Или, по крайней мере, если и есть, то я не вижу где.
Но это не значит, что он будет работать кроссплатформенно. Имея дело с OpenGL, всегда лучше идти по консервативному пути.
Если вам нужно «перебросить» память из одного представления в другое, вы должны просто использовать отдельные точки привязки. Это безопаснее.
Сейчас есть официальное слово по этому поводу. Я отправил сообщение об ошибке, и они его прочитали и решил некоторые вещи. В частности, был сделан вывод:
- Существуют отдельные пространства имен привязки для: атомарных счетчиков, изображений, текстур, юниформ-буферов и SSBO.
- Мы не хотим разрешать псевдонимы для любого из них, кроме атомарных счетчиков, где разрешен псевдоним с разными смещениями (например, совместное использование привязки).
Короче, не делай этого. Надеемся, что спецификация GLSL будет разъяснена в этом отношении.
Это было «исправлено» в версии 7 GLSL 4.5:
Использование одного и того же номера binding для более чем одного юниформ-блока или для более чем одного буферного блока является ошибкой времени компиляции или компоновки.
Я говорю «исправлено», потому что вы все еще можете выполнять алиасинг вручную через glUniform/ShaderStorageBlockBinding
. И спецификация не говорит, как именно это будет работать.
person
Nicol Bolas
schedule
14.01.2016