Tworzenie grafiki SDL

Na tej lekcji dowiesz się czym jest biblioteka SDL oraz jak należy ją poprawnie zainstalować w środowisku Dev-C++. Opisane procedury odnoszą się wyłącznie do tego środowiska.

SDLCo to jest SDL?

SDL (ang. Simple DirectMedia Layer) jest wieloplatformową, przenośną biblioteką multimedialną, zaprojektowaną w celu udostępnienia bezpośrednich funkcji i procedur sterujących dźwiękiem, klawiaturą, myszką, joystickiem oraz grafiką 3D poprzez OpenGL i grafiką 2D poprzez bufor obrazu wideo.

SDL wspiera systemy Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX i QNX. Wspiera również w ograniczonym stopniu systemy AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS i OS/2.

Biblioteka SDL jest napisana w języku C, lecz pracuje bezpośrednio również z C++ i umożliwia łączenie z kilkoma innymi językami, łącznie z Adą, C#, Eiffelem, Erlangiem, Euphorią, Guile'em, Haskellem, Javą, Lispem, Lua'ą, ML'em, Objective C, Pascalem, Perlem, PHP, Pike'em, Pliantem, Pythonem, Ruby i Smalltalk'ierm.

SDL rozprowadzana jest zgodnie z licencją GNU LGPL w wersji 2. Licencja ta pozwala na bezpłatne korzystanie z z SDL w programach komercyjnych, pod warunkiem, że programy łączą się bezpośrednio z dostarczoną biblioteką dynamiczną SDL.dll.


Dla celów tego kursu w pierwszym rzędzie powinieneś zaopatrzyć się w odpowiednie, zintegrowane środowisko do programowania w języku C++. W sieci Internet można znaleźć wiele darmowych środowisk programowania, jednakże polecamy szczególnie Dev-C++ firmy Bloodshed. Jest on darmowy i pozwala na tworzenie dobrego oprogramowania w warunkach amatorskich.

Środowisko Dev-C++ jest proste i mało wymagające. Bez problemu uruchomi się na niezbyt nowym komputerze - wystarczy, że działa na nim system Windows XP. Prostota jednakże okupiona jest pewnymi niewygodami - np. przy uruchamianiu aplikacji. Jeśli się jednak do nich przyzwyczaisz, to jest to doskonały wybór dla celów edukacyjnych i hobbistycznych.

Po poprawnej instalacji środowiska programistycznego musisz zainstalować bibliotekę SDL.  Poniżej krok po kroku opisano procedury instalacyjne. Ponieważ dostaję dużo listów na temat problemów z instalacją czy uruchomieniem prezentowanych w naszym serwisie programów, proponuję dokładnie zapoznać się z tymi procedurami - większość opisywanych przez was trudności polega na pominięciu niektórych czynności, co w efekcie skutecznie uniemożliwia tworzenie oprogramowania dla SDL.

 

Instalacja biblioteki SDL dla DEV-C++

Jeśli masz poprawnie zainstalowane środowisko IDE Dev-C++, to możesz przystąpić do zainstalowania w nim biblioteki SDL. W tym celu przejdź do strony projektu SDL:

 

http://www.libsdl.org/

 

Po lewej stronie masz menu, które prowadzi do różnych sekcji w obrębie witryny projektu SDL. Wyszukaj sekcję Download i kliknij link SDL 1.2 (w przyszłości numer wersji biblioteki SDL może wzrosnąć, np. SDL 1.3, SDL 2.0 itp). Obecnie (luty 2009) jest to pierwszy link w sekcji Download.

 

pic

 

Link ten zaprowadzi cię na stronę z różnymi składnikami SDL. Każda dystrybucja SDL składa się z trzech elementów:

  1. Biblioteki dynamicznej SDL.dll. Jest ona niezbędna dla każdego programu napisanego pod SDL. Powinna być umieszczona albo w tym samym katalogu co program, albo w katalogu C:\Windows\System32. Powiemy o tym za chwilę.

  2. Biblioteki dla programów w C++ - SDL.lib oraz SDLmain.lib - te muszą być dołączane do każdego programu w SDL przez program linkera - jak to zrobić, dowiesz się w następnym rozdziale.

  3. Pliki nagłówkowe zawierające prototypy funkcji i danych dla SDL. Pliki te dołączamy dyrektywą #include do tekstów programów SDL.

Wszystkie te składniki znajdziesz w odpowiednim pliku dystrybucyjnym biblioteki SDL. Zatem wyszukaj na stronie tekst:

 

pic

 

W sekcji Win32 znajduje się pakiet dla kompilatora Mingw32 o nazwie SDL-devel-1.2.13-mingw32.tar.gz (Mingw32). Numerki 1.2.13 oznaczają numer wersji biblioteki SDL i w przyszłości mogą być inne. Kliknij myszką ten link. Pojawi się okienko pobrania pliku - wybierz opcję Zapisz.

 

pic

 

Następnie wskaż dowolny katalog tymczasowy, w którym zostanie zapisany plik SDL-devel-1.2.13.tar.tar. Jest to archiwum typu tar (ang. tape archive). Aby je rozpakować, musisz posiadać w swoim systemie odpowiednie narzędzie. Proponuję ściągnąć i zainstalować program WinRAR. Po uruchomieniu wskazujemy pobrane archiwum SDL-devel-1.2.13.tar.tar:

 

pic

 

i klikamy ikonę Wypakuj do...

pic

 

Pojawi się okno wyboru katalogu, do którego zostanie rozpakowane wybrane archiwum. Jeśli nic nie będziesz tu ruszał (zalecam), to archiwum SDL-devel-1.2.13.tar.tar będzie rozpakowane do folderu SDL-devel-1.2.13-mingw32 umieszczonego w tym samym katalogu, co plik SDL-devel-1.2.13.tar.tar. Zatem kliknij przycisk OK i rozpocznie się proces rozpakowywania.

 

pic

 

Po rozpakowaniu archiwum możesz zamknąć aplikację WinRAR - nie będzie już potrzebna.

Poprzez Start → Mój komputer wchodzisz do katalogu SDL-1.2.13 znajdującego się wewnątrz folderu, do którego WinRAR rozpakował archiwum. W okienku Windows Explorera powinieneś zobaczyć poniższą zawartość.

 

pic

 

Teraz musisz wykonać trzy kopiowania. Skup się, bo jeśli wykonasz to źle, programy SDL nie będą działały lub nie dadzą się poprawnie skompilować.

 

Kopiowanie 1

W katalogu bin znajduje się plik SDL.dll, który przekopiuj do C:\Windows\System32. Jeśli będziesz miał kłopoty z umieszczeniem tam pliku SDL.dll (np. masz ograniczone prawa dostępu), to plik SDL.dll należy każdorazowo umieścić w katalogu projektu (C:\Dev-Cpp\Prj\xxx). To ważne. Jeśli aplikacja SDL nie będzie mogła załadować biblioteki dynamicznej SDL.dll, to po prostu ta aplikacja się nie uruchomi i już. Wynikają z tego dwie uwagi:

Uwaga 1: plik SDL.dll należy umieszczać w dystrybucji programów SDL, które chcesz rozpowszechniać w postaci skompilowanej.

Uwaga 2: plik SDL.dll powinien pochodzić z tej samej dystrybucji biblioteki SDL, co reszta plików. W przeciwnym razie może dojść do różnych konfliktów.

 

Kopiowanie 2

Cały katalog include przekopiuj do katalogu C:\Dev-Cpp. W efekcie w katalogu C:\Dev-Cpp\include powinien się pojawić katalog SDL (sprawdź to!), w którym znajdują się pliki nagłówkowe dla dyrektywy #include. Pliki nagłówkowe dołączamy do tekstów programów pisanych pod bibliotekę SDL. Zawierają one prototypy funkcji i typów danych używanych w środowisku SDL.

 

Kopiowanie 3

Cały katalog lib przekopiuj do katalogu C:\Dev-Cpp. Po tej operacji w katalogu C:\Dev-Cpp\lib powinny znaleźć się trzy dodatkowe pliki:

libSDL.la, libSDL.a oraz libSDLmain.a

Są to biblioteki dołączane do kodu aplikacji SDL przez konsolidator (program łączący wygenerowany kod z bibliotekami).

Po tych działaniach środowisko SDL jest już zainstalowane w IDE Dev-C++.

 

Tworzenie projektu SDL

Podane poniżej czynności wykonujesz dla każdego nowego projektu SDL.

Uruchom IDE Dev-C++. Jeśli masz w IDE jakiś inny projekt, wybierz z menu opcję Plik → Zamknij projekt.

 

pic

 

Kliknij ikonę nowego projektu lub z menu wybierz opcję Plik → Nowy → Projekt.

pic

W oknie dialogowym nowego projektu wybierz ikonę Windows Application. Wpisz nazwę swojego projektu i kliknij myszką przycisk OK.

 

pic

 

Projekt zapisz w wybranym katalogu - zawsze dla nowego projektu twórz osobny katalog..

 

pic

 

Następnie wybierz z menu opcję Projekt → Opcje projektu. W okienku dialogowym kliknij zakładkę Parametry i w okienku Konsolidator wpisz poniższy tekst (najlepiej przekopiuj go z tej strony poprzez schowek Windows):

-lmingw32
-mwindows
-lSDLmain
-lSDL

pic

 

Kliknij przycisk OK. Powrócisz do edytora IDE Dev-C++. W edytorze znajduje się szablon aplikacji Windows. W SDL nie jest on nam potrzebny. Będąc w edytorze wciśnij Ctrl-A (zaznacza wszystko) i Delete (kasuje zaznaczony tekst). Okienko edytora powinno zrobić się puste.

 

pic

 

Teraz wpiszemy do edytora tekst programu SDL. Nie przejmuj się, jeśli nie rozumiesz zastosowanych w nim konstrukcji - wszystko wyjaśnimy na kolejnych zajęciach kursu. Skopiuj cały poniższy tekst programu do schowka i wklej go w edytorze IDE Dev-C++.

 

// Test instalacji biblioteki SDL
// (C)2008 Koło Informatyczne
// I LO w Tarnowie
// P003
//-------------------------------

#include <SDL/SDL.h>

int main(int argc, char *argv[])
{

  if(!SDL_Init(SDL_INIT_VIDEO))
  {
    atexit(SDL_Quit);

    SDL_Surface * screen = SDL_SetVideoMode(321, 241, 32, SDL_HWSURFACE);

    if(SDL_MUSTLOCK(screen)) SDL_LockSurface(screen);

    for(int x = 0; x < 321; x++)
      for(int y = 0; y < 241; y++)
      {
        Uint32 * p = (Uint32 *) screen -> pixels + y * screen -> pitch / 4 + x;
        * p = x % 16 ? 0x880000L : 0xffff00L;
      }

    for(int x = 0; x < 321; x++)
      for(int y = 0; y < 241; y += 16)
      {
        Uint32 * p = (Uint32 *) screen -> pixels + y * screen -> pitch / 4 + x;
        * p = 0xffff00L;
      }

    if(SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen);

    SDL_UpdateRect(screen, 0, 0, 0, 0);

    int waiting = 0;

    do
    {
      SDL_Event event;

      while (SDL_PollEvent(&event))
        if ((event.type == SDL_QUIT) ||
            (event.type == SDL_KEYDOWN) && 
            (event.key.keysym.sym == SDLK_ESCAPE)) waiting = 1;
    } while(!waiting);
  }
  return 0;
}
 

Zapisz tekst w edytorze klikając ikonę dyskietki na pasku narzędziowym. Możesz pozostawić nazwę main.cpp. Teraz kliknij ikonę kompilacji i uruchomienia:

pic

Jeśli nie popełniłeś błędów, to program powinien się skompilować do twojego katalogu pod wybraną przez ciebie nazwą i uruchomić. Na ekranie monitora pojawi się małe okno z brązowym tłem i żółtą kratką.

 

pic

 

Pojawienie się tego okienka świadczy o poprawności instalacji i konfiguracji wszystkich niezbędnych składników do tworzenia aplikacji SDL. Jeśli okienka nie otrzymasz, to zapewne popełniłeś jakiś błąd. Wróć do początku i wykonaj DOKŁADNIE WSZYSTKIE opisane czynności. To MUSI DZIAŁAĆ.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.