-
Notifications
You must be signed in to change notification settings - Fork 1
/
Texture.cpp
110 lines (94 loc) · 2.34 KB
/
Texture.cpp
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
98
99
100
101
102
103
104
105
106
107
108
109
110
#include "Texture.h"
SDL_Renderer* Texture::mRenderer = NULL;
Texture::Texture(){
//Initialize data
initData();
}
void Texture::load(string path){
//Free old texture
SDL_DestroyTexture(mTexture);
mTexture = NULL;
//Create blank texture
SDL_Texture* board;
//Load image to surface
SDL_Surface* loaded = IMG_Load(path.c_str());
//Integrity check
if(loaded==NULL){
cerr << "Image error: " << IMG_GetError() << endl;
} else {
//Create texture from loaded surface
board = SDL_CreateTextureFromSurface(mRenderer, loaded);
//Integrity check
if(board==NULL) {
cerr << "Texture error: " << SDL_GetError() << endl;
} else {
//Assign loaded texture as class texture
mTexture = board;
//Set texture dimensions
mWidth = loaded->w;
mHeight = loaded->h;
}
//Release surface data
SDL_FreeSurface(loaded);
}
}
//Text loading method
void Texture::textLoad(string s, TTF_Font* f, SDL_Color c){
//Load text into surface
SDL_Surface* loaded = TTF_RenderText_Solid(f, s.c_str(), c);
//Integrity check
if(loaded==NULL) {
cerr << "TTF error: " << TTF_GetError() << endl;
} else {
//Create texture from surface
mTexture = SDL_CreateTextureFromSurface(mRenderer, loaded);
//Integrity check
if(mTexture==NULL) {
cerr << "Texture error: " << SDL_GetError() << endl;
} else {
//Get text dimensions
mWidth = loaded->w;
mHeight = loaded->h;
}
//Release surface data
SDL_FreeSurface(loaded);
}
}
void Texture::setColor(Uint8 r, Uint8 g, Uint8 b){
SDL_SetTextureColorMod(mTexture, r, g, b);
}
void Texture::setAlpha(Uint8 a){
SDL_SetTextureAlphaMod(mTexture, a);
}
void Texture::setBlendMode(SDL_BlendMode b){
SDL_SetTextureBlendMode(mTexture, b);
}
void Texture::render(int x, int y, double s, SDL_Rect * clip, double a, SDL_Point * c, SDL_RendererFlip f){
//Set drawing size
SDL_Rect renderQuad = {x, y, (int)(mWidth*s), (int)(mHeight*s)};
//Assign rendering size
if(clip!=NULL){
renderQuad.w = clip->w*s;
renderQuad.h = clip->h*s;
}
//Render image
SDL_RenderCopyEx(mRenderer, mTexture, clip, &renderQuad, a, c, f);
}
int Texture::getWidth() const {
return mWidth;
}
int Texture::getHeight() const {
return mHeight;
}
void Texture::free(){
//Release texture data
SDL_DestroyTexture(mTexture);
}
void Texture::initData(){
mTexture = NULL;
mWidth = 0;
mHeight = 0;
}
Texture::~Texture(){
free();
}