SDL

Simple DirectMedia Layer (SDL) er et flerplattforms programvarebibliotek for multimedia skrevet i C. SDL er en abstraksjon mellom flere API-er innenfor grafikk-, lyd- og inndata som gjør det mulig å skrive et program som virker på ulike operativsystemer, slik som Linux, Windows, Mac OS X, AmigaOS og Amiga-klonen MorphOS. Biblioteket tar seg av grafikk, hendelser (events), digitallyd, CD-ROM, lyd, tråder, biblioteklasting og tidtakere. SDL er fri programvare.

Historie 
Skaperen av SDL, Sam Lantinga ga ut første versjon tidlig i 1998. På denne tiden jobbet han for Loki Software, et firma som satset på å konvertere Windows-spill til Linux og Mac. Han fikk ideen mens han konverterte et program fra Windows til Macintosh. Etter dette konverterte han Doom til BeOS. Flere andre gratisbibliotek ble senere støttet i SDL. Blant annet SMPEG og OpenAL.

SDL-biblioteket kan brukes med nesten ethvert programmeringsspråk, fra populære (C++, Perl, Python (via pygame), Pascal og flere.) til mindre kjente (som Euphoria eller Pliant). SDL er i dag et vanlig valg for mange multimediaapplikasjoner, takket være den åpne kildekoden (lisensiert under LGPL) og den nevnte språkstøtten.

SDL fremstår som en tynn, flerplattforms «innpakning»(wrapper), som tilbyr 2D pikseloperasjoner, lyd, filbehandling, hendelseshåndtering (event handling), tråder og mer. SDL kombineres ofte med OpenGL ved å sette opp et vindu som OpenGL kan tegne i, og flere funksjoner som OpenGL ikke håndterer alene.

Biblioteket er delt inn i flere undergrupper, Video (som tar seg av overflatefunksjoner og OpenGL), Audio, CD-ROM , Joystick og Timer. Ved siden av denne lavnivåstøtten finnes det også en del offisielle biblioteker som tar seg av flere funksjoner. Dette kalles «standardbiblioteket». De er tilgjengelige på den offisielle nettsiden og er inkludert i dokumentasjonen:

 SDL_image – støtter flere bildeformater, for eksempel JPEG og PNG.
 SDL_mixer – flere og enklere funksjoner for ly,.hovedsakelig for avspilling av flere lyder samtidig. Støtter avspilling av moduler slik som MOD, XM(Fast Tracker) og IT(Impulse Tracker).
 SDL_net – nettverksstøtte
 SDL_ttf – TrueType Font-tegning
 SDL_rtf – enkel Rich Text Format-tegning

Arkitektur

SDL har ordet «layer» i navnet fordi det egentlig er en «wrapper» for spesifikk operativsystemfunksjonalitet. Hovedhensikten med SDL er å tilby et felles rammeverk til å utnytte denne funksjonaliteten.

På grunn av oppbygningen av SDL er mye kildekode delt opp i separate moduler for hvert operativsystem for å utføre kall til underliggende systemer. Når SDL kompileres velges de riktige modulene for det ønskede systemet.

På Microsoft Windows, er SDL en «wrapper» for DirectX, som igjen kommuniserer med grafikkdriveren. Eldre versjoner av SDL brukte DirectX 5, men SDL 1.2 krever DirectX 7 som standard. Sam Lantinga uttrykte i 2000 planer om å bruke DirectX 8 i fremtiden, og per 2021 støtter SDL versjon 2.0.x standardmessig DirectX 9, men kan håndtere opptil DirectX 11. Programvaren støtter i tillegg de grafiske systemene OpenGL, Xlib for X11-vindussystemet, samt nyere grensesnitt som Vulkan og EGL i samspill med Wayland.

På Mac OS X, bruker SDL Quartz og Metal.

Syntax og undernivåer
Syntaksen i SDL er funksjonsbasert. Alle operasjoner gjøres ved å sende parametere. Spesielle strukturer (oppramsningstypen struct?) brukes også til å lagre spesifikk informasjon som SDL må behandle. Det er en del forskjellige undernivåer som SDL katagoriserer funksjonene sine under:

 Video, events and threads
 Audio
 Time
 Joystick
 CD-ROM

Skjermgalleri

Utvidelser
 SMPEG – SDL MPEG Player Library
 Guichan og ParaGUI – "widget"-samlingen.
 GGI -grafikkgrensesnitt

Se også 
 

 Allegro library
 OpenML
 DirectX
 OpenGL
 pygame

Referanser

Eksterne lenker 
 
 DevMaster.net – spillutviklingsside med artikler og guider for SDL.
 "The Game Programming Wiki" sine SDL guider
 SDL dokumentasjonen
 SOL::Tutorials Hvordan sette opp SDL, tegne til skjermen, bruke tastatur og lage et enkelt spill.]
 lazyfoo.net/SDL_tutorials Veiledninger for de fleste aspektene innen SDL. Alt fra kompilatoroppsett til OpenGL.]

Programmering