{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                   = 심플 다이렉트미디어 레이어<br />Simple DirectMedia Layer
| screenshot             = 
| caption                = 
| developer              = [[:en:Sam Lantinga|Sam Lantinga]]
| maintainer             = [[:en:Sam Lantinga|Sam Lantinga]]
| latest release version = 2.0.10<ref>{{웹 인용|url=http://www.libsdl.org/download-2.0.php|title=Simple DirectMedia Layer - SDL version 2.0.10 (stable)|publisher=Libsdl.org|accessdate=26 July 2019}}</ref>
| latest release date    = {{시작 날짜와 나이|2019|07|25}}
| operating system       = [[크로스 플랫폼]]
| platform = 윈도, OS X 10.5 이상, 리눅스 2.6 이상, iOS 3.1.3 이상, 안드로이드 2.3.3 이상, FreeBSD 8.4 이상
| programming language   = [[C (프로그래밍 언어)|C]]
| genre                  = [[API]]
| license                = 1.2 [[GNU 약소 일반 공중 사용 허가서|GNU LGPL]] / 2.0 [[zlib 라이선스]]
| website                = {{url|http://www.libsdl.org/}}
}}
[[파일:Linux kernel and OpenGL video games.svg|섬네일|250px|'''Simple DirectMedia Layer''']]
[[파일:SDL Layers.svg|섬네일|SDL 플랫폼의 추상 계층]]
'''심플 다이렉트미디어 레이어'''(Simple DirectMedia Layer), '''SDL'''은 [[C 프로그래밍 언어]]로 짜여진 [[크로스플랫폼]] 멀티미디어 라이브러리이다. 이 라이브러리는 비디오, 오디오, 사용자 입력 등의 계층을 [[추상화 (컴퓨터 과학)|추상화]]하여, [[리눅스]], [[마이크로소프트 윈도우]], [[맥 OS X]] 등 여러 [[운영 체제]]에서 실행이 가능하도록 한다. 이 라이브러리는 비디오, 이벤트, 디지털 오디오, CD-ROM, 사운드, 스레드, 공유 객체 불러오기, 네트워킹, 타이머를 관리한다.<ref>{{웹 인용|url=http://www.libsdl.org |제목=SDL official website |publisher=Libsdl.org |date= |accessdate=2010-03-19}}</ref>

이 라이브러리는 내부적으로 [[C (프로그래밍 언어)|C]]로 작성되어 있으며, 대상 플랫폼에 따라 [[C++]]나 [[오브젝티브-C]]도 지원하며 C의 [[API]]를 제공함으로써 다른 언어와의 결합을 지원한다.<ref name="sdl2bindings">{{웹 인용 |url=http://www.libsdl.org/languages.php |title=SDL Language Bindings |website=libsdl.org |publisher=Simple DirectMedia Layer |accessdate=13 August 2014}}</ref>

== 구조 ==
SDL 라이브러리 그 자체는 매우 단순하다. 이 라이브러리에는 몇 가지 하부 시스템으로 나뉘는데, 이를테면 비디오, 오디오, CD-ROM, 조이스틱, 타이머가 있다. 이러한 낮은 수준의 기본적인 지원뿐 아니라 다음과 같은 기능들도 몇 가지 더 지원한다. 이들은 "표준 라이브러리"를 이루고, 공식 웹사이트에서 제공되며 공식 문서에 포함되어 있다:
* ''SDL_image'' — 다수의 이미지 포맷 지원
* ''SDL_mixer'' — 복잡한 오디오 함수 (주로 사운드 믹싱을 위해 존재)
* ''SDL_net'' — 네트워킹 지원
* ''SDL_ttf'' — [[트루타입]] 글꼴 렌더링 지원
* ''SDL_rtf'' — 단순 [[서식 있는 텍스트 포맷]] 렌더링

=== 언어 바인딩 ===
SDL 2.0 라이브러는 [[C (프로그래밍 언어)|C]], [[C++]], [[파스칼 (프로그래밍 언어)|파스칼]]<ref name="sdl2bindings"/>, [[펄]](sdl.perl.org를 통해)<ref name="sdl2bindings"/>, [[파이썬]](PySDL2.0을 통해)<ref name="sdl2bindings"/>, C#<ref name="sdl2bindings"/>, 루아<ref name="sdl2bindings"/>, [[OCaml]]<ref name="sdl2bindings"/>, [[러스트 (프로그래밍 언어)|러스트]], [[Nim]], [[발라 (프로그래밍 언어)|발라]], [[지니 (프로그래밍 언어)|지니]]를 위한 [[언어 바인딩]]이 있다.

== 예제 ==
<syntaxhighlight lang="c">
#include "SDL/SDL.h"

int main(int argc, char *args[])
{
    // SDL 비디오 시스템 초기화
    if (SDL_Init(SDL_INIT_VIDEO) == -1)
    {
        return 1;
    }

    // 화면 구성
    SDL_Surface *screen = NULL;
    screen = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE);

    // 화면 구성에 오류가 있으면
    if (screen == NULL)
    {
        return 1;
    }

    // 창 위치 설정
    SDL_WM_SetCaption("간단 SDL 응용 프로그램!", NULL);

    // 프로그램의 종료 대기
    bool quit = false;

    // 프로그램이 아직 종료 상황이 아닌 동안
    while (quit == false)
    {
        // 이벤트가 있는 동안
        while (SDL_PollEvent(&event))
        {
            // 사용자가 창의 X 단추를 눌러서 프로그램을 끝낼 때
            if (event.type == SDL_QUIT)
            {
                // 프로그램 끝내기
                quit = true;
            }
        }

        // 화면 채우기
        SDL_FillRect(screen, &screen->clip_rect, SDL_MapRGB(screen->format, 0xFF, 0xFF, 0xFF));

        // 화면 갱신
        if (SDL_Flip(screen) == -1)
        {
            return 1;
        }
    }

    // SDL 끝내기
    SDL_Quit();

    return 0;
// 위 예제는 SDL2.0기반으로 작업시 오류가 발생함
}
</syntaxhighlight>

== 역사 ==
[[파일:SDL-Workshop-IMG 2612.jpg|섬네일|SDL 작업을 하는 모습]]
1998년 초에 처음 출시된 이 라이브러리는 [[샘 랜틴가]](Sam Lantinga)가 [[로키 소프트웨어]]용으로 작업하는 동안 만들어냈다. 그는 윈도 응용 프로그램을 매킨토시로 포팅하는 동안 이 개념을 떠올렸다. 그 뒤 SDL을 이용하여 [[둠 (1993년 비디오 게임)|둠]]을 [[BeOS]]로 포팅하였다. 일부 다른 자유 라이브러리들이 SDL에 맞추어 개발되었는데, 이를테면 [[SMPEG]]와 [[OpenAL]]이 있다. 그는 2008년에 갤럭시 게임웍스를 설립하여 SDL의 상업적인 지원을 돕기도 했으나 이 기업 계획은 시간 제한으로 인해 보류된 상태이다.<ref>{{웹 인용 |제목=Exploring the Galaxy | url=http://slouken.blogspot.com/2011/04/exploring-galaxy.html | date=2011년 4월 6일| accessdate=Jan 30, 2012}}</ref>

SDL 1.3은 SDL 1.2 코드 기반의 주요 업데이트로 자리잡았다. 1.2 API의 여러 부분을, 다중 입출력 옵션을 위한 더 일반적인 지원으로 대체하고 있다. 추가되는 기능으로는 이를테면 다중 창 지원, 다중 입력 장치 지원 (다중 마우스, 다중 키보드 등), 하드웨어 가속 2차원 그래픽, 더 나은 [[유니코드]] 지원이 있다. 그 뒤 1.3/2.0으로 브랜치가 이동됨에 따라<ref>{{웹 인용 |url=http://wiki.libsdl.org/moin.cgi/Roadmap |제목=SDL 1.3 Roadmap|date=2011년 6월 14일 |accessdate=2011년 7월 25일}}</ref> SDL 1.3 개발이 끝나면 끝으로 SDL 2.0이 될 예정이다.<ref>{{웹 인용 | url=http://wiki.libsdl.org/moin.cgi/FAQGeneral#What.27s_up_with_SDL_2.0.3F_Can_I_help.3F | 제목=FAQs: General | date=2009년 10월 10일 | accessdate=2011년 7월 24일}}</ref> SDL 1.3은 [[zlib 라이선스]]이므로 SDL 1.2와 달리 상용 클로즈드 소스 프로젝트에 정적 링크하여 자유롭게 이용할 수 있다.<ref>{{웹 인용 | url=http://www.libsdl.org/license.php | 제목=Licensing the Simple DirectMedia Layer library | accessdate=Jan 30, 2012}}</ref>

== 갤러리 ==
<gallery widths="180px" class="center">
파일:Unknown horizons 3176.PNG| ''[[Unknown Horizons]]''
파일:0adcarthaginians.jpg | ''[[0 A.D.]]''
파일:Hwscreen.png| ''[[Hedgewars]]''
파일:Fretsonfirex1.jpg| ''[[Frets on Fire]]''
파일:OpenTTD-0.7.1-de.png|''[[OpenTTD]]''
파일:Wesnoth-1.6-5.jpg|''[[The Battle for Wesnoth]]''
파일:OOlite_Mac_OS_X_screenshot.jpg| ''[[Elite|Oolite]]''
파일:SMC15PromoShot.png| ''[[Secret Maryo Chronicles]]''
파일:Trine - Knight Block.jpg| ''[[:en:Trine (Computerspiel)|Trine]]''
</gallery>

== 같이 보기 ==
{{위키공용분류}}
* [[다이렉트엑스]]
* [[OpenGL]]
* [[OpenML]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* [http://www.libsdl.org SDL 웹사이트]

[[분류:API]]
[[분류:C 라이브러리]]
[[분류:크로스 플랫폼 소프트웨어]]
[[분류:그래픽 라이브러리]]
[[분류:MacOS API]]
[[분류:비디오 게임 개발]]
[[분류:Zlib 라이선스 소프트웨어]]
[[분류:리눅스 API]]