OpenGL'de, arabellek nesnesi işlevleri ( glBufferData
, glBufferSubData
ve muhtemelen birkaç diğerleri) usage
, muhtemelen uygulamanın daha iyi performans vermesine yardımcı olmayı amaçlayan, amaçlanan kullanımın bir ipucu olarak dokümantasyon tarafından tanımlanan bir parametreye sahiptir .
kullanım
Veri deposunun beklenen kullanım şeklini belirtir. Sembolik sabit olmalıdır
GL_STREAM_DRAW
,GL_STREAM_READ
,GL_STREAM_COPY
,GL_STATIC_DRAW
,GL_STATIC_READ
,GL_STATIC_COPY
,GL_DYNAMIC_DRAW
,GL_DYNAMIC_READ
, veyaGL_DYNAMIC_COPY
.
[...]
kullanımı, bir arabellek nesnesinin veri deposuna nasıl erişileceğine ilişkin GL uygulaması için bir ipucudur. Bu, GL uygulamasının arabellek nesnesi performansını önemli ölçüde etkileyebilecek daha akıllı kararlar vermesini sağlar. Bununla birlikte, veri deposunun gerçek kullanımını kısıtlamaz.
Wiki de benzer şekilde belirsiz:
Ne de olsa bunlar sadece ipuçları. Bir STATIC arabelleği oluşturulduktan sonra değiştirmek veya bir STREAM arabelleğini asla değiştirmemek tamamen yasal OpenGL kodudur.
[...]
Bunlar sadece dikkatli profilleme ile cevaplanabilecek sorular. Ve o zaman bile, cevap yalnızca söz konusu donanım satıcısının söz konusu sürücü sürümü için doğru olacaktır.
Peki, bu parametre hiç değilse ne kadar ilgili? Sürücüler bunu gerçekten dikkate alıyor mu ve eğer öyleyse, deneyiminizde pratikte performansı ne kadar etkiliyor? Paylaşacağınız veriler var mı?
Mevcut API'lardan biri olarak uygulanması gereken ince bir grafik API soyutlama katmanı yazdım ve sadece bu parametreyi tamamen yok saymak ve açık soyutlamadan gizlemek cazip geliyor.