Yanıtlar:
GlStart () / glEnd () yerine VBO kullanın. Bu, verilerin GPU belleğine aktarılmasında döngüleri kurtarır.
glStart()/glEnd()
.
Bunlar, Apple’ın OpenGL’deki dokümantasyon referanslarındandır, ancak her küçük parça doğru yardımcı olur mu? ;)
OpenGL Performans Optimizasyonu: OS X'te OpenGL Veri Çıkışını Optimize Etme Temelleri
(Bu sonuncusu örnek bir uygulamadır)
Vertex Optimizasyonu
Ayrıca, OpenGL uzantıları hakkında konuşan çok sayıda video da var (Ayrıca Apple'dan). Bazıları OS X'e özgüdür, ancak birkaç diğerleri daha genelleştirilmiştir ve büyük olasılıkla Windows ve Linux'a uygulanabilir.
Videoları burada bulabilirsiniz . Ancak bunları görüntülemek için iTunes'a ve bir Apple hesabına ihtiyacınız var (ancak ücretsiz!: D)
Peki, gerçekten, gerçekten ne yapmayı planladığınıza bağlı, ama işte temeller:
GPU'nuz aç bir canavar iken CPU'nuz çok değerlidir. GPU’ya mümkün olduğunca ofset. Bugünlerde OpenCL, CUDA ve Thrust gibi mükemmel kütüphanelerle bunu yapabilirsiniz.
Aydınlatmanızı gölgelendiricide yapın. Bu sadece akıl sağlığınızı korumanıza yardımcı olmakla kalmayacak, aynı zamanda toon gölgelendiriciler ve ertelenmiş ışıklandırma gibi şeyleri çok serinletmenize de izin veriyor .
Parçacıklar emmek. OpenGL point sprite kullanırken bile.
Durum değişikliklerinizi en aza indirin. Birçok platformda, her durum değişikliği potansiyel olarak boru hattını temizler. Birbirine benzer öğeleri bir araya getirmek ve durumu bir kez değiştirmek çok daha iyidir.
glEnable(GL_CULL_FACES);
Arka yüzü temizleme işlemini uygulayan basit bir astar. Bu, poligon sayısının düzeltilmesi için mükemmeldir. Ayrıca, poli sayımlarını azaltmak için Frustum / Occlusion ürünlerine bakın.
Bakılması gereken başka bir şey de vektörleriniz ve kuaterniyonlarınız için SIMD'dir (çoğunlukla kamera rotasyonlarında kullanılır). ASM ile uğraşmak istemiyorsanız, C'deki SIMD'yi kullanmak için harika bir kütüphane olan libSIMD'ye göz atın.
Yerel değişkenlere erişirken glGet * kullanmayın, örneğin:
Bu aramalar gerçekten yavaş
Kullanılmayan şeyleri içinde değişmezse glBegin - glEnd yan tümcesinin dışına taşıyın (glColor veya glNormal veya başka bir şey olsun). OpenGL bir durum makinesidir, son değeri kullanır.
OpenGL komutlarını simge durumuna küçültmek anahtardır. Bu yüzden tüm çizim komutlarını toplu olarak almalısınız. 2d oyunlar için Altas Texture kullanmak ve aynı dokuyu paylaşan tüm sprite'ları tek bir opengl komutunda çizmek iyi bir fikirdir.