En OpenGL, las funciones del objeto de almacenamiento intermedio ( glBufferData
, glBufferSubData
y probablemente algunas otras) tienen un parámetro usage
, descrito en la documentación como una pista del uso previsto, probablemente destinado a ayudar a la implementación a obtener un mejor rendimiento.
uso
Especifica el patrón de uso esperado del almacén de datos. La constante simbólica debe ser
GL_STREAM_DRAW
,GL_STREAM_READ
,GL_STREAM_COPY
,GL_STATIC_DRAW
,GL_STATIC_READ
,GL_STATIC_COPY
,GL_DYNAMIC_DRAW
,GL_DYNAMIC_READ
, oGL_DYNAMIC_COPY
.
[...] el
uso es una pista para la implementación de GL sobre cómo se accederá al almacén de datos de un objeto de búfer. Esto permite que la implementación de GL tome decisiones más inteligentes que pueden afectar significativamente el rendimiento del objeto buffer. Sin embargo, no restringe el uso real del almacén de datos.
La wiki es igualmente vaga:
Estas son solo pistas, después de todo. Es perfectamente legal el código de OpenGL para modificar un búfer STATIC después de que se ha creado, o nunca modificar un búfer STREAM.
[...]
Estas son preguntas que solo pueden responderse con un perfil cuidadoso. E incluso entonces, la respuesta solo será precisa para esa versión de controlador en particular de ese proveedor de hardware en particular.
En resumen, ¿qué tan relevante es este parámetro, si es que lo es? ¿Los conductores realmente lo tienen en cuenta, y si lo hacen, en su experiencia, cuánto impacta en el rendimiento en la práctica? ¿Tienes datos para compartir?
He escrito una capa de abstracción de API de gráficos finos destinada a implementarse como cualquiera de las API existentes, y es tentador ignorar por completo este parámetro y ocultarlo de la abstracción expuesta.