Sziasztok!
Tobb ismerosomnel is problemat okozott, hogy OpenGL-t hasznalo jatekok futtatasa kozben a CPU terheles folyamatosan 100%-on all.
A vsync bekapcsolasa pedig iszonyu lag-eket okozott...
Foleg laptopoknal jelenthet ez gondot, mert ilyenkor felporognek a ventillatorok, zajosabb lesz, nemis beszelve a nagyobb fogyasztasrol, melegedesrol stb...
Utana neztem a dolognak, es kiderult hogy a legtobb OpenGL jatek ugy muxik (a Quake3 alapuak legalabbis), hogy egy vegtelen ciklusban "ami a csovon kifer" modszerrel rendereli a kepet, tehat annyi kepet renderel le amennyit a CPU csak ki tud szamolni.
Ha eleg gyors geppel rendelkezunk (pl. >= 1.6 Ghz Core2), akkor ezt a folyamatot lassithatjuk ugy, hogy idonkent felfuggesztjuk a renderelest egy pillanatra.
Tehat ha "Sleep"-et teszunk a fo-folyamatba, akkor csokken a CPU kihasznaltsaga. Termeszetesen az FPS is csokken, dehat kinek van szuksege 200-300fps-re, mikor eleg akkora mint a monitor frissitesi frekije (pl. 75)
Bemutatom egy ioquake engine-t hasznalo jatek eseten a folyamatot:
Urban Terror 4.1
1. letoltjuk a gamet: (a zip-et kell letolteni)
http://www.urbanterror.net/page.php?6
2. letoltjuk az ioUrbanTerror legujabb verziojat (q3 engine):
http://ftp.snt.utwente.nl/pub/games/urbanterror/iourbanterror/source/complete/ioUrbanTerrorSource_2007_12_20.zip
kicsomagoljuk, majd feltesszuk a
mesa-common-dev
nevu csomagot (OpenGL-es api forditashoz kell).
(lehet hogy kell meg egy libsdl1.2-dev vagy vmi hasonlo csomag is)
3. a source modositasa:
megnyitjuk a
./code/unix/unix_main.c -t
megkeressuk a main(...) fuggvenyt (a vegen van)
- felveszunk egy uj valtozot:
int dly;
- beolvassuk a delay erteket a command line-bol:
if (argv[1] && *(argv[1]+1)=='d')
dly = atoi(argv[1]+2);
else
dly = 0;
- az #ifdef __linux__ sor ele betesszuk:
usleep(dly);
4. ezutan leforditjuk a
make
paranccsal
5. A leforditott binarist (./build/release.../) bemasoljuk az UrbanTerror konyvtaraba.
Hasznalat:
./ioUrbanTerror.i386 -d[delay_erteke(us)]
pl.
./ioUrbanTerror.i386 -d8000
Ki kell tapasztalni hogy mekkora delay nem megy meg a jatek elvezhetosegenek rovasara, nalam 8-10 msec kb. 75-85 fps-t eredmenyezett 20-25%-os CPU terheles mellett egy 2.2 Ghz-es Core2-esen.
Ez a modszer muxik mas ioquake-es jatekoknal is, pl. OpenArena.
Udv,
Laca.