Dodałem kolejne rzeczy do frameworka.
FMOD
Pierwszą jest podpięcie biblioteki FMOD do dźwięku. Zdecydowałem się właśnie na nią ze względu na jej możliwości oraz łatwą przenośność między platformami. Odrazu zaznaczam, że nie pisałem żadnego wrappera i scalenie z frameworkiem jest praktycznie żadne, ot tylko inicjowanie i zamykanie wraz ze startem aplikacji (później przy wczytywaniu konfiguracji z jakiegoś pliku). Odnośnie pisania wrapperów na biblioteki ciekawe podsumowanie napisał Reg
Dotatkowo napisałem funkcję pomocniczą do wyliczania energii dźwięku która może być przydatna do osiągania fajnych efektów wizualnych.
Post-Processing
Drugą rzeczą którą zaimplementowałem to system efektów do post-processing’u. Doszły kolejne interfejsy IPostProcessingEffect oraz IPostProcessingEffectShader. Efekty można dodawać do Renderera w raz z ustalaniem kolejności ich aplikowania. Zaimplementowałem narazie 3 efekty używając fragment shaderów:
- Box-Blur
- Motion-Blur
- Deformer (deformacja obrazu na podstawie mapy przesunięć)
Szczegóły implementacyjne znajdą się w kolejnych postach. Tymczasem znowu testowy “blob” z nowymi rzeczami:


Do pobrania (znowu dla odważnych :) ):
Uwaga: aby zobaczyć motion-blur program musi wyliczyć odpowiednio dużą energię dźwięku więc po pierwsze, do folderu należy podrzucić jakiś plik muzyczny (np. wav, mp3, mod, xm lub inny który obsługuje FMOD) i wpisać jego nazwę w pliku config.txt, a po drugie lepiej jakby był dość “skoczny” w celu osiągnięcia fajnych efektów :)
Aha, program nie sprawdza wszystkich możliwych błędów które mogą wystąpić, więc potrafi się ładnie “wykrzaczyć” na niektórych komputerach, szczególnie tych nie wspierających technologii oraz z systemem Vista (w sumie nie wiem czemu)
Co dalej
Jako, że na zajmowanie się frameworkiem znowu będę miał mało czasu to nie prędko coś dodam – w zasadzie i tak nikt nie czeka, bo go na razie nie udostępniam :D ale tak profilaktycznie piszę.
W planach mam implementacje tekstur potrafiących czerpać dane z zewnętrznych obiektów (np. poprzez ITextureDataProvider). W planie mam implementacje klasy abstrakcyjnej operującej na wątkach a potem już konkretną implementacje dla wspomnianego efektu Deformer – po to aby można było generować animowane deformacje które z resztą są zauważalne w wielu grach, np. w dość nowej grze “Prototype” jak się skoczy z dużej wysokości.
Edit:
Znalazłem przyczynę (przy pomocy osób u których demko się nie odpala, m.in Qbix i Sieciech) nie działania u niektórych na Windows Vista oraz Windows 7, otóż program przestaje działać w momencie wywołania SwapBuffers. Jeżeli ma ktoś pomysł (i jeżeli się da) jak to poprawić, to wszelkie komentarze są mile widziane. Odrazu zaznaczam, że rysuje tylko bo back-bufforze a glFlush i glFinish przed SwapBuffers nie pomaga (z resztą nie jest potrzebne)