| D | E | L | P | H | I | R | O programmeren linux gitaar foto's email |
| sdl sql delphi componenten cpp c |
SDL onder windows draaiend krijgenWat krijgen we nu? Ik als Linux fanaat en een stuk over hoe je SDL onder Windows draaiend krijgt? Yep.. en met een goede reden. Iedereen heeft op z'n werk wel eens dode momenten en de meesten van ons moeten het op het werk helaas met een Windhoos-bak doen (nog wel!). Ik dus ook en om toch code voor Linux te kunnen schrijven (eigenlijk is SDL code platform onafhankelijk) gebruik ik gewoon de mingw32 compiler. Dan draai je een soort Linux shell waarmee je met de onder Linux gebruikelijke GCC compiler programmacode (C, C++) kunt compileren. Wat is SDL ?SDL is een platformonafhankelijke bibliotheek waarmee het een stuk eenvoudiger wordt om programmacode voor spelletjes of grafisch dan wel geluids georiënteerde applicaties in het algemeen, te schrijven. De officiële website vind je onder deze link. De website van SDL heeft veel voorbeelden en een uitgebreide beschrijving van de functies. SDL gaat eigenlijk uit van het gebruik van C maar er is ook een versie voor Pascal (Jedi-SDL project) en er zijn diverse uitbreidingen gemaakt om het in een object georiënteerd jasje (C++) te stoppen. Zie hiervoor de SDL website.De benodigde pakketten
Om SDL onder Windhoos draaiend te krijgen heb je de volgende pakketen nodig:
De installatieDe eerste stap is het installeren van het MinGW pakket. In mijn geval heet het bestand MinGW-1.1.tar.gz. Uitpakken van dit soort bestanden onder Windhoos kan met de gemiddelde 'ontzipper' (bv. winzip). De volgende stappen installeert het MinGW pakket:
Nu een makkie; installeer MSys dat in een keurig installshield pakje komt en je gedurende de gehele installatie aan de hand neemt. Het moeilijkste deel is het opgeven van het pad waar je MinGW geinstalleerd hebt.. gebruik hier / ipv \ als directory scheiding. Omdat de MinGW omgeving zonder OpenGL module wordt geleverd moet je de volgende kunstgreep toepassen. Als het goed is heb je een bestand in de vorm van 'opengl-n.n.n-n-src.tar.gz' (waarbij n.n.n-n het versienummer is) van de Cygwin site geplukt. (Cygwin is de grote broer van MinGW, zeg maar een complete Unix console onder Windhoos!) Zorg ervoor dat de bestanden uit dit archief in dezelfde directory onder je MinGW installatie komen te staan; bv. het opengl archief bevat een directory met de naam bin; kopieer alle bestanden uit deze directory dan ook naar bv C:\MinGW\bin. Doe hetzelfde voor alle bestanden in de overige directories (in ieder geval doc, include en lib) uit het opengl-archief. Om SDL te installeren moeten we nu de volgende stappen ondernemen:
Een laatste opmerking; mocht je zelf code schrijven en dit willen compileren
dan heb je steeds de twee scriptjes nodig en moet je ook steeds de volgende
commando's uitvoeren:
Veel plezier met programmeren! |
Tip - snelle schermupdates
Een flessenhals in de prestaties van een SDL programma is vaak het verversen van
het scherm. Op het moment dat er een
|
Tip - optimalisatieHier een samenvatting van wat tips die je programma sneller kunnen maken. Je kunt dit bereiken door in SDL_SetVideoMode de vlag SDL_ANYFORMAT te zetten. Op deze manier wordt altijd de kleurendiepte gebruikt van het systeem waar je programma op draait, bijvoorbeeld.
SDL_Surface *screen;
Een afbeelding moet altijd dezelfde kleurendiepte hebben als de videomode die je gebruikt. Nu is het nogal lastig om voor elke videomode een afbeelding paraat te hebben dus kun je de volgende truc in SDL toepassen; lees de afbeelding in, maak een copy in het juiste formaat en gooi de oude afbeelding weer weg (figuurlijk!). In code:
SDL_Surface *tmp, *back;Als je een animatie hebt (zoals in de onderstaande figuur) stop dan niet elke 'frame' van de animatie in een apart bestand maar stop alle frames in hetzelfde bestand. Dit scheelt een hoop bytes en een hoop werk in de code (je hoeft maar 1 bestand in te lezen) en het is maar weinig werk om vanuit het geladen bestand de juiste frame te kiezen. Er zijn theoriën dat het sneller is om de afbeeldingen verticaal te stapelen maar dat is echt een optimalisatie die wel heel ver gaat. Horizontaal is ook prima. Wat nog wel snelheidswinst oplevert is om de grootte van je afbeeldingen (breedte, hoogte) een macht van 2 te laten zijn (4, 8, 16, 32 etc). Voorbeeldje in code:
//veels te ingewikkeld, elke frame 1 bestand |
Tip - SDL en Debian
Wil je enkel SDL ondersteuning dan voldoet het om de gewone SDL pakketten (bv. libsdl1.2-all) te installeren met bv. apt-get of dpkg. Wil je ook kunnen ontwikkelen met SDL dan zul je ook de development packages (bv. libsdl-image1.2-dev) moeten installeren. Deze bevatten o.a. de SDL header bestanden en het onmisbare 'sdl-config' commando. Om een voor mij onbekende reden bevat het debian pakket van sdl_mixer geen 'playwave' commando. Dit commando komt standaard bij de normale versie van SDL_Mixer maar Debian heeft daarvan afgezien. Om het gemis op te vangen kun je gelukkig een nog veel beter commando installeren vanuit het pakket 'sox'. Dit pakketje bevat het commando 'play' dat meer opties (bv. pitch shifting) dan 'playwave' kent. |
Beperkingen van SDL 1.x op linux
De prestaties van SDL vallen sommige mensen nog wel eens tegen. Zelfs op een systeem
als een P4 - 2Ghz met mucho RAM en een GeForce 4 weetikveel halen hun eigen creaties
onder linux nog maar 50fps (let wel.. 50fps is meer dan zat voor een soepel
spel.. alleen verwachten mensen met zo'n systeem getallen als 1000 of meer te zien). Hoe kan dat? |