SDL2의 간단한 소개와 개념에 대해서는 이전에 다른 글을 통해 다룬적이 있었다.
SDL_INIT_TIMER |
타이머 서브시스템 |
SDL_INIT_AUDIO |
오디오 서브시스템 |
SDL_INIT_VIDEO |
비디오 서브시스템 |
SDL_INIT_JOYSTICK |
조이스틱 서브시스템 |
SDL_INIT_HAPTIC |
햅틱 (force feedback) 서브시스템 |
SDL_INIT_GAMECONTROLLER |
게임 컨트롤러 서브시스템 |
SDL_INIT_EVENTS |
이벤트 서브시스템 |
SDL_INIT_EVERYTHING |
위의 모든 서브시스템 |
SDL_INIT_NOPARACHUTE |
치명적인 신호를 무시 |
SDL_WINDOW_FULLSCREEN |
전체화면 창 |
SDL_WINDOW_FULLSCREEN_DESKTOP |
데스크탑 해상도의 전체 화면 창 |
SDL_WINDOW_OPENGL |
OpenGL 컨텍스트로 사용가능한 창 |
SDL_WINDOW_VULKAN |
Vulkan 과 함께 사용 가능한 창 |
SDL_WINDOW_HIDDEN |
보이지 않는 창 |
SDL_WINDOW_BORDERLESS |
데코레이션이 없는 창 |
SDL_WINDOW_RESIZABLE |
크기를 조정 가능 |
SDL_WINDOW_MINIMIZED |
최소화 창 |
SDL_WINDOW_MAXIMIZED |
최대화 창 |
SDL_WINDOW_INPUT_GRABBED |
입력 포커스를 얻음 |
SDL_WINDOW_ALLOW_HIGHDPI |
지원되는 경우 높은 DPI 모드에서 창 (>= SDL 2.0.1) |
SDL_RENDERER_SOFTWARE |
소프트웨어 대체 |
SDL_RENDERER_ACCELERATED |
하드웨어 가속을 사용 |
SDL_RENDERER_PRESENTVSYNC |
새로고침 수직동기화 |
SDL_RENDERER_TARGETTEXTURE |
텍스처 렌더링을 지원 |
#include <iostream>
#include <SDL2/SDL.h>
using namespace std;
#define UNUSED(x) (void)(x)
int sdl_window_example()
{
SDL_Window *window; // Declare a pointer
SDL_Init(SDL_INIT_VIDEO); // Initialize SDL2
// Create an application window with the following settings:
window = SDL_CreateWindow(
"An SDL2 window", // window title
SDL_WINDOWPOS_UNDEFINED, // initial x position
SDL_WINDOWPOS_UNDEFINED, // initial y position
640, // width, in pixels
480, // height, in pixels
SDL_WINDOW_OPENGL // flags - see below
);
// Check that the window was successfully created
if (window == nullptr) {
// In the case that the window could not be made...
printf("Could not create window: %s\n", SDL_GetError());
return 1;
}
auto renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if(renderer == nullptr)
goto destroy_window;
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
// The window is open: could enter program loop here (see SDL_PollEvent())
SDL_Delay(3000); // Pause execution for 3000 milliseconds, for example
// Close and destroy the renderer
SDL_DestroyRenderer(renderer);
destroy_window:
// Close and destroy the window
SDL_DestroyWindow(window);
// Clean up
SDL_Quit();
return 0;
}
int main(int argc, char *argv[])
{
UNUSED(argc);
UNUSED(argv);
cout << "Hello World!" << endl;
return sdl_window_example();
}