SDL + OpenGL oraz SDL_GL_SwapBuffers()

Ostatnio, pisząc AGE, natknąłem się na pewien mały problem wydajnościowy związany z funkcją SDL_GL_SwapBuffers(). Okazało się bowiem, że gdy rysowałem w okienku wszystko było w miarę, ale po przełączeniu do pełnego ekranu kolory były jakieś nienormalne i wydajność spadła do ~70FPS. Przy pustym ekranie…

Po szybkim zastosowaniu metody włączeń i wyłączeń (lub jeśli ktoś woli: zkomenć, odkomenć 😉 ) odnalazłem winowajcę – nieszczęsną funkcję podmieniającą bufory. Rozpocząłem więc poszukiwania w internecie i oczywiście wiele było takich problemów, ale wszyscy genialnie radzili wyłączyć synchronizację…
Rozpocząłem się testować z różnymi wartościami przy opcjach ustawień obrazu i po jakiejś chwili odkryłem, ze wina była oczywiście moja. Problematyczne okazały się dwie instrukcje:

SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 24);
SDL_SetVideoMode(width, height, 16,
 SDL_OPENGL | SDL_GL_ACCELERATED_VISUAL |
 (full?SDL_FULLSCREEN:0);

Cudownym lekiem okazała się być zmiana z głębi 16 na 24 bity w SDL_SetVideoMode(). FPS od razu wskoczyło na kilka tysięcy, a po narysowaniu kilku obrazków spadło do ~660. Jest więc tak jak być powinno.

Mała rzecz, a tyle może przysporzyć kłopotów…

Reklamy

AGE pod Linuxa

Jako, że ostatnio korzystam z Ubuntu, a kod z MS VC++2k8 używający DX9 jest średnio chętny do działania w tym środowisku, postanowiłem napisać AGE w pewnym sensie od nowa.

Nie jest to oczywiście takie zupełnie „od nowa” ale czeka mnie dużo pracy, ponieważ chcę na początek pogrupować klasy w jakieś moduły i dodać trochę zalet obiektowości. Dodatkowo mam plan aby kod, który napiszę działał także pod Windows.

Oczywiście wykorzystam do tego celu OpenGL i wątpię abym zrobił możliwość wyboru pomiędzy OpenGL a DX pod Windows – tak jak to jest np. w Irrlichcie. Chcę po prostu wykorzystać to czego się nauczyłem podczas programowania AGE do tego aby zaprogramować je jeszcze raz, tylko że lepiej 🙂

Pierwsze testy pisania aplikacji OpenGL dla Linuxa mam już za sobą (ech te kolorowe trójkąty :D). Teraz czeka mnie raczej praca bardziej projektowa niż kodowanie, ale postaram się ciągnąć jakoś oba w miarę równolegle aby praca szła szybciej.

Wish me luck ^^