Dalam OpenGL fungsi objek buffer ( glBufferData
,, glBufferSubData
dan mungkin beberapa lainnya) memiliki parameter usage
, yang dijelaskan oleh dokumentasi sebagai petunjuk penggunaan yang dimaksudkan, kemungkinan dimaksudkan untuk membantu implementasi menghasilkan kinerja yang lebih baik.
pemakaian
Menentukan pola penggunaan yang diharapkan dari penyimpanan data. Simbolis konstan harus
GL_STREAM_DRAW
,GL_STREAM_READ
,GL_STREAM_COPY
,GL_STATIC_DRAW
,GL_STATIC_READ
,GL_STATIC_COPY
,GL_DYNAMIC_DRAW
,GL_DYNAMIC_READ
, atauGL_DYNAMIC_COPY
.
[...]
penggunaan adalah petunjuk untuk implementasi GL tentang bagaimana penyimpanan data objek buffer akan diakses. Ini memungkinkan implementasi GL untuk membuat keputusan yang lebih cerdas yang secara signifikan dapat memengaruhi kinerja objek buffer. Namun, itu tidak membatasi penggunaan sebenarnya dari penyimpanan data.
Wiki juga tidak jelas:
Bagaimanapun, ini hanyalah petunjuk. Ini adalah kode OpenGL yang sah untuk memodifikasi buffer STATIC setelah dibuat, atau untuk tidak pernah memodifikasi buffer STREAM.
[...]
Ini adalah pertanyaan yang hanya dapat dijawab dengan profil yang cermat. Dan bahkan kemudian, jawabannya hanya akan akurat untuk versi driver tertentu dari vendor perangkat keras tertentu.
Baik, seberapa relevan parameter ini, jika sama sekali? Apakah pengemudi benar-benar memperhitungkannya, dan jika mereka melakukannya, menurut pengalaman Anda, seberapa besar dampaknya terhadap kinerja dalam praktik? Apakah Anda memiliki data untuk dibagikan?
Saya telah menulis lapisan abstraksi API grafik tipis yang dimaksudkan untuk diimplementasikan sebagai salah satu dari API yang ada, dan tergoda untuk mengabaikan parameter ini sekaligus dan menyembunyikannya dari abstraksi terbuka.