========================  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

 

Sam Lantinga - Wikipedia

Sam Oscar Lantinga is a computer programmer. He used to be the lead software engineer at Blizzard Entertainment, where he was known to the community as Slouken. He is best known as the creator of the Simple DirectMedia Layer, a very popular open source mul

en.wikipedia.org

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 를 사용해서 세팅합니다.

 

SDL Framework Steam dev days

SDL 소개 스팀 데브 데이

 

 

 

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

 

Simple DirectMedia Layer - SDL version 2.0.12 (stable)

SDL version 2.0.12 (stable) Source Code: SDL2-2.0.12.zip - GPG signed SDL2-2.0.12.tar.gz - GPG signed Runtime Binaries: Windows: SDL2-2.0.12-win32-x86.zip (32-bit Windows) SDL2-2.0.12-win32-x64.zip (64-bit Windows) Mac OS X: SDL2-2.0.12.dmg Linux: Please c

libsdl.org

 

비주얼 C++ 파일과 Mac OS 파일도 있네요. 이 포스트에서는 MinGW 개발용 파일을 받습니다. 

 

압축화일을 열어서 보면 아래와 같이 있습니다. 32비트는 아래 파일입니다. 이 파일 안에 있는 내용물들을 적절한 곳에 압축을 풉니다.

 

 

여기서는 C의 mingw_dev_lib에 풀었습니다. 

 

 

실행 테스트

아래의 사이트 아래쪽에 가면 SDL로 창을 띄우는 튜토리얼이 있습니다. 소스코드에 저작권이 있다하니 아래 Lazy Foo를 이용합니다.

 

 

https://lazyfoo.net/tutorials/SDL/01_hello_SDL/index2.php

 

Lazy Foo' Productions - Hello SDL: Your First Graphics Window

Hello SDL: Your First Graphics Window Last Updated 2/8/15 This tutorial covers the first major stepping stone: getting a window to pop up. Now that you have SDL set up, it's time to make a bare bones SDL graphics application that renders a quad on the scre

lazyfoo.net

다운받은 소스코드 자체는 헤더파일과 라이브러리만 잘 연결시키면 바로 컴파일 할 수 있습니다.

 

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 프로그래밍을 시작할 수 있습니다!

 

 

부록 참고 사이트

튜토리얼 사이트들입니다.

 

 튜토리얼 레이지 푸

 

Lazy Foo' Productions - Beginning Game Programming v2.0

Lesson 50 SDL and OpenGL 2 SDL is a powerful tool when combined with OpenGL. If you're just starting out with OpenGL or want to maximize compatibility, you can use SDL with OpenGL 2.1. In this tutorial we will make a minimalist OpenGL 2.1 program.

lazyfoo.net

 우분투 커뮤니티 위키

 

SDL Programming - 깊이있는 삽질 Ubuntu Korea Community Wiki

깊이있는 삽질 Ubuntu Korea Community Wiki 이 문서는 무료 컴파일러 IDE 및 그래픽 라이브러리를 사용하여 2D 게임을 작성하는 방법에 대해 설명합니다. 이 문서에서 다루는 특정 그래픽 도구는 Simple Dir

wiki.ubuntu-kr.org

SDL 홈페이지

 

Simple DirectMedia Layer - Homepage

About SDL Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D. It is used by video playback software, emulators, and popula

libsdl.org

 위키 튜토리얼

 

Tutorials - SDL Wiki'

SDL Tutorials There are a number of SDL tutorials available from different sources. Multi-Subject Setup Android Video OpenGL Haptic Input Text Input Using SDL for text inputs with specific consideration for international users Threads Condition variables i

wiki.libsdl.org

 

 SDL 게임 만들기

 

SDL 게임만들기

 

SDL 게임 만들기

 

공유하기

facebook twitter kakaoTalk kakaostory naver band