Studia

Witam ponownie jako student Politechniki Wrocławskiej wydziału Informatyki i Zarządzania kierunku Informatyka. Jak wiadomo wakacje wakacjami i nie ma czasu na nic, dlatego zająłem się projektem trójwymiarowej gry Tetris. Niestety dotarłem do ślepego zaułku, a główną przyczyną tego okazał się bardzo wciągający serial Stargate SG-1 + filmy oraz Stargate Atlantis. Stargate SG-1 jest serią 10 sezonów,  każdy składający się z ok. 20 odcinków po 40 minut każdy, więc jest to ogromna ilość czasu jaką należy poświecić.  Wracając jednak do tematu tego bloga muszę stwierdzić, że ciężko jest mi pracować nad obecnym projektem, więc myślę o rozpoczęciu czegoś nowego.

Małe programy

Postanowiłem udostępnić dwie pomocne aplikacje, które były mi potrzebne kiedyś, więc sobie je na szybko skodziłem w ramach treningu. Oto one:

  • FileListing – aplikacja zapisuje ponumerowaną listę plików w katalogu, w którym została uruchomiona
  • NewLineFix -aplikacja naprawia wszystkie znaki nowej linii dodając do nich \r, przydatna przy czytaniu plików pisanych pod linuksem.

Mam nadzieję, że komuś się przydadzą :).

Kontrola rodzicielska

Kontrola rodzicielska w systemie Windows Vista, znana jako UAC, jest mechanizmem chroniącym komputer przed uruchamianiem niebezpiecznych programów. Za każdym razem, gdy użytkownik próbuje uruchomić aplikację, która ingeruje w rejestr, bądź próbuje zapisać coś na dysku UAC prosi o potwierdzenie wykonania tej czynności.

Z początku odnosiłem się do tego sceptycznie, ponieważ za każdym razem gdy coś robiłem, wyskakiwało okienko z prośbą o potwierdzenie. Dlatego też w pewnym momencie wyłączyłem tą usługę. Ostatnio jednak się nad nią ulitowałem i ją uruchomiłem. Teraz muszę przyznać, że jest warta tych komunikatów, ponieważ mając na pendrive’ie wirusa, sposób jest zarazić Vistę z uruchomionym UACiem, wyskakuje piękny komunikat odnośnie jego uruchomienia.

Pomimo, tego że na ludzką głupotę lekarstwa nie ma, polecam uruchomienie Kontroli rodzicielskiej w systemie, gdyż dzięki temu można przynajmniej dowiedzieć się nieco o niebezpieczeństwie czyhającym w programach :).

Paczka

Właśnie opublikowałem paczkę dotychczasowej pracy. Nie jest tego dużo, ale zawsze coś. Muszę przyznać, że ostatnio pogrywam sobie w L2 więc czasu trochę mniej. Paczka zawiera prostą aplikację wykorzystującą mój menadżer scen, dzięki któremu można przełączać dowolnie między scenami. Więcej w pliku ReadMe.
NineTester

Pobierz

Ciąg dalszy kodzenia

Udało mi się napisać manager scen, na którym będę mógł oprzeć moją grę, dzięki temu sceny można przełączać (jak w grze). Ostatnio zająłem się efektami, które są w książce Programowanie gier w DirectX. Póki co mam efekt ognia i efekt wody, między którymi można się dowolnie przełączać. Postaram się zakodzić resztę i udostępnić.

Wakacje

Wreszcie skończyły mi się matury, przyszedł czas na odpoczynek i kodzenie. Będę mógł zająć się czytaniem książek, z których pozostało mi aktualnie ok. 3000 stron ;). Z drugiej strony trzeba poszukać sobie jakiejś pracy na wakacje.

Już wcześniej postanowiłem, że napiszę klona tetrisa w 3D, więc biorę się do roboty, mam nadzieję, że szybko mi to pójdzie :).

Optymalizacje

Kod który piszemy nigdy nie jest idealny, zawsze można coś poprawić, przyspieszyć. Dowiedziałem się również, że czasami jednak warto zostawiać kod taki jak jest, np. pętle for:
for(int i = 0; i < cos; i++)
ponieważ kompilator potrafi to zoptymalizować sam, a wszelkie próby działań na własną rękę mogą tylko zaciemnić mu kod. Postanowiłem poszukać co podoba się kompilatorowi msvc i natrafiłem na dość ciekawą stronę: link. Nie jest to może dokładnie to czego szukałem, ale jest to coś, co może się bardzo przydać. Postaram się zagłębić w tę lekturę w chwili wolnego czasu.

Błąd kompilatora

Udało mi się wreszcie opanować kawałek kodu, który męczył mnie od 2 dni. Okazało się, że umieściłem w strukturze, która była agregatem, referencję. Następnie zainicjalizowałem obiekt takiej struktury jako agregat. Wszystko było ładnie, dopóki nie postanowiłem przestawić kompilacji z Debug na Release. Aplikacja zaczęła się sypać. Dzisiaj udało mi się wreszcie znaleźć ten błąd, który tkwił w referencji umieszczonej w agregacie, po jej usunięciu wszystko było ok.

Myślę, że jest to błąd kompilatora, który powinien przynajmniej ostrzegać o próbie inicjalizacji referencji w agregacie. Wynik takiej operacji jest niestety niezdefiniowany.

Książki za darmo

NVIDIA od jakiegoś czasu udostępnia książki na swojej stronie za darmo. Dotychczas w pełni ukazały się:

Dzisiaj NVIDIA udostępniła pierwsze trzy rozdziały kolejnych perełek, czyli GPU Gems 2. Kolejne rozdziały będą udostępniane po trzy, co tydzień, aż do 25 sierpnia, czyli do wielkiego wydarzenia jakim jest NVISION.

Myślę, że to wspaniały gest ze strony NVIDII, ponieważ te książki są doskonałym źródłem informacji dla ludzi zajmujących się programowaniem grafiki. Co prawda mam już książkę pt. Język Cg, ale pozostałych nie będę musiał kupować :).

SSE i SSE 2 w Visual 2008

Przeglądając opcje projektu w Visual C++ 2008 Express Edition natrafiłem na opcję, która umożliwia kompilatorowi użycie dodatkowych instrukcji procesora z zestawów SSE i SSE2. Niestety nie wiem, które co i jak kompilator może zoptymalizować, ale myślę, że warto ustawić tę opcję na minimum SSE. A nuż coś pomoże. Aby uaktywnić tę opcję należy wejść do opcji projektu -> C++ -> Code Generation -> Enable Enhanced Instruction Set.

Próba uruchomienia programu zoptymalizowanego pod instrukcje wyższego zestawu po prostu się nie powiedzie, ale w dzisiejszych czasach kiedy dostępny jest zestaw instrukcji SSE3, można sobie pozwolić na minimum SSE.