프로그래밍 관련/3D,2D DRAW 관련

SDL 개발환경 셋팅 관련

AlrepondTech 2017. 5. 10. 03:12
반응형

 

 

 

 

 

=======================

=======================

=======================

 

 

 

 

 

 

SDL 다운로드 링크: https://www.libsdl.org/

 

 

 

 

=======================

=======================

=======================

 

 

출처: http://tibyte.kr/231

 

 

VS2013에서 SDL2와 SDL_Image, openGL을 사용하기 위해

개발환경을 설정하는 단계를 포스팅해봅니다.

 

 

 

1 .SDL 홈페이지(https://www.libsdl.org)에서 SDL2 다운로드 페이지로 들어간다.

2. Windows용Development Libraries zip 파일을 다운받아서 압축을 푼다

3. 비주얼스튜디오를 열고 win32 콘솔 프로그램 프로젝트를 만든다.

4. 프로젝트 속성 창을 열고 Configuration Properties의 VC++ Directories로 들어간다.

 

 

 

5. Include Directories 항목에는 SDL2의 헤더파일(.h)이 있는 폴더를 지정하고, 

   Library Directories 항목에는 SDL2의 lib파일이 있는 폴더를 지정한다.

  여기서 32비트와 64비트가 있는데 32비트로 진행하였다.

 

 

 

6. 이제 링커 설정에서 라이브러리 의존성을 지정해야 한다.

  5번과 같은 속성창에서 Linker - Input - Additional Dependencies에

라이브러리 파일의 이름을 추가해도 되지만 여기서는 소스코드에 직접 넣었다.

1
2
3
4
5
6
7
8
9
#pragma comment (lib,"SDL2")
#pragma comment (lib,"SDL2main")
 
#include <SDL.h>
cs

소스코드의 윗부분에 #pragma comment로 lib파일을 쓰면 된다.

SDL2.lib과 SDL2main.lib을 추가한다.

 

 

경우에 따라 라이브러리파일의 이름이 SDL2.lib이 아니라 SDL.lib일 수도 있으니 주의.

 

 

 

 

7. 이제 SDL의 이미지파일 처리 등을 도와주는 SDL_Image 라이브러리를 설치한다.

 https://www.libsdl.org/projects/SDL_image/에서

2번과 같이 Development Libraries zip파일을 받는다.

5번에서처럼 Include Directories와 Library Directories를 각각 추가한다.

*다른 SDL 관련 추가 라이브러리도 이와 같은 방법으로 추가하면 된다.

 

 

 

 

8. 사용할 라이브러리와 헤더파일들을 소스코드에 명시한다.

opengl함수들을 직접 사용하기 위해서는 opengl32.lib 파일을 링크해야 한다.

1
2
3
4
5
6
7
8
9
#pragma comment (lib,"SDL2")
#pragma comment (lib,"SDL2main")
#pragma comment (lib,"SDL2_image")
#pragma comment (lib,"opengl32.lib")
 
 
#include <SDL.h>
#include <SDL_opengl.h>
#include <SDL_image.h>
cs

 

 

 

※ 실행시 SDL.dll을 찾을 수 없다는 오류가 난다면

다운받은 라이브러리 폴더에 있는 SDL2.dll과 SDL2_image.dll을 복사하여

프로젝트 폴더 내의 Debug 혹은 Release폴더에 넣는다.

 

 

 

아래는 간단하게 작성해본 테스트용 코드..

프로젝트 디렉토리에 res 라는 폴더가 있고

그 폴더에 있는 img.png 파일(512x512)을 로드하여 화면에 표시한다.

 

(SDL의 함수들만 사용해도 이미지를 띄울 수 있지만

opengl함수들을 사용해보기 위해 아래와 같이 작성하였습니다.)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#pragma comment (lib,"SDL2")
#pragma comment (lib,"SDL2main")
#pragma comment (lib,"SDL2_image")
#pragma comment (lib,"opengl32.lib")
 
#include <cstdio>
#include <SDL.h>
#include <SDL_opengl.h>
#include <SDL_image.h>
 
using namespace std;
 
int main(int argc, char **argv){
 
    SDL_Window *win = NULL;
    SDL_Surface *image;
    SDL_RWops *rwop;
    rwop = SDL_RWFromFile("../res/img.png""rb");
    image = IMG_LoadPNG_RW(rwop);
    GLubyte *map = (GLubyte*)image->pixels;
 
    //Initialize SDL.
    if (SDL_Init(SDL_INIT_VIDEO) < 0)
        return 1;
 
    //Create the window
    win = SDL_CreateWindow("SDL_GL"100100400300, SDL_WINDOW_OPENGL);
 
    SDL_GLContext context;
    context = SDL_GL_CreateContext(win);
 
    glEnable(GL_TEXTURE_2D);
    GLuint texId;
    glGenTextures(1, &texId);
    glBindTexture(GL_TEXTURE_2D, texId);
    glTexImage2D(
        GL_TEXTURE_2D, 0, GL_RGBA,
        5125120,
        GL_RGBA, GL_UNSIGNED_BYTE,
        map
    );
    
    // Texture filter
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
 
    // main loop
    while (1) {
 
        //event handling
        SDL_Event e;
        if (SDL_PollEvent(&e)) {
            if (e.type == SDL_QUIT)
                break;
        }
 
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
        glBindTexture(GL_TEXTURE_2D, texId);
        glBegin(GL_QUADS);
        glTexCoord2f(0.00.0); glVertex2f(-0.71.0);
        glTexCoord2f(1.00.0); glVertex2f(0.71.0);
        glTexCoord2f(1.01.0); glVertex2f(0.7-1.0);
        glTexCoord2f(0.01.0); glVertex2f(-0.7-1.0);
        glEnd();
 
        SDL_GL_SwapWindow(win);
        SDL_Delay(16);
 
    }
 
    SDL_GL_DeleteContext(context);
    SDL_DestroyWindow(win);
SDL_Quit();
    return 0;
 
}
 
 
cs

 

 

 

실행결과

 

 

 

 

 

 

 

 

자세한 코드 내용은 다음 포스트에 계속돱니다

http://tibyte.kr/232

 



출처: http://tibyte.kr/231 [티바이트]

 

 

 

=======================

=======================

=======================

 

 

 

출처: http://cecilcode.blogspot.kr/2014/07/sdl.html

 

02. SDL 설정

 
원문링크 : Setting up SDL 2 on Visual Studio 2010 Ultimate

SDL을 비주얼 스튜디오가 인식하게 설정한다.
개발환경은 Windows, Microsoft Visual Studio 2013 기준으로 한다.

 

위 그림처럼 SDL2-devel-2.0.3-VC.zip를 클릭해 SDL을 받은뒤 원하는 위치에 압축을 푼다.
(저는 C:\sdl2라고 폴더를 만들었습니다.)
 
비주얼 스튜디오를 시작하고 빈 프로젝트를 만든다.

 

 
솔루션 탐색기에서 프로젝트를 우클릭 한 다음 속성을 선택한다.

 


 
 
 
▷구성속성 -> VC++디렉터리 탭에서 포함 디렉터리를 선택하고 오른쪽에 나오는 화살표를 누른뒤 <편집..>을 누른다.

 

 
 
아래 그림처럼 1번을 누른뒤 2번을 누르고 좀 전에 압축을 푼 SDL폴더 아래 include폴더를 선택한다.

 

 
다음과 같이 추가됨을 확인 할 수 있다.

 

이제 비주얼 스튜디오는 SDL헤더 파일이 어딨는지 알게 되었다.
SDL.h를 찾을 수 없습니다라는 에러가 뜨면 이 과정을 생략한 것이다.
 
다음은 라이브러리 파일이 어딨는지 알려줄 차례다.
위와 마찬가지로 속성 창을 열고 이번에는 라이브러리 디렉터리를 편집한다.

 

 
lib\x86폴더를 선택한다.

 

 
※중요 : 대부분의 컴파일러는 여전히 기본 최대 사이즈를 32bit 바이너리로 컴파일합니다. 우리는 32bit를 이용하여 듀토리얼을 합니다. 32bit라이브러리를 이용하여 컴파일 하기 때문에 64bit 운영체제를 사용하던 말던 상관없습니다. 즉, x86폴더를 선택하고 확인 버튼을 누르기만 하면 됩니다.
 
이제 비주얼 스튜디오는 라이브러리 파일이 어딨는지 안다. 만약 SDL2.lib 링커 에러가 난다면 이 과정을 생략했기 때문이다.
 
▷구성속성 ▷링커 ->입력 탭을 선택하고 추가 종속성을 편집하여 라이브러리를 링크한다.

 

 
다음을 복사하여 붙여넣는다. 레리 테슬러 만세!
SDL2.lib
SDL2main.lib

 

컴파일 후에 참조되지 않은 변수입니다라는 에러가 뜨면 이 과정을 생략한 것이다.
 
하위시스템을 창으로 설정한다.

 

처음 만들 때 Win32프로젝트로 했으면 되었을 것을 왜 여기서 하는지는 모르겠습니다.
 
SDL2 프로그램이 돌아갈 때, 운영체제는 dll 파일을 찾을 수 있어야 한다.
sdl2 폴더로 들어가 SDL2.dll파일을 복사한 뒤 현재 작업하고 있는 디렉토리(vcxproj 파일이 있는 곳)나 시스템 디렉토리(C:\WINDOWS\SYSTEM32)에 붙여넣기한다.
(만약 되지 않는다면 C:\Windows\SysWOW64에 넣어보세요. 64bit일 경우입니다.)
 
이제 lesson 01을 다운로드 한 뒤 프로젝트에 삽입한다.
컴파일 후 아무 문제가 없으면 다음 듀토리얼로 진행할 시간이다.

 

 

 

 

=======================

=======================

=======================

 

 

 

반응형

 

728x90

 

 

 

출처: http://codinglove.tistory.com/49

 

 

1. SDL 라이브러리 구하기

 

 

SDL 공식 홈페이지에 가면 SDL 라이브러리를 구할 수 있습니다.

 

https://www.libsdl.org/index.php 일단 여기로 들어가시면 위 사진과 같은 화면 좌측 하단에 보이는

 

Download 항목의 SDL 2.0 을 클릭합니다.

 

 

 

 

 

 

우리는 SDL을 사용해서 개발을 할 것이기 때문에, 저희에게 필요한건 SDK 혹은 Development Library 입니다. 

 

Development Library 의 항목을 보시면 운영체제 별로 나눠져 있는데 

 

Visual Studio 의 경우 Visual C++ 32/ 64-bit 라는 라이브러리를 사용합니다.

 

따라서 SDL2-devel-2.0.3-VC.zip을 클릭하셔서 다운받습니다.

 

 

 

 

 

 

 

 

방금 받은 것은 sdl 의 기본 기능만 들어있는 라이브러리이기 때문에 그림을 그리거나 음악을 재생하실려면

 

추가적으로 SDL_image 와 SDL_mixer 라는 라이브러리를 다운받으셔야 합니다.

 

https://www.libsdl.org/projects/ 에 들어가시면 받으실 수 있습니다. 

 

 

=============

 

 

===========

 

============

 

 

 

 

 

모두 다운받으셨으면 영어이름의 적당한 새 폴더를 만들고  (저 같은 경우는 sdl_visual c++ 라는 이름의 폴더를 만듬)

 

폴더 안에 다운 받은 녀석들을 모두 넣어줍니다.

 

(꼭 영문 이름으로 만드셔야 합니다...  한글 경로는 visual studio 2013 이 인식 못할 수도 있음...)

 

 

 

 

 

 

 

그리고 그 안에 압축을 모두 풀어줍니다.

 

 

 

 

 

 

 

이제  준비된 sdl_visual c++ 폴더를  

 

C 드라이브나 D드라이브든 원하시는 찾기 편한 곳에 둡니다.


그럼 이제 sdl 라이브러리를 사용할 준비가 되었으니  Visual Studio 2013을 실행시킵니다.

 

 

 

 

 

 

 

SDL을 사용해볼 새로운 프로젝트를 하나 만들어 봅시다.

 

메뉴의   파일-> 새 프로젝트 를 선택합니다.

 

 

 

 

 

 

그 뒤, 프로젝트의 종류에서   "빈 프로젝트" 를 선택하시고  만드시는 프로젝트의 이름을 

 

적절히 정한 뒤 "확인" 버튼을 누룹니다.   (저는 SDL2_tutorial 이라고 지었습니다.)

 

 

 

 

 

 

이제 프로젝트가 만들어 졌으니 소스 파일을 하나 만듭시다. 

 

솔루션 탐색기에서 자신이 만든 프로젝트의

 

"소스파일"에 마우스 오른쪽 버튼을 누르시고    "추가" -> "새 항목" 을 누룹니다.

 

 

 

 

 

 

그리고 추가할 소스파일의 종류를 "C++ 파일"로 선택하시고 

 

추가할 파일의 이름을 설정하고 "추가" 버튼을 누룹니다   (저는 main.cpp 라고 이름을 정했습니다.)

 

 

 

 

 

 

이제 다시 솔루션 탐색기에서  자신이 만든 프로젝트에 오른쪽 마우스를 클릭하시고 

 

속성을 누룹니다.

 

 

 

 

 

 

그러면 위와 같은  속성 페이지라는 대화상자가 나오는데 

 

 

 

 

 

 

 

속성 페이지에서 

 

구성 속성 -> C/C++ -> 일반-> 추가 포함 디렉터리의 ▼ 버튼 클릭 -> "<편집...>"을 클릭합니다.

 

 

 

 

 

 

 

그러면 위와 같은 대화상자가 나오는데 일단 저  폴더 모양 아이콘을 클릭하시면 

 

무언가를 입력할 수 있는 줄이 나오는데

 

여기서 이제 우리가 사용할 라이브러리의 include 폴더가 어느 폴더에 있는지 적어줘야 합니다.

 

아직 아무것도 입력하지 마시고...

 

 

 

 

 

 

우리가 전에 압축을 풀어놓은 3개의 라이브러리 폴더가 있을 겁니다.

 

이중 

 

SDL2-2.0.3 폴더에서 include 폴더에 들어갑니다. 

 

 

 

 

 

 

그러면 위와 같이 헤더파일이 무수히 많을 텐데 위 사진의  붉은 부분으로 친 주소부분을  Ctrl + C  복사하시고

(참고로 제 스샷의 경로를 동일하게 입력하시면 안됩니다... 여러분은 여러분이 놓은 파일의 위치가 저와는 다를테니 말이죠
여러분이 놓은 파일 위치 주소를 고대로 복사하시면 됩니다!!)
 

 

 

 

 

 

 

 

그리고 이 주소를 방금전의 이곳에다  Ctrl + V 붙여넣기 하십니다....

 

그러면 경로가 등록이 됩니다...

 

 

 

 

이러한 식으로  아까 전에 우리가 만든  sdl_visual c++ 폴더에 있는 나머지 

 

SDL_image-2.0.0 폴더의 include 폴더 

 

SDL_mixer-2.0.0 폴더의 include 폴더

 

두 폴더의 경로도 추가해 줍니다.   그리고 확인을 누룹니다.

 

자 이제 마지막으로 라이브러리 경로를 등록해 줘야합니다.

 

 

 

 

 

속성 페이지에서 

 

링커 -> 일반 -> 추가 라이브러리 디렉터리의 ▼ 버튼 클릭 -> "편집..." 을 클릭합니다.

 

 

 

 

 

아까와 같이 경로를 복사 붙여넣기 해주면 된다 이번에는 

 

 

 

 

 

 

SDL2-2.0.3 폴더의-> lib-> x86 폴더 

 

SDL2_image-2.0.0 

폴더의-> lib -> x86 폴더 

 

SDL2_mixer-2.0.0  

폴더의-> lib -> x86 폴더 

 

위 3개 폴더의 경로를 등록해 주면 됩니다.

 

(참고로 x64 와 x86 폴더 2개가 있을텐데  x64는 64비트용 라이브러리입니다. 

  우리는 32 비트용으로 개발 할 것이기에 x86을 선택했습니다.)

 

 

자 여기까지의 작업은 우리가 사용할 SDL 이란 라이브러리가 어느 폴더에 있는지 
경로를 컴파일러에게 알려주는 과정이였고 이제 위치 등록이 끝났으니 
마지막으로 이제 우리가 사용할 SDL 라이브러리를 컴파일러에게 등록하면 됩니다.

 

 

 

 


속성페이지에서 
링커 -> 입력 -> 추가 종속성의 ▼ 버튼 클릭 -> "편집..."을 클릭합니다.

 

 

 


이곳에 우리가 사용할 라이브러리의 이름들을 적어 줍니다.
SDL2.libSDL2main.libSDL2_image.libSDL2_mixer.lib 
등을 적어주고 확인을 누르고 

 

 

 


링커 -> 시스템 -> 하위 시스템의 ▼ 버튼을 누르고 -> "콘솔"을 선택합니다.

 

 

 


마지막으로 속성페이지에서 
적용을 누르고 확인을 눌러주면 셋팅이 끝났습니다.


 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <SDL.h>
#include <stdio.h>
 
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
 
int main(int argc, char *args[])
{
    SDL_Window* window = NULL;
 
    SDL_Surface* screenSurface = NULL;
 
    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        printf("SDL could not initialize! SDL_Error: %s\n",SDL_GetError());
    }else
    {
        window = SDL_CreateWindow("SDL Tutorial",
                                SDL_WINDOWPOS_UNDEFINED,
                                SDL_WINDOWPOS_UNDEFINED,
                                SCREEN_WIDTH,
                                SCREEN_HEIGHT,
                                SDL_WINDOW_SHOWN);
        if(window == NULL)
        {
            printf("Window could not be created! SDL_Error: %s \n",SDL_GetError());
        }else
        {
            screenSurface = SDL_GetWindowSurface(window);
 
            SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format,0xFF,0xFF,0xFF));
 
            SDL_UpdateWindowSurface( window );
 
            SDL_Delay( 2000);
        }
    }
 
    SDL_DestroyWindow( window);
 
    SDL_Quit();
 
    return 0;
}

 

 

이제 준비가 다 되었으니  위의 소스코드를 똑같이 적고 

 

빌드를 해고 실행을 해 봅시다.  (빌드  ctrl + f5  )

 

그러면 

 

 

 

 

 

빌드는 성공했지만 프로그램을 실행하려고 하면 위와 같은 오류가 뜨는데 이것은 

 

 

 

 

 

SDL2-2.0.3 폴더에서 -> lib -> x86 폴더 안에  

 

"SDL2.dll" 이란  파일이 있는데 이것을 복사한 뒤 (Ctrl + C)

 

 

 

 

지금 여러분이 만드신 프로젝트 폴더의 Debug 폴더 안에 "SDL2.dll" 파일을 넣어주면 

 

이제 잘 실행 될껍니다.

 

 

 

 

실행결과는 위 영상 처럼 그냥 

 

흰색 윈도우창이 약 2초간 아무 일도 없이 가만히 있다가 꺼지는 

 

심심한 프로그램입니다...

 

 

아직 위의 코드는 몰라도 됩니다..

 

앞으로 하나 하나 자세히 알아봅시다.  

 

오늘은 여기까지!

 



출처: http://codinglove.tistory.com/49 [나만의 게임 만들기]

 

 

=======================

=======================

=======================

 

 

반응형