Mendapatkan akselerasi perangkat keras OpenGL dengan SDL di Linux


8

Saya mencoba menggunakan SDL + OpenGL tetapi saya tidak percaya akselerasi perangkat keras bekerja karena framerate untuk sekitar 18000 polys adalah sekitar 24fps pada mesin quad core tetapi 1-2fps yang sia-sia pada Intel Atom. Bahkan quad core mulai berjuang ketika jumlah poli naik di atas ini.

Saya sudah memeriksa kode saya tapi saya jelas kehilangan sesuatu yang jelas. Saya telah mengubah kode inisialisasi SDL saya untuk menggunakan kode yang sama seperti pada tes OpenGL SDL . Ini melaporkan bahwa SDL_GL_ACCELERATED_VISUAL adalah 1 tetapi hw_available di SDL_VideoInfo adalah 0

Vendor juga dilaporkan dengan benar karena Nvidia pada kedua mesin dan aplikasi yang dipercepat seperti Compiz dan glxgears berfungsi dengan baik.

Ada ide tentang apa yang harus dicoba?

Terima kasih

Jawaban:


6

Jika Anda menggunakan glBegin () / glEnd () dalam kode Anda, terutama jika mengatur tekstur dan menyatakan secara berlebihan di antara frame (yaitu, menggambar dengan tekstur 1, lalu 2, lalu 1, lalu 2, dibandingkan dengan 1,1,2, 2), Anda mungkin dikenai overhead pengemudi. Terutama ini terjadi jika Anda memperhatikan bahwa prosesor lambat sedang menenggak sementara masih memiliki kartu yang baik. Menggunakan glDrawArrays atau sejenisnya biasanya memiliki kinerja yang jauh lebih baik.

Namun, tanpa daftar kode lengkap, sebenarnya tidak ada cara untuk mengetahui dengan pasti. SDL adalah pembungkus yang sangat tipis, jadi kecuali Anda melakukan sesuatu yang sangat aneh saya tidak akan mengharapkan kesalahan. Juga, kartu apa yang sedang digunakan?


Kartu pada mesin ini adalah nVidia Corporation GT218 [ION]. Saya mengerti ini akan sedikit lambat sebelum saya mengoptimalkan tetapi tidak selambat ini. Saya mengikat 1 tekstur dan menggunakannya untuk menggambar bidang tinggi sederhana diakui 1 segitiga pada suatu waktu. Jadi cara yang cukup mengerikan untuk melakukan sesuatu tetapi meskipun begitu, lebih lambat dari yang diharapkan.
Robin Elvin

1
Baru saja mengambil panggilan glBegin () / glEnd () di luar loop dan men-tweak rutin draw sesuai dan framerate hingga 30fps. Jadi saya sudah condongkan efek drastis dari panggilan-panggilan itu ketika digunakan secara tidak bijaksana :) Terima kasih!
Robin Elvin

Tidak masalah. Senang bisa membantu.
ChrisE

@ Chris Apa maksudmu "SDL adalah pembungkus yang cukup tipis"?
Chris
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.