czwartek, 19 lipca 2007

Blog w zawieszeniu

Póki co zawieszam działalność tego bloga na rzecz mojej strony domowej która znajduje się tutaj:

http://www.moriturius.ovh.org/

http://www.moriturius.wordpress.com/

wtorek, 17 lipca 2007

Nowa strona?

Hmm tak myślę, że teraz póki mam wakacje powinienem zająć się zrobieniem własnej strony internetowej. To by znaczyło oczywiście że AGE pójdzie na jakiś czas w odstawkę, ale po obejrzeniu strony Tarains'a i odkryciu, że serwer www.ovh.pl oferuje całkiem dobre warunki postanowiłem wreszcie zabrać się za stronę domową.

Tak więc ageNet będzie musiało troszkę poczekać :)

AGE małe niedopatrzenie

Ostatnio nie kombinowałem specjalnie przy AGE ponieważ byłem zajęty rekrutacją na studia ;)
Okazało się, że dostałem się tam gdzie chciałem więc teraz mogę już pełni poświęcić się kodzeniu.

W moim pięknym AGE odkryłem takie małe niedopatrzenie na które początkowo nie zwróciłem uwagi... Mianowicie - na początku chciałem wcisnąć tam jeszcze obsługę UDP oraz TCP/IP, jednak gdzieś mi to umknęło. Odkryłem to jednak dopiero jak zacząłem pisać gierkę o której pisałem w poprzednim poscie :D

Dzisiaj postaram się rozpocząć prace nad zagubionym modułem ageNet ;)

wtorek, 10 lipca 2007

AGE: Faza testów

Teraz moje wspaniałe AGE wbiegło wręcz w fazę testów, która po prostu polega na tym, że spróbuję napisać sobie gierkę ;)

Podczas pisania postaram się wyłapać wszystkie niewygody używania tej biblioteki i od razu je poprawiać, żeby AGE stało się lepsze :P

AGE Accelerated

Po pierwsze - rozważania z poprzedniego posta zakończyłem. Zdecydowałem się narazie na używanie ID3DXSprite i zupełne olanie rysowania prostokątów :)

Teraz do rzeczy. Ostatnio zauważyłem, że wydajność mojego silniczka straszliwie spadła - podczas rysowania 1000 spritów wcześniej miałem 350 FPS, a teraz 120 FPS....

Winowajcą okazało się pewne ustawienie D3DPRESENT_PARAMETERS. Otóż problematyczne okazały się pola: EnableAutoDepthStencil wraz z AutoDepthStencilFormat tej struktury. Po ustawieniu EnableAutoDepthStencil na false okazało się że FPS zwiększyło się ze 3 razy :)

Pomijam już fakt, że kiedy włączę pełny ekran to FPS zwiększa się jeszcze bardziej. Taka wydajność na razie wystarczy żeby kodzić niewielkie gierki, ale co jeśli zechce zaimplementować particle engine? Cóż. o tym pomyśli się później :)

Bitwy wydajnościowe

Dzisiaj zdążyłem przetestować już kilka sposobów renderowania w celu sprawdzenia który byłby najlepszy [czyt: najszybszy]. Mam 3 kandydatów:

  • Można użyć D3DXSprite do rysowania co jest bardzo wygodne, ale problem pojawia się z wywołaniami Begin() i End(). Wywoływanie ich przy rysowaniu każdego pojedynczego sprita jest BARDZO niewydajne :) Koncept więc jest taki, żeby wywoływać je na początku i na końcu sceny. Ok. Tak może być. Oczywiście przed narysowaniem tekstu lub linii trzebaby wywołać metodę Flush() bo inaczej znajdą się one za wszystkimi spritami, a nie tam gdzie powinny. Ale co jeśli będę chciał narysować wypełniony kolorem prostokąt? Można użyć metody ColorFill() z IDirect3DDevice9, ale to jest równie wydajne co kupowanie jabłek po jednym i przynoszenie każdego do domu. Z kolei jeśli użyję DrawPrimitiveUP() to jeśli nie wywołam Flush() to oczywiście prostokąt rysowany jest za spritami, a jeżeli ją wywołam to prostokąt w ogóle nie jest rysowany!
  • Drugi sposób na rysowanie to użycie vertex bufferów. Niby dobry sposób, ale jak będę chciał zmienić którykolwiek z wierzchołków to trzeba użyć dość wolnego Lock()'a...
  • Trzeci sposób to rysowanie wszystkiego za pomocą DrawPrimitiveUP() problem w tym, ze wszystkie transformacje wierzchołków musiałbym robić na własną rękę co też mogłoby być średnio wydajne ;)
Podsumowując - nie ma złotego środka. No chyba że wymyślę jeszcze jakiś inny sposób albo dowiem się dlaczego DrawPrimitiveUP() nie działa po wywołaniu Flush()'a...

poniedziałek, 9 lipca 2007

AGE: po[d]stępy

Uff dzisiaj cały dzień się trudziłem z przywracaniem urządzenia D3DDevice w celu umożliwienia zmiany trybu graficznego i przełączania pomiędzy pełnym ekranem a oknem. Później stwierdziłem, że jak już pełny ekran to trzeba się też uporać z przestraszliwym ALT-TABem ;) Początkowo miałem pewne problemy, ale poczytałem trochę i zniknęły :)

Dodatkowo poprawiłem też funkcje wejścia klawiatury i myszki. Po drodze zakodziłem je jeszcze w Direct Input, ponieważ miałem pewne problemy z pozycją kursora na pełnym ekranie, ale wystarczyło tylko zmienić styl okna na WS_POPUP i już wszystko jest wporządku :) Dlatego też DInput poszedł się... w odstawkę. Powróciło stare dobre WinAPI ;)

Wnioski są 2:
- rozwiązanie jednego problemu od razu wpędza nas w drugi więc, jeśli założymy że zrobimy coś żeby mieć "z głowy" to może to być największy błąd naszego życia :)
- nie wszystko złoto co M$'a :P