Kiat pengoptimalan OpenGL [ditutup]

26

Kiat atau trik apa yang Anda miliki ketika membuat OpenGL lebih efisien?

thyrgle
sumber

Jawaban:

16

Gunakan VBO daripada glStart () / glEnd (). Ini menghemat siklus dalam mentransfer data ke memori GPU.

MrValdez
sumber
7
Lebih dari itu, glBegin dan glEnd tidak digunakan lagi dalam revisi kemudian dan sepenuhnya dihapus (dan karenanya tidak akan berfungsi) dalam versi 3.x dan di atasnya. Jika Anda meminta konteks OpenGL 3.x Anda tidak akan dapat menggunakannya sepenuhnya.
Slurps Mad Rips
DirectX sebenarnya memaksakan ini pada Anda, itu tidak memiliki setara dengan glStart()/glEnd().
knight666
@ SAHChandler Saya tidak tahu itu. Saya tidak menyadari itu sudah usang.
MrValdez
3
@ SAHChandler: Itu menyebalkan! Saya belajar semua gambar saya dengan glBegin () dan glEnd (). Tidaaaak !!!
8

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.

Tetrad
sumber
2
Hanya ingin menambahkan bahwa sekarang gratis.
DMan
8

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)

Mencabut Rob Gila
sumber
7

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.

knight666
sumber
6

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.

Dennis Munsie
sumber
4
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.

Krankzinnig
sumber
4

Jangan gunakan glGet * ketika Anda dapat mengakses variabel lokal, misal:

  • Jangan kueri ukuran tekstur dari OpenGL, simpan di pemuatan variabel
  • Jangan kueri ukuran garis lebar / poin dari OpenGL saat Anda dapat menyimpan perubahan dalam aplikasi Anda

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.

Kromster berkata mendukung Monica
sumber
3

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.

Ellis
sumber
Hati-hati. Batch yang lebih sedikit dan lebih besar bermanfaat, tetapi tergantung pada platform target, bets yang terlalu besar akan menurunkan kinerja.
Andreas
3

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.

Hannesh
sumber