Kiat atau trik apa yang Anda miliki ketika membuat OpenGL lebih efisien?
opengl
optimization
thyrgle
sumber
sumber
glStart()/glEnd()
.Tip standar dari profil, profil, profil juga berlaku di sini, meskipun alatnya sedikit berbeda.
gDEBugger hebat dalam membantu Anda melihat apa yang sebenarnya terjadi di bawah tenda. Itu mahal.
sumber
Ini dari referensi dokumentasi Apple tentang OpenGL tetapi sedikit membantu, bukan? ;)
OpenGL Performance Optimization: Dasar-Dasar
Mengoptimalkan Throughput Data OpenGL pada OS X
(Yang terakhir ini adalah contoh aplikasi)
Vertex Optimization
Ada juga sejumlah besar video yang tersedia pada subjek (Juga dari Apple) yang berbicara tentang ekstensi OpenGL. Beberapa di antaranya adalah OS X khusus, tetapi beberapa yang lain lebih digeneralisasi dan kemungkinan besar dapat diterapkan untuk Windows dan Linux.
Anda dapat menemukan videonya di sini . Anda memang memerlukan iTunes dan akun Apple untuk melihatnya (tetapi mereka gratis!: D)
sumber
Ya, itu benar-benar tergantung pada apa yang Anda rencanakan untuk dilakukan, tetapi inilah dasar-dasarnya:
CPU Anda sangat berharga sedangkan GPU Anda adalah binatang yang lapar. Mengimbangi sebanyak yang Anda bisa ke GPU. Saat ini Anda dapat melakukan ini dengan perpustakaan yang sangat baik seperti OpenCL, CUDA dan Thrust.
Lakukan pencahayaan Anda di shader. Ini tidak hanya akan membantu mempertahankan kewarasan Anda, tetapi juga memungkinkan Anda untuk melakukan hal-hal yang sangat keren seperti toon shader dan pencahayaan yang ditangguhkan .
Partikel menghisap. Bahkan saat menggunakan sprite titik OpenGL.
sumber
Minimalkan perubahan status Anda. Pada banyak platform, setiap perubahan status berpotensi menyiram pipa. Jauh lebih baik untuk mengumpulkan item yang serupa bersama-sama dan mengubah status satu kali.
sumber
Sederhana satu liner yang berlaku untuk pemusnahan kembali wajah Ini sangat baik untuk memangkas jumlah poligon. Lihat juga Frustum / Oklusi pemusnahan untuk mengurangi jumlah poli.
Hal lain yang perlu diperhatikan adalah SIMD untuk vektor dan angka empat Anda (kebanyakan digunakan dalam rotasi kamera). Jika Anda tidak ingin mengacaukan ASM maka periksa libSIMD yang merupakan perpustakaan yang bagus untuk menangani SIMD di C.
sumber
Jangan gunakan glGet * ketika Anda dapat mengakses variabel lokal, misal:
Panggilan ini sangat lambat
Pindahkan hal-hal yang tidak digunakan di luar glBegin - glEnd klausa (baik itu glColor atau glNormal atau yang lainnya) jika tidak berubah di dalamnya. OpenGL adalah mesin negara, ia menggunakan nilai terakhir.
sumber
Minimalkan perintah OpenGL adalah kuncinya. Jadi, Anda harus mengelompokkan semua perintah menggambar. Untuk gim 2d, sebaiknya gunakan Altas Texture dan gambarkan semua sprite yang berbagi tekstur yang sama dalam satu perintah pembuka.
sumber
Batch, batch, batch !! (Ab) gunakan GPU untuk menyajikan sebanyak mungkin dalam setiap panggilan undian. Game sebagian besar dibatasi oleh jumlah perubahan negara, tidak terlalu banyak dengan jumlah segitiga.
sumber