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 = { 400, 0, 400, 300 }; 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, 800, 600, SDL_WINDOW_SHOWN); Rend = SDL_CreateRenderer(Wnd, -1, SDL_RENDERER_ACCELERATED); } void PreRender() { SDL_SetRenderDrawColor(Rend, 0, 0, 0, 0); SDL_RenderClear(Rend); } void Render() { SDL_SetRenderDrawColor(Rend, 0, 255, 255, 255); SDL_RenderDrawLine(Rend, 0, 0, 800, 600); SDL_RenderPresent(Rend); SDL_Delay(1 SEC); SDL_SetRenderDrawColor(Rend, 255, 0, 0, 255); 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 |