Я использую два SSBO в фрагментном шейдере. Для каждого фрагмента я делаю вычисление, и, если выполняется какое-то условие, я пишу координаты пространства-пространства фрагмента/пикселя (они переданы в шейдер фрагмента) на один SSBO и цвет фрагмента на другой. Затем SSBO считываются приложением, а те пиксели, которые были сохранены в SSBO, передаются следующему рендерингу.Значение параметра размера в SSBO
Параметр размера в
void glBufferData(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage);
может иметь два значения на данный момент: 2500
или 20000
.
Для проходов, где size = 2500
, все работает нормально. Как только size = 20000
, то большинство пикселей перестают регистрироваться в SSBO.
Мой вопрос: каково фактическое значение параметра размера? Является ли это размером того, что может быть записано в каждом инстинкте фрагмента (в этом случае он будет только один vec4
за SSBO на фрагмент) или это размер всех инстанций в каждом проходе рендеринга (в этом случае 2500 или 20000 vec4
за SSBO)?
Размер, передаваемый 'glBufferData()', является размером буфера в байтах. Не уверен, что в вашем вопросе есть что-то конкретно для SSBOs или просто основная функция 'glBufferData()'. –
'glBufferData' выделяет и (если' data' не является нулевым) заполняет буфер исходными данными, переданными на вызов. Если у вас возникли проблемы с пониманием того, что означает 'size' в этом вызове API, вы, вероятно, перекрываете буфер каждый раз, когда вы вызываете эту функцию. –