Dans OpenGL les fonctions d'objet tampon ( glBufferData
, glBufferSubData
et probablement quelques autres) ont un paramètre usage
, décrit par la documentation comme une indication de l'utilisation prévue, probablement destiné à aider le rendement de la mise en œuvre de meilleures performances.
usage
Spécifie le modèle d'utilisation attendu du magasin de données. Doit être la constante symbolique
GL_STREAM_DRAW
,GL_STREAM_READ
,GL_STREAM_COPY
,GL_STATIC_DRAW
,GL_STATIC_READ
,GL_STATIC_COPY
,GL_DYNAMIC_DRAW
,GL_DYNAMIC_READ
ouGL_DYNAMIC_COPY
.
[...] l'
utilisation est une indication de l'implémentation GL quant à la façon dont le magasin de données d'un objet tampon sera accessible. Cela permet à l'implémentation GL de prendre des décisions plus intelligentes qui peuvent avoir un impact significatif sur les performances des objets tampons. Il ne limite cependant pas l'utilisation réelle du magasin de données.
Le wiki est tout aussi vague:
Ce ne sont que des indices, après tout. C'est un code OpenGL parfaitement légal de modifier un buffer STATIC après sa création, ou de ne jamais modifier un buffer STREAM.
[...]
Ce sont des questions auxquelles on ne peut répondre qu'avec un profilage soigneux. Et même alors, la réponse ne sera exacte que pour cette version de pilote particulière de ce fournisseur de matériel particulier.
In fine, quelle est la pertinence de ce paramètre, le cas échéant? Les conducteurs en tiennent-ils compte et, dans l'affirmative, dans quelle mesure cela affecte-t-il les performances dans la pratique? Avez-vous des données à partager?
J'ai écrit une couche d'abstraction d'API graphique fine destinée à être implémentée comme l'une des API existantes, et il est tentant d'ignorer complètement ce paramètre et de le cacher de l'abstraction exposée.