В OpenGL функция объекта буфера ( glBufferData
, glBufferSubData
и , возможно , некоторые другие) имеет параметр usage
, описанный в документации как намек предполагаемого использования, вероятно , имел в вид , чтобы помочь доходности реализации более высокой производительности.
использование
Определяет ожидаемую схему использования хранилища данных. Символьная константа должна быть
GL_STREAM_DRAW
,GL_STREAM_READ
,GL_STREAM_COPY
,GL_STATIC_DRAW
,GL_STATIC_READ
,GL_STATIC_COPY
,GL_DYNAMIC_DRAW
,GL_DYNAMIC_READ
, илиGL_DYNAMIC_COPY
.
[...]
использование является подсказкой для реализации GL относительно того, как будет осуществляться доступ к хранилищу данных объекта буфера. Это позволяет реализации GL принимать более разумные решения, которые могут существенно повлиять на производительность буферного объекта. Это, однако, не ограничивает фактическое использование хранилища данных.
Вики также расплывчаты:
В конце концов, это только намеки. Это совершенно законный код OpenGL для изменения буфера STATIC после его создания или для того, чтобы никогда не изменять буфер STREAM.
[...]
Это вопросы, на которые можно ответить только с тщательным профилированием. И даже в этом случае ответ будет точным только для конкретной версии драйвера от конкретного поставщика оборудования.
В общем, насколько уместен этот параметр, если вообще? Учитывают ли водители это на самом деле, и если да, то, как вы считаете, насколько это влияет на производительность на практике? У вас есть данные для обмена?
Я написал тонкий уровень абстракции API графики, предназначенный для реализации в качестве одного из существующих API, и соблазнительно просто полностью игнорировать этот параметр и скрывать его от открытой абстракции.
источник