Я пытаюсь сделать массив из vec3
доступным для фрагментного шейдера.В целевом приложении может быть несколько сотен элементов.
Я протестировал передачу данных в виде объекта буфера хранилища шейдеров, объявленного как
layout(binding = 0) buffer voxels { vec3 xyz[]; }
и установленного с использованием glBufferData
,но я обнаружил, что мой фрагментный шейдер становится очень медленным, даже с только 33 элементами.
Более того, когда я преобразую те же данные в код GLSL const vec3[]
и включаю их в код шейдера, шейдерстановится заметно быстрее.
Есть ли лучший способ - быстрее, чем SSBO, и более элегантный, чем создание кода шейдера?
Как уже может быть видно из приведенного выше, массив читается только изшейдерОн постоянен внутри шейдера, а также при вызовах шейдеров для разных фрагментов, поэтому фактически является единообразным и устанавливается только один или несколько раз за время выполнения программы.