[SDL] 선/사각형 그리기

Programming/SDL 2.0

2015. 2. 15. 14:09 - gold5230


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
#include "stdafx.h"
#define SEC * 1000
 
SDL_Window* Wnd = nullptr;
SDL_Renderer* Rend = nullptr;
SDL_Rect Rect = { 4000400300 };
 
void Init();
void PreRender();
void Render();
void PostRender();
void Release();
 
int _tmain(int argc, _TCHAR* argv[])
{
    Init();
    bool bIsRunning = true;
 
    while (bIsRunning)
    {
        PreRender();
        Render();
        //PostRender();
    }
 
    Release();
    return 0;
}
 
void Init()
{
    SDL_Init(SDL_INIT_EVERYTHING);
    Wnd = SDL_CreateWindow("SDL Program", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
        800600, SDL_WINDOW_SHOWN);
    Rend = SDL_CreateRenderer(Wnd, -1, SDL_RENDERER_ACCELERATED);
}
 
void PreRender()
{
    SDL_SetRenderDrawColor(Rend, 0000);
    SDL_RenderClear(Rend);
}
 
void Render()
{
    SDL_SetRenderDrawColor(Rend, 0255255255);
    SDL_RenderDrawLine(Rend, 00800600);
    
    SDL_RenderPresent(Rend);
    SDL_Delay(1 SEC);
 
    SDL_SetRenderDrawColor(Rend, 25500255);
    SDL_RenderFillRect(Rend, &Rect);
 
    SDL_RenderPresent(Rend);
    SDL_Delay(1 SEC);
}
 
void PostRender()
{
    SDL_RenderPresent(Rend);
}
 
void Release()
{
    SDL_DestroyRenderer(Rend);
    SDL_DestroyWindow(Wnd);
    SDL_Quit();
}
cs


각각의 작업들을 분리해서, 함수 단위로 만들었다.

그 대신 Wnd와 Rend는 전역변수가 되었다.

그리고 bool형 IsRunning을 만들어서 While문 안에 그리기 코드를 집어넣었다.


PreRender 함수는 매 프레임(이렇게 표현해도 될지는 모르겠지만) 마다 화면을 지워준다.

SetRenderDrawColor 함수가 그리는 색을 지정하고(현재 검은색, 흰색도 된다.), RenderClear로 화면을 지운다.


Render 함수가 본격적으로 그리는 역할을 한다.

SetRenderDrawColor로 그릴 색을 지정해서 그린다.

SDL_RenderDrawLine은 Renderer 주소와 선의 시작점/끝점을 매개변수로 취한다.

SDL_RenderFillRect는 마찬가지로 Renderer 주소와, SDL_Rect형의 주소를 받는다, 

그래서 SDL_Rect형으로 선언된 Rect의 주소값을 넘겨 줬다.


PostRender 함수는 Rend에 그려진 것들을 출력하는 역할을 맡는다.(RenderPresent)

그런데 이런 구조로는 시간차로 그리기가 조금 곤란해서, 정의만 해놓고 사용은 안했다.


#define SEC * 1000은 그냥 시험삼아 해본건데, 잘 되더라.

SDL_Rect는 구조체인데, x, y, w, h 순으로 초기화된다. x와 y는 사각형의 좌상단 좌표.

즉 (400, 0)에서 시작해서 너비 400, 높이 300의 사각형이다.


이 코드의 결과로 1초 간격으로 붉은색 사각형이 화면의 우상단에서 깜빡거린다.

색을 바꿔서 그려본다거나, 사각형과 선의 위치를 바꿔봐도 좋을 것 같다.



'Programming > SDL 2.0' 카테고리의 다른 글

[SDL] 이벤트 (1)  (0) 2015.04.25
[SDL] 스프라이트 처리  (0) 2015.04.24
[SDL] 이미지 출력  (0) 2015.02.15
[SDL] 첫 코드 작성  (0) 2015.02.14
개발환경 설정  (0) 2015.02.14