Archive for November 2007

Trochę więcej o Mesh

Ostatnio wymyśliłem dość prosty TextureManager (Resource był w planie, ale nie wiem wszystkiego o zasobach DX, które trzeba zwalniać, a o teksturach wiem wystarczająco). Właściwie to nazwanie go jest lekką przesadą, ponieważ składa się on ze struktury, vector’a i 2 funkcji.  Vector zawiera obiekty struktury, która składa się ze adresu tekstury, licznika użyć oraz wskaźnika na interfejs tekstury. Vector’em zarządzają 2 funkcje:

LoadTexture
DeleteTexture

Pierwsza sprawdza czy nie ma już załadowanej takiej tekstury jeżeli jest to zwiększa jej licznik i zwraca interfejs. W przeciwnym przypadku tworzy i dodaje do vector’a

Druga sprawdza po wskaźniku czy jest, jeżeli tak to dekrementuje po czym sprawdza licznik, jeżeli spadł do 0 to zwalnia teksturę, kasuje z vector’a.

Składniki zawierają się w sekcji prywatnej klasy Mesh, przy czym vector jest statyczny, dzięki czemu dostępny dla wszystkich potomków klasy abstrakcyjnej Mesh.

Obsługa wierzchołków jako Mesh

Dziś na przedmiocie o nazwie “Język Polski” (tak, to idealna pora), projektowałem klasę obsługującą wierzchołki. Stwierdziłem, że do obsługi wierzchołków typu FVF oraz tych dla Vertex Declaration potrzebne będą różne klasy, a ponieważ lubię jak wszystko jest OO (lub dąży do tego), postanowiłem, że napiszę klasę abstrakcyjną Mesh, zawierającą (aktualnie) 4 funkcje:

  • virtual void Draw() = 0;
  • virtual void InvalidateResources() = 0;
  • virtual void RestoreResources() =0;
  • void AddDevicePtr(LPDIRECT3DDEVICE9);

Te funkcje pozostaną niezmienne, przy czym wirtualne będą używane przez klasę Render. Która je będzie w odpowiednich momentach wywoływała. Następnie pomyślałem o klasie dziedziczonej dla typu FVF (aktualnie mi taka potrzebna), ale szybko doszedłem do wniosku, że nie ma ona sensu, ponieważ nie będzie zbyt elastyczna, gdyż za każdym razem potrzeba jest ustawić inne stany, a przecież to samo można zyskać bez niej, dlatego porzuciłem ją. Klasa Mesh jako abstrakcyjna będzie dziedziczona przez różne klasy obiektów, które będę mógł dodać do vector’a w klasie Render, a ta będzie wywoływać odpowiednie funkcje, które będą odpowiednio zdefiniowane dla danego obiektu.

Visual Studio 2008 Express Edition i inne…

Tak, wreszcie wyszła długo oczekiwana wersja release najlepszego, darmowego IDE firmy Microsoft: Visual Studio 2008 Express Edition. Na stronie Microsoft’u są dostępne poszczególne wersje do różnych języków, zachęcam do odwiedzenia witryny: http://www.microsoft.com/express/default.asp. Wraz ze środowiskiem ukazał się silnik graficzny (chyba to właściwa nazwa) o nazwie Dark GDK. Jak można się dowiedzieć z kodów przykładowych, korzystanie z niego jest dziecinnie proste, więcej informacji tu: http://gdk.thegamecreators.com/.

Sam aktualnie ściągam obraz płyty na której znajdują się wszystkie wersje IDE, następnie Dark GDK by przekonać się co to dokładnie jest.

NIne

Dość niedawno rozpocząłem pracę nad moim kolejnym projektem, który nazywa się on NIne. W zamiarze ma być to silnik składający się z podstawowych modułów, czyli obsługi grafiki, dźwięku, eventów, planuję również napisać własny VFS. Projekt jest duży i na pewno zajmie mi sporo czasu, jednak jest on jednocześnie okazją do napisania sobie własnych narzędzi, z których będę mógł korzystać w przyszłości. Oczywiście projekt zamieszczam w osobnym wątku, więc jeżeli trafi się okazja lub potrzeba będę pisał również inne.