-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSDLTest.cpp
More file actions
97 lines (86 loc) · 2.61 KB
/
SDLTest.cpp
File metadata and controls
97 lines (86 loc) · 2.61 KB
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//
// Created by Joe Bekor on 2024. 01. 11..
//
#include "SDLTest.h"
#include <iostream>
#include <SDL_image.h>
SDLTest::~SDLTest()
{
if(renderer) SDL_DestroyRenderer(renderer);
if(window) SDL_DestroyWindow(window);
IMG_Quit();
SDL_Quit();
}
bool SDLTest::init()
{
if (SDL_Init(SDL_INIT_VIDEO) != 0){
std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
return false;
}
if(!createWindow()) return false;
if(!createRenderer()) return false;
if(!initSDLImage()) return false;
return true;
}
Texture SDLTest::loadTexture(const std::string& filename)
{
SDL_Texture* imgTexture = IMG_LoadTexture_RW(renderer,
SDL_RWFromFile(filename.c_str(), "rb"),
1);
if(nullptr == imgTexture){
printf( "File not found: %s SDL_image Error: %s\n", filename.c_str(), IMG_GetError() );
}
return Texture(imgTexture);
}
// you won't need this load function because SDL_Image is much more advanced
Texture SDLTest::loadBMP(const std::string& filename)
{
// first load an SDL_Surface
SDL_Surface *bmp = SDL_LoadBMP(filename.c_str());
if (bmp == nullptr){
std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl;
return nullptr;
}
// and convert it to SDL_Texture because it's a hardware accelerated type and SDL_Surface is not
SDL_Texture *tex = SDL_CreateTextureFromSurface(renderer, bmp);
SDL_FreeSurface(bmp);
if (tex == nullptr){
std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl;
}
return Texture(tex);
}
void SDLTest::getWindowSize(int& width, int& height)
{
SDL_GetWindowSize(window, &width, &height);
}
bool SDLTest::createWindow()
{
// check out the meaning of the parameters!
window = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
if (window == nullptr){
std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
return false;
}
return true;
}
bool SDLTest::createRenderer()
{
if(!window) return false;
// when you have the window you need a renderer
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (renderer == nullptr){
std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
return false;
}
return true;
}
bool SDLTest::initSDLImage()
{
// SDL_Image also needs some initialization, don't forget about it
int imgFlags = IMG_INIT_PNG;
if(!(IMG_Init(imgFlags) & imgFlags)) {
printf( "SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError() );
return false;
}
return true;
}