2015-11-10 3 views
3

Могу ли я одновременно привязать один буфер opengl к нескольким индексированным целям (цели SSBO)?Связывание одного буфера с несколькими проиндексированными объектами SSBO, одновременно

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

Другим вариантом использования, который я вижу, является, например, если у меня есть шейдер с двумя равномерными блоками, снова с разными индексами привязки, но на этот раз единственным элементом данных, равным единым блокам, является открытый массив (с неопределенным размером). Могу ли я использовать glBindBuffer для привязки одного и того же буфера к обоим равномерным блокам и гарантии по коду только для доступа к индексам массива в правильном диапазоне в буфере?

ответ

2

Я считаю, что все в порядке.

§6.1 (...) В то время как объект буфера связан, операции GL на цель, к которой она связана влияет на связанный объект буфера, и запросы мишени, к которому объект буфера связанное состояние возврата из связанного объекта. Операции на цели также влияют на любые другие привязки этого объекта

курсив мой - который бы непосредственно предполагают, что это нормально.

§6.1.1. (...) Каждая цель представляет собой индексированный массив точек привязки буфера, а также как единую общую точку привязки, которая может быть использована другими манипуляциями с буферными объектами , такими как BindBuffer или MapBuffer. Обе команды связывают буферный объект с именем буфера как с общей точкой привязки, так и с привязкой в массиве, заданном индексом. Если связывается успешно никаких изменений не производятся в состоянии связанного объекта буфера, и любые предыдущие привязки к общей точке привязки или к точке связывания в массиве сломаны

Что я перегонять из этого является то, что не запрещается привязывать диапазон буфера к нескольким местам, и я предполагаю, что это разрешено. Он не разрушит другие привязки в этом массиве, а это значит, что ранее привязанные диапазоны должны оставаться неизменными и действительными.

При этом, если диапазоны перекрываются, и вы пишете их, вам могут потребоваться барьеры.

Смежные вопросы