SDL2

이승훈·2025년 9월 12일

앱 개발

포함

#include <SDL2/SDL.h>

라이브러리

선언

int SDL_Init(Uint32 flags)

1) 반환 값

의미
0성공
음수실패

2) flag

초기화할 서브시스템
SDL_INIT_TIMER타이머
SDL_INIT_AUDIO오디오
SDL_INIT_VIDEO비디오
SDL_INIT_JOYSTICK조이스틱
SDL_INIT_HAPTIC햅틱
SDL_INIT_GAMECONTROLLER게임 컨트롤러
SDL_INIT_EVENTS이벤트
SDL_INIT_SENSOR센서
SDL_INIT_NOPARACHUTE비상 종료 처리기 비활성화 (예외 처리 안함).
SDL_INIT_EVERYTHING모든 서브시스템을 초기화.

해제

void SDL_Quit(void)

에러

const char* SDL_Error(int code);

지연

void SDL_Delay(Uint32 ms);

이벤트

int SDL_PollEvent(SDL_Event* event);

이벤트 큐에서 대기 중인 이벤트를 하나씩 가져온다.
1) 반환값

의미
1이벤트가 있음.
0처리할 이벤트가 없음

2) 이벤트 종류 event.type

이벤트 상수설명이벤트 구조체
SDL_QUIT프로그램 종료 요청 (창 닫기 버튼 클릭 등)SDL_QuitEvent
SDL_KEYDOWN키가 눌렸을 때 발생SDL_KeyboardEvent
SDL_KEYUP키가 떼졌을 때 발생SDL_KeyboardEvent
SDL_MOUSEMOTION마우스 이동SDL_MouseMotionEvent
SDL_MOUSEBUTTONDOWN마우스 버튼 눌림SDL_MouseButtonEvent
SDL_MOUSEBUTTONUP마우스 버튼 떼기SDL_MouseButtonEvent
SDL_MOUSEWHEEL마우스 휠 스크롤SDL_MouseWheelEvent
SDL_WINDOWEVENT윈도우 관련 이벤트 (크기 변경, 포커스 변경 등)SDL_WindowEvent
SDL_TEXTINPUT텍스트 입력 이벤트SDL_TextInputEvent
SDL_TEXTEDITING텍스트 편집 이벤트SDL_TextEditingEvent
SDL_CONTROLLERAXISMOTION게임 컨트롤러 축 움직임SDL_ControllerAxisEvent
SDL_CONTROLLERBUTTONDOWN게임 컨트롤러 버튼 눌림SDL_ControllerButtonEvent
SDL_CONTROLLERBUTTONUP게임 컨트롤러 버튼 떼기SDL_ControllerButtonEvent
SDL_JOYAXISMOTION조이스틱 축 움직임SDL_JoyAxisEvent
SDL_JOYBUTTONDOWN조이스틱 버튼 눌림SDL_JoyButtonEvent
SDL_JOYBUTTONUP조이스틱 버튼 떼기SDL_JoyButtonEvent
SDL_USEREVENT사용자 정의 이벤트SDL_UserEvent
SDL_DROPFILE파일 드래그 & 드롭 이벤트SDL_DropEvent
SDL_SENSORUPDATE센서 값 변경 이벤트SDL_SensorEvent
SDL_MULTIGESTURE멀티터치 제스처 이벤트SDL_MultiGestureEvent
SDL_FINGERDOWN터치 스크린 터치 시작SDL_TouchFingerEvent
SDL_FINGERUP터치 종료SDL_TouchFingerEvent
SDL_FINGERMOTION터치 이동SDL_TouchFingerEvent

비디오 서브시스템

선언

SDL_Window* SDL_CreateWindow(const char* title, int x, int y, int w, int h, Uint32 flags);

1) position

설명
SDL_WINDOWPOS_UNDEFINED윈도우의 위치를 시스템이 자동으로 결정.
SDL_WINDOWPOS_CENTERED윈도우를 화면의 중앙에 배치.
양의 정수화면 상의 절대 위치를 지정. (예: 100, 200 등)
음의 정수유효하지 않은 위치로 간주되며, SDL_WINDOWPOS_UNDEFINED 와 동일한 결과.

2) size
전체화면일 경우 사이즈를 명시할 수 없으니 0, 0 으로 설정해 무시처리 한다.
3) flag

설명
SDL_WINDOW_FULLSCREEN전체 화면으로 창을 생성. (디스플레이 모드에 맞춤)
SDL_WINDOW_FULLSCREEN_DESKTOP현재 데스크탑 해상도를 유지하면서 전체 화면처럼 창을 만듦. (해상도 강제 변경 없음)
SDL_WINDOW_OPENGLOpenGL 렌더링 컨텍스트를 사용할 수 있는 창을 생성.
SDL_WINDOW_SHOWN창을 화면에 표시. (기본값)
SDL_WINDOW_HIDDEN창을 처음에는 숨김. 나중에 SDL_ShowWindow()로 표시 가능
SDL_WINDOW_BORDERLESS테두리 없는 창을 만듦. (타이틀바/테두리 없음)
SDL_WINDOW_RESIZABLE창 크기를 사용자가 조절할 수 있게 함.
SDL_WINDOW_MINIMIZED창을 최소화 상태로 시작.
SDL_WINDOW_MAXIMIZED창을 최대화 상태로 시작.
SDL_WINDOW_INPUT_GRABBED입력을 창에 잡도록 설정.
SDL_WINDOW_ALLOW_HIGHDPI고DPI 스크린에서 DPI 보정을 허용.

OR(|) 연산자로 여러 개를 동시에 사용 가능하다.

SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS

해제

void SDL_DestroyWindow(SDL_Window* window);

크기 조회

DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w, int *h);
매개변수설명
SDL_Window * window크기를 알고 싶은 윈도우 포인터
int *w가로 크기를 돌려받을 정수 포인터
int *h세로 크기를 돌려받을 정수 포인터

OpenGL context

설정

int SDL_GL_SetAttribute(SDL-GLattr attr, int value);
Attributevalue의미
SDL_GL_CONTEXT_PROFILE_MASKSDL_GL_CONTEXT_PROFILE_ESOpenGL ES 을 표준으로
SDL_GL_CONTEXT_MAJOR_VERSION22.x 버전
SDL_GL_CONTEXT_MINOR_VERSION0x.0 버전
SDL_GL_DOUBLEBUFFER1더블버퍼링 활성화

선언

DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window *window);
반환값설명
SDL_GLContext (≒ void* 유효 포인터)생성된 OpenGL/ES 렌더링 컨텍스트 핸들
NULL실패

해제

DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context);

버퍼 교체

모니터가 화면을 다 바꾸는 순간에만 GPU가 새 그림을 보내도록 맞춰서, 화면이 찢어져 보이지 않게 하는 게 수직동기화이다.

설정

DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval);

⊙ 반환값

의미
0적용 성공
-1실패

⊙ interval

의미
0VSync 끔 (가능하면 즉시 스왑, tearing 발생 가능)
1VSync 켬 (모니터 주사율에 맞춰 스왑)
-1“Adaptive VSync” 요청 (지원하는 드라이버에서만 가능, 지원 안 하면 실패)
N>1특정 플랫폼에서만 지원. N 프레임마다 스왑(=프레임 건너뛰기). 대부분 구현에서는 미지원

조회

DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void);
반환값설명
0VSync 끔 (스왑 즉시, tearing 발생 가능)
1VSync 켜짐 (스왑이 디스플레이 주사율과 동기화)
-1Adaptive VSync 모드 (지원하는 드라이버에서만, 안 되면 Set이 실패했을 것)
기타드라이버 특이 구현 (거의 없음, 보통 0/1/-1만 반환)

실행

void SDL_GL_SwapWindow(SDL_Window* window);
profile
안녕하세요!

0개의 댓글