Rozrywka programistów
- Tomasz Kopacz,
- 02.09.2002
XBox Microsoftu jest najbardziej zaawansowaną technicznie konsolą do gier, a jednocześnie ciekawą platformą dla programistów.
XBox Microsoftu jest najbardziej zaawansowaną technicznie konsolą do gier, a jednocześnie ciekawą platformą dla programistów.
XBox ma dysk twardy, ale pełni on inną rolę niż w PC. Gry nie są uruchamiane z dysku, a wczytywane z DVD do pamięci. Na potrzeby konsoli opracowano specjalny system plików FATX. W rzeczywistości jest to system FAT uwolniony od zaszłości historycznych. Dysk 8 GB jest podzielony na sześć obszarów. Pierwszy 5 MB zawiera informacje konfiguracyjne, kolejne trzy obszary po 750 MB to pamięć podręczna gier. Następne 500 MB jest przeznaczone na pliki systemowe (interfejs użytkownika, część bibliotek graficznych, menu itp.). Ostatnie ok. 4 GB to dane użytkownika, np. zapisane informacje o grach.
Czym i jak programować?
Na potrzeby XBox Microsoft opracował pakiet dla programistów (XDK). Składa się on z zestawu narzędzi, specjalnej wersji konsoli i dokumentacji. Inaczej niż dla Windows, dokumentacja konsoli nie jest dostępna za darmo.
Praca z XDK niewiele różni się od pisania aplikacji dla Windows. API XBox jest bardzo zbliżone do pełnego API Win32. Konsola działa pod kontrolą specjalnego systemu operacyjnego - okrojonej wersji kernela Windows 2000 z dodatkowymi bibliotekami multimedialnymi. DirectX 8 jest zgodna niemal w 100% z wersją na PC. Ponadto dostępne są moduły, które korzystają ze specyficznych cech XBoxa (ułatwiają obsługę interfejsów wejścia/ wyjścia, upraszczają programowanie grafiki). Programista nie musi troszczyć się o np. różnorodne tryby graficzne, możliwości konkretnej karty graficznej czy dźwiękowej - wszystko zostało ujednolicone. Na XBox cały kod działa w tzw. ringu 0 - jak sterowniki w systemach Windows NT/2000/XP. Dzięki temu może działać szybciej, ale nie jest dostępna np. ochrona pamięci.
Programista posługuje się IDE Visual C++ 6.0. Jedyną zmianą w stosunku do programowania dla Windows jest konieczność śledzenia programu, który działa na innej maszynie (konsoli). W specjalny sposób trzeba także przenosić program na XBox. Jednak w wielu przypadkach analogiczna technika jest wykorzystywana również w Windows.
Warto wspomnieć o jednej z ciekawszych technik związanych z programowaniem grafiki na XBox. Układ GPU może obliczać tzw. shaders. Są to małe programy, pisane w specjalnym języku graficznym (przypominającym asembler), związane albo z pikselem, albo z obiektem geometrycznym - vertexem, który określa m.in. orientację na scenie trójwymiarowej.
Tak zwane Pixel Shaders pozwalają zmieniać kolor każdego z pikseli renderowanych w scenie. W ten sposób można tworzyć efekty związane z konkretnym pikselem, np. efekt bump mapping (tekstura pseudowypukła). Vertex Shader umożliwia wykonywanie niemal dowolnej operacji geometrycznej związanej np. ze sposobem modelowania oświetlenia czy transformacją obiektu.
Oba typy shaders są przetwarzane przez procesor graficzny GPU. Tym samym główny procesor jest odciążony. Pozostaje co prawda problem synchronizacji, jednak język shaders jest tak prosty, że można dokładnie policzyć, ile będzie trwało dane przekształcenie i odpowiednio uwzględnić to w głównym programie. Na marginesie warto podkreślić, że analogiczne możliwości ma już obecnie większość nowych kart graficznych dla PC.
Uniwersalne biblioteki
Problemem autorów gier jest przenoszenie istniejącego oprogramowania na nową platformę. Większość gier powstaje przy użyciu wyspecjalizowanych bibliotek, które zajmują się realizacją całego świata wirtualnego. Obecnie niemal każdy z producentów tzw. middleware czy motorów graficznych dla gier oferuje swoje produkty w wersjach dla Windows, XBox, PlayStation 2 i Nintendo Cube.
Na przykład firma Net-Immerse opracowała pakiet przeznaczony do tworzenia gier 3D czasu rzeczywistego. Dostarcza tak skonstruowaną bibliotekę obiektową, że programiści mogą albo korzystać z warstwy wysokiego poziomu, albo bezpośrednio komunikować się z systemem bazowym. Właśnie w tym tkwi problem - tak naprawdę producent gry, który chce ją wydać w wersjach na wszystkie popularne platformy albo opiera się na uniwersalnych bibliotekach (dostosowanych do "najsłabszej" platformy), albo tworzy kod, którego nie można w prosty sposób przenosić między konsolami.