Является ли спецификация OpenGL категорически запрещающей это? Очевидно нет. Или, по крайней мере, если это произойдет, я не вижу, где.
Но это не значит, что он будет работать на кросс-платформенной платформе. При работе с OpenGL всегда лучше придерживаться консервативного пути.
Если вам нужно «отличить» память от одного представления к другому, вы должны просто использовать отдельные точки привязки. Это безопаснее.
На данный момент есть официальное слово. I filed a bug on this issue, и они прочитали его и решили кое-что. В частности, вывод был:
- Существуют отдельные пространства имен для связывания: атомных счетчиков, изображений, текстур, буферов, равномерных и SSBOs.
- Мы не хотим разрешать наложение на любой из них, кроме атомных счетчиков, где разрешено использование псевдонимов с различными смещениями (например, разделение привязки).
Короче говоря, не делайте этого. Надеюсь, спецификация GLSL будет уточнена в этом отношении.
Это был «фиксированный» в пересмотре 7 из GLSL 4.5:
Это время компиляции или ошибка канального времени, чтобы использовать один и тот же связывание номер для более чем одной формы, блок или для нескольких блоков буфера.
Я говорю «исправлено», потому что вы все еще можете выполнять наложение псевдонимов вручную через glUniform/ShaderStorageBlockBinding
. И в спецификации не сказано, как это будет работать точно.
Ну, я хочу, чтобы сохранить точки привязки для реализаций с низким лимитом. Например, можно использовать один буфер/привязку как массив массивов динамического размера, предлагая различные представления в нем и получая доступ к неперекрывающимся частям с каждым представлением. – Nobody
@Nobody: Хронос доложил об этом; см. добавление к моему сообщению. –
Я не могу сказать многого против официального слова. Однако, насколько я понимаю, проблема сглаживания уже существует. В конце концов, это то, чем «ограничивается», не так ли? – Nobody