W OpenGL funkcje obiektów buforowych ( glBufferData
, glBufferSubData
i prawdopodobnie kilka innych) mają parametr usage
opisany w dokumentacji jako wskazówka zamierzonego użycia, która prawdopodobnie ma pomóc w poprawie wydajności implementacji.
stosowanie
Określa oczekiwany wzorzec użycia magazynu danych. Stała symboliczny musi być
GL_STREAM_DRAW
,GL_STREAM_READ
,GL_STREAM_COPY
,GL_STATIC_DRAW
,GL_STATIC_READ
,GL_STATIC_COPY
,GL_DYNAMIC_DRAW
,GL_DYNAMIC_READ
, lubGL_DYNAMIC_COPY
.
[...]
użycie jest wskazówką do implementacji GL co do sposobu dostępu do magazynu danych obiektu bufora. Umożliwia to implementacji GL podejmowanie bardziej inteligentnych decyzji, które mogą znacząco wpłynąć na wydajność obiektu buforującego. Nie ogranicza to jednak faktycznego wykorzystania magazynu danych.
Wiki jest podobnie niejasne:
W końcu to tylko wskazówki. Jest całkowicie legalnym kodem OpenGL, aby modyfikować bufor STATIC po jego utworzeniu lub nigdy nie modyfikować bufora STREAM.
[...]
Są to pytania, na które można odpowiedzieć tylko poprzez staranne profilowanie. I nawet wtedy odpowiedź będzie dokładna tylko dla tej konkretnej wersji sterownika od tego konkretnego dostawcy sprzętu.
W porządku, jak trafny jest ten parametr, jeśli w ogóle? Czy kierowcy rzeczywiście uwzględniają to, a jeśli tak, to z własnego doświadczenia, w jakim stopniu wpływa to na wydajność w praktyce? Czy masz dane do udostępnienia?
Napisałem cienką warstwę abstrakcji interfejsu API grafiki, która ma być zaimplementowana jako jeden z istniejących interfejsów API i kusi mnie całkowite zignorowanie tego parametru i ukrycie go przed odsłoniętą abstrakcją.