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

| *[[Freeciv]]*
File:Unknown horizons 3176.PNG| *[[Unknown Horizons]]*
File:0_A.D._alpha_25_-_playing_as_Spartans.jpg| *[[0 A.D.]]*
File:Hwscreen.png| *[[Hedgewars]]*
File:Fretsonfirex1.jpg| *[[Frets on Fire]]*
File:OpenTTD-0.7.1-de.png|*[[OpenTTD]]*
File:Wesnoth-1.6-5.jpg|*[[The Battle for Wesnoth]]*
File:OOlite_Mac_OS_X_screenshot.jpg| *[[Elite|Oolite]]*
File:SMC15PromoShot.png| *[[Secret Maryo Chronicles]]*
File:Trine - Knight Block.jpg| *[[Trine (Computerspiel)|Trine]]*


## 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.]