======================== 2020.11.26 업데이트 사항 ========================
-> 설치가 쉽지 않아서 한번 더 실행관련 과정을 리뷰합니다.
-> 비주얼 스튜디오 코드, SDL2, MinGW 32 bit 윈도우 10 설치환경입니다.
-> 앞부분에 실행관련 소스코드와 과정을 업데이트 해둡니다. 설치의 처음부분은 뒷쪽을 보면 됩니다.
*tasks.json 파일 -ID 는 SDL 의 include 경로 -LD는 SDL의 lib 경로.
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "SDL2",
"command": "C:\\MinGW\\bin\\g++.exe",
"args": [
"-g",
"src\\main.cpp",
"-o",
"build\\game.exe",
"-ID:/Programming/SDL2/i686-w64-mingw32/include",
"-LD:/Programming/SDL2/i686-w64-mingw32/lib",
"-lmingw32",
"-lSDL2main",
"-lSDL2",
"-mwindows"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
*launch.json 파일. miDebuggerPath에 MinGW 디버거 설정.
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\build\\game.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enably pretty printing",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "SDL2"
}
]
}
*c_cpp_properties.json 파일. includePath에 SDL 인클루드 폴더를 포함한다. 컴파일러 패스에 MinGw 컴파일러 g++, 인텔리센스모드 gcc-x64 혹은 x86
{
"configurations": [
{
"name": "SDL2",
"includePath": [
"${workspaceFolder}/**",
"D:/Programming/SDL2/i686-w64-mingw32/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.18362.0",
"compilerPath": "C:\\MinGW\\bin\\g++.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
*SDL 기본 소스코드
#include <SDL2/SDL.h>
#include <iostream>
int main(int argv, char** args)
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *window = SDL_CreateWindow("Hello SDL Developer!", SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, 500, 300, 0);
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0);
bool isRunning = true;
SDL_Event event;
while (isRunning)
{
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
isRunning = false;
break;
case SDL_KEYDOWN:
if (event.key.keysym.sym == SDLK_ESCAPE)
{
std::cout << "Window Closing...\n";
isRunning = false;
}
}
}
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 192, 246, 255, 255);
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
F5로 실행가능하다.
아래 배치 파일로 터미널에서 테스트도 가능
echo new start
g++ src/main.cpp -g -ID:/Programming/SDL2/i686-w64-mingw32/include -LD:/Programming/SDL2/i686-w64-mingw32/lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2 -o build/game2.exe
이번 포스트는 오픈소스인 SDL Libarary 의 개발환경설치 및 테스트입니다.
SDL은 2000년대 초반에 샘 라틴가에 의해서 만들어진 크로스 플랫폼 게임라이브러리입니다. (현재 밸브 직원이다)
https://en.wikipedia.org/wiki/Sam_Lantinga
SDL (Simple DirectMedia Layer)는 OpenGL과 Direct3D로 저수준 레벨의 오디오,키보드,조이스틱,그래픽 에 접근하도록 디자인된 게임 개발 라이브러리입니다. 윈도우와 리눅스, Mac OS , iOS, Android 까지 지원합니다. 어떤 소프트웨어에도 자유롭게 쓸 수 있습니다.
한마디로 경량급 게임엔진이라 볼 수 있습니다. 꽤 오래전에 개인이 개발한 Open Source 프로그램이라 최신의 유니티 같은 본격 게임엔진에 비하면 기능들이 부족합니다. 그렇지만 OpenGL과 Direct3D를 지원하고 학생들이 C++ 배울 때 교육 효과가 좋고, 이미지나 오디오 등 미디어를 처리하는 라이브러리를 제공하는 등 아직도 사용이 되는 라이브러리 입니다. 그리고 라이쎈스가 무료라 게임을 만들어서 판매해도 됩니다.
스텔라리스가 SDL로 만들어진것은 저도 처음 알았네요
특히 C/C++언어는 온통 컴퓨터의 논리와 씨름하며 텍스트만 읽게되니 좀 지루할 때가 있죠. 이럴 때 좀 재미있는 프로그래밍을 해야 할 때입니다. SDL이 그 조건에 잘 맞죠. 파이썬으로 파이게임을 사용해 봤다면 SDL 에 익숙해지기 쉬울 것입니다. Pygame은 기본적으로 SDL의 wrapper 입니다(감싸는 껍질 같은 것)
어느 라이브러리, 프레임워크나 개발환경을 설치하는게 일입니다. 설치만 어떻게 하면 그 다음에는 프로그래밍을 한줄씩 진행하면 될 것 같은데 설치가 안되서 몇시간 붙잡고 있는 경우도 많죠. 알고나면 간단한데 헤메는 경우도 있고, 원래 설치가 어려운 것들도 있습니다.
글쓴이도 그런 경험이 있어서 요즘은 설치관련 내용을 많이 다룹니다. 저도 까먹었을 때 참고하려구요.
우선 SDL 은 C/C++을 사용하는 게임 개발 라이브러리입니다. 그걸 감안하고 시작해보겠습니다. 이 포스팅은 비주얼 스튜디오가 아니라 MinGW 를 사용해서 세팅합니다.
1. MinGW 를 설치합니다.
- 여기서 주의할 점은 MinGW 는 32 비트 버전과 64 비트 버전이 따로 있습니다. 64비트로 하는 방법도 있을 테지만, 아무래도 32비트가 주된 환경이었던 시대에 개발된 라이브러리임을 감안하여 그냥 32비트를 설치하는게 좋습니다. 호환성 측면에도 32비트가 유리합니다. 중요한 건 MinGW 버전이 32비트 이면 SDL도 32비트여야 합니다.
메모리 주소가 4기가가 안넘어가는 간단한 프로그램을 만들겁니다 ;;;
아래처럼 버전을 확인해서 64비트 표시가 없어야 합니다.
2. 환경변수 설정
- MinGW\bin 의 경로를 환경변수에 등록합니다. 앱 검색에서 '환경 변수' 로 찾거나 윈도우키 + R 로 sysdm.cpl명령어를 입력하여 [시스템속성] - [고급] - [환경변수] 로 들어갑니다. 시스템 변수의 Path를 더블클릭하면 나오는 환경변수편집창에 경로를 등록합니다. 아래 이미지에는 MinGW 가 MinGW64위에 있는 것은 두개 다 설치되어 있어서 32비트를 사용하려고 MinGW를 맨 위에다 올렸습니다.
3. SDL 설치
- 아래 사이트에서 SDL 라이브러리를 설치합니다.
http://libsdl.org/download-2.0.php
비주얼 C++ 파일과 Mac OS 파일도 있네요. 이 포스트에서는 MinGW 개발용 파일을 받습니다.
압축화일을 열어서 보면 아래와 같이 있습니다. 32비트는 아래 파일입니다. 이 파일 안에 있는 내용물들을 적절한 곳에 압축을 풉니다.
여기서는 C의 mingw_dev_lib에 풀었습니다.
아래의 사이트 아래쪽에 가면 SDL로 창을 띄우는 튜토리얼이 있습니다. 소스코드에 저작권이 있다하니 아래 Lazy Foo를 이용합니다.
https://lazyfoo.net/tutorials/SDL/01_hello_SDL/index2.php
다운받은 소스코드 자체는 헤더파일과 라이브러리만 잘 연결시키면 바로 컴파일 할 수 있습니다.
cmd(명령프롬프트)를 열고 소스파일이 있는 곳으로 갑니다. 아래의 명령어를 입력합니다.
g++ 01_hello_SDL.cpp -IC:\mingw_dev_lib\include\SDL2 -LC:\mingw_dev_lib\lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2 -o program_test
성공하면 아무 표시가 없을 겁니다.
program_test.exe를 실행시킵니다. 여기서 잠깐! 그냥 실행시키면 SDL2.dll 파일이 없다고 나옵니다. 여러 방법이 있지만 속편하게 SDL2.dll 파일을 다운받은 SDL 폴더 [ C:\mingw_dev_lib\bin ] 에서 실행파일이 있는 곳으로 복사해줍니다. 그리고 program_test.exe 를 실행시킵니다.
이 과정이 매번 귀찮으면 배치파일을 사용해도 됩니다. 아래와 같이 메모장에 작성한 뒤 저장을 *.bat 확장자로 합니다.
아래 에서 g++ 다음의 cpp (C++소스파일)만 바꿔주면 됩니다.
@echo off
g++ 03_event_driven_programming.cpp -IC:\mingw_dev_lib\include\SDL2 -LC:\mingw_dev_lib\lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2 -o program_test
echo.
echo ==============================
echo Starting SDL Program...
echo ==============================
program_test.exe
echo.
echo *------ task completed -------*
배치파일을 사용하면 매번 헷갈리지 않아서 좋습니다.
물론 VSC나 다른 IDE 에서 실행 관련 설정을 할 수도 있습니다만, 가끔 이렇게 커맨드 라인을 써보는 것도 좋습니다.
이제 SDL 프로그래밍을 시작할 수 있습니다!
튜토리얼 사이트들입니다.
튜토리얼 레이지 푸
우분투 커뮤니티 위키
SDL 홈페이지
위키 튜토리얼