In OpenGL le funzioni degli oggetti buffer ( glBufferData
, glBufferSubData
e probabilmente alcuni altri) hanno un parametro usage
, descritto dalla documentazione come un suggerimento dell'uso previsto, probabilmente destinato ad aiutare l'implementazione a produrre prestazioni migliori.
uso
Specifica il modello di utilizzo previsto dell'archivio dati. La costante simbolica deve essere
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
.
[...] l'
utilizzo è un suggerimento per l'implementazione GL su come si accederà all'archivio dati di un oggetto buffer. Ciò consente all'implementazione GL di prendere decisioni più intelligenti che possono influire in modo significativo sulle prestazioni degli oggetti buffer. Tuttavia, non limita l'utilizzo effettivo dell'archivio dati.
Il wiki è altrettanto vago:
Questi sono solo suggerimenti, dopo tutto. È un codice OpenGL perfettamente legale modificare un buffer STATIC dopo che è stato creato o non modificare mai un buffer STREAM.
[...]
Queste sono domande a cui è possibile rispondere solo con un'attenta profilazione. E anche in questo caso, la risposta sarà accurata solo per quella particolare versione del driver da quel particolare fornitore di hardware.
Bene, quanto è importante questo parametro, se non del tutto? I conducenti ne tengono effettivamente conto e, se lo fanno, secondo la tua esperienza quanto influisce sulle prestazioni in pratica? Hai dati da condividere?
Ho scritto un sottile livello di astrazione per l'API grafica pensato per essere implementato come una delle API esistenti ed è allettante tentare di ignorare del tutto questo parametro e nasconderlo dall'astrazione esposta.