У 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, і це спокуса просто ігнорувати цей параметр і приховати його від відкритої абстракції.