심플 다이렉트미디어 레이어
| 파일:Simple DirectMedia Layer, Logo.svg | |
| 개발자 | Sam Lantinga |
|---|---|
| 발표일 | 1998년 |
| 저장소 |
|
| 프로그래밍 언어 | C |
| 엔진 | |
| 운영 체제 | 크로스 플랫폼 |
| 플랫폼 | 윈도, OS X 10.5 이상, 리눅스 2.6 이상, iOS 3.1.3 이상, 안드로이드 2.3.3 이상, FreeBSD 8.4 이상 |
| 종류 | API |
| 라이선스 | 1.2 GNU LGPL / 2.0 zlib 라이선스 |
| 웹사이트 | www |
심플 다이렉트미디어 레이어(Simple DirectMedia Layer), SDL은 C 프로그래밍 언어로 짜여진 크로스플랫폼 개발 라이브러리이다. 이 라이브러리는 비디오, 오디오, 사용자 입력 등의 계층을 추상화하여, 리눅스, 마이크로소프트 윈도우, 맥 OS X 등 여러 운영 체제에서 실행할 수 있도록 한다. 이 라이브러리는 비디오, 이벤트, 디지털 오디오, CD-ROM, 사운드, 스레드 및 공유 객체 불러오기, 네트워킹, 타이머를 관리한다.[1]
이 라이브러리는 내부적으로 C로 작성되어 있으며, 대상 플랫폼에 따라 C++나 오브젝티브-C도 지원하며 C의 API를 제공함으로써 다른 언어와의 결합을 지원한다.[2]
구조
SDL 라이브러리 그 자체는 매우 단순하다. 이 라이브러리는 몇 가지 하부 시스템으로 나뉘는데, 이를테면 비디오, 오디오, CD-ROM, 조이스틱, 타이머가 있다. 이러한 낮은 수준의 기본적인 지원뿐 아니라 다음과 같은 기능들도 몇 가지 더 지원한다. 이들은 "표준 라이브러리"를 이루고, 공식 웹사이트에서 제공되며 공식 문서에 포함되어 있다:
- SDL_image — 다수의 이미지 포맷 지원
- SDL_mixer — 복잡한 오디오 함수 (주로 사운드 믹싱을 위해 존재)
- SDL_net — 네트워킹 지원
- SDL_ttf — 트루타입 글꼴 렌더링 지원
- SDL_rtf — 단순 서식 있는 텍스트 포맷 렌더링
언어 바인딩
SDL 2.0 라이브러리는 C, C++, 파스칼[2], 펄(sdl.perl.org를 통해)[2], 파이썬(PySDL2.0을 통해)[2], C#[2], 루아[2], OCaml[2], 러스트, Nim, 발라, 지니를 위한 언어 바인딩이 있다.
예제
#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기반으로 작업시 오류가 발생함
}
역사
1998년 초에 처음 출시된 이 라이브러리는 샘 랜틴가(Sam Lantinga)가 로키 소프트웨어용으로 작업하는 동안 만들어냈다. 그는 윈도 응용 프로그램을 매킨토시로 포팅하는 동안 이 개념을 떠올렸다. 그 뒤 SDL을 이용하여 둠을 BeOS로 포팅하였다. 일부 다른 자유 라이브러리들이 SDL에 맞추어 개발되었는데, 이를테면 SMPEG와 OpenAL이 있다. 그는 2008년에 갤럭시 게임웍스를 설립하여 SDL의 상업적인 지원을 돕기도 했으나 이 기업 계획은 시간 제한으로 인해 보류된 상태이다.[3]
SDL 1.3은 SDL 1.2 코드 기반의 주요 업데이트로 자리잡았다. 1.2 API의 여러 부분을, 다중 입출력 옵션을 위한 더 일반적인 지원으로 대체하고 있다. 추가되는 기능으로는 이를테면 다중 창 지원, 다중 입력 장치 지원 (다중 마우스, 다중 키보드 등), 하드웨어 가속 2차원 그래픽, 더 나은 유니코드 지원이 있다. 그 뒤 1.3/2.0으로 브랜치가 이동됨에 따라[4] SDL 1.3 개발이 끝나면 끝으로 SDL 2.0이 될 예정이다.[5] SDL 1.3은 zlib 라이선스이므로 SDL 1.2와 달리 상용 클로즈드 소스 프로젝트에 정적 링크하여 자유롭게 이용할 수 있다.[6]
갤러리
같이 보기
각주
- ↑ “SDL official website”. Libsdl.org. 2010년 3월 19일에 확인함.
- ↑ 가 나 다 라 마 바 사 “SDL Language Bindings”. 《libsdl.org》. Simple DirectMedia Layer. 2014년 8월 13일에 확인함.
- ↑ “Exploring the Galaxy”. 2011년 4월 6일. 2012년 1월 30일에 확인함.
- ↑ “SDL 1.3 Roadmap”. 2011년 6월 14일. 2012년 7월 12일에 원본 문서에서 보존된 문서. 2011년 7월 25일에 확인함.
- ↑ “FAQs: General”. 2009년 10월 10일. 2011년 7월 24일에 확인함.
- ↑ “Licensing the Simple DirectMedia Layer library”. 2012년 1월 30일에 확인함.
외부 링크
- 모듈:Official_website 90번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
- 스크립트 오류가 있는 문서
- 잘못된 파일 링크가 포함된 문서
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- API
- C 라이브러리
- 크로스 플랫폼 소프트웨어
- 그래픽 라이브러리
- MacOS API
- 비디오 게임 개발
- Zlib 라이선스 소프트웨어
- 리눅스 API