In OpenGL die Pufferobjektfunktionen ( glBufferData
, glBufferSubData
und wahrscheinlich ein paar andere) haben einen Parameterusage
, durch die Dokumentation als Hinweis auf die beabsichtigte Verwendung beschrieben, die die Umsetzung Ausbeute bessere Leistung zu helfen bedeutete.
Verwendung
Gibt das erwartete Verwendungsmuster des Datenspeichers an. Die symbolische Konstante sein muss
GL_STREAM_DRAW
,GL_STREAM_READ
,GL_STREAM_COPY
,GL_STATIC_DRAW
,GL_STATIC_READ
,GL_STATIC_COPY
,GL_DYNAMIC_DRAW
,GL_DYNAMIC_READ
, oderGL_DYNAMIC_COPY
.
[...] Die
Verwendung ist ein Hinweis auf die GL-Implementierung, wie auf den Datenspeicher eines Pufferobjekts zugegriffen wird. Auf diese Weise kann die GL-Implementierung intelligentere Entscheidungen treffen, die die Leistung von Pufferobjekten erheblich beeinträchtigen können. Die tatsächliche Nutzung des Datenspeichers wird dadurch jedoch nicht eingeschränkt.
Das Wiki ist ähnlich vage:
Dies sind schließlich nur Hinweise. Es ist völlig legal, OpenGL-Code zu verwenden, um einen STATIC-Puffer nach seiner Erstellung zu ändern oder niemals einen STREAM-Puffer zu ändern.
[...]
Dies sind Fragen, die nur mit sorgfältiger Profilerstellung beantwortet werden können. Und selbst dann ist die Antwort nur für diese bestimmte Treiberversion von diesem bestimmten Hardwareanbieter korrekt.
Wie relevant ist dieser Parameter, wenn überhaupt? Berücksichtigen die Fahrer dies tatsächlich und wenn ja, wie stark wirkt es sich Ihrer Erfahrung nach auf die Leistung in der Praxis aus? Haben Sie Daten zum Teilen?
Ich habe eine dünne Grafik-API-Abstraktionsschicht geschrieben, die als eine der vorhandenen APIs implementiert werden soll, und es ist verlockend, diesen Parameter einfach ganz zu ignorieren und ihn vor der exponierten Abstraktion zu verbergen.