포함
#include <SDL2/SDL.h>
라이브러리
선언
int SDL_Init(Uint32 flags)
1) 반환 값
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) 반환값
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_OPENGL | OpenGL 렌더링 컨텍스트를 사용할 수 있는 창을 생성. |
| 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);
| Attribute | value | 의미 |
|---|
| SDL_GL_CONTEXT_PROFILE_MASK | SDL_GL_CONTEXT_PROFILE_ES | OpenGL ES 을 표준으로 |
| SDL_GL_CONTEXT_MAJOR_VERSION | 2 | 2.x 버전 |
| SDL_GL_CONTEXT_MINOR_VERSION | 0 | x.0 버전 |
| SDL_GL_DOUBLEBUFFER | 1 | 더블버퍼링 활성화 |
선언
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);
⊙ 반환값
⊙ interval
| 값 | 의미 |
|---|
| 0 | VSync 끔 (가능하면 즉시 스왑, tearing 발생 가능) |
| 1 | VSync 켬 (모니터 주사율에 맞춰 스왑) |
| -1 | “Adaptive VSync” 요청 (지원하는 드라이버에서만 가능, 지원 안 하면 실패) |
| N>1 | 특정 플랫폼에서만 지원. N 프레임마다 스왑(=프레임 건너뛰기). 대부분 구현에서는 미지원 |
조회
DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void);
| 반환값 | 설명 |
|---|
| 0 | VSync 끔 (스왑 즉시, tearing 발생 가능) |
| 1 | VSync 켜짐 (스왑이 디스플레이 주사율과 동기화) |
| -1 | Adaptive VSync 모드 (지원하는 드라이버에서만, 안 되면 Set이 실패했을 것) |
| 기타 | 드라이버 특이 구현 (거의 없음, 보통 0/1/-1만 반환) |
실행
void SDL_GL_SwapWindow(SDL_Window* window);