Jawaban:
Gunakan VBO daripada glStart () / glEnd (). Ini menghemat siklus dalam mentransfer data ke memori GPU.
glStart()/glEnd()
.
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)
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.
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.
glEnable(GL_CULL_FACES);
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.
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.
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.