-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTexturaImagem.cpp
89 lines (66 loc) · 2.47 KB
/
TexturaImagem.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
/*
Este arquivo possui a implementação da classe TexturaImagem, que contém os
atributos e métodos necessários para gerenciar as texturas de imagens
usadas no jogo.
Em termos gerais, esta classe é responsável por inicializar e destruir as
texturas usadas. Além de, quando necessário, renderizá-las na tela de jogo.
*/
#include "includes/TexturaImagem.hpp"
// Construtor da classe.
TexturaImagem::TexturaImagem() {
texturaReal = NULL;
comprimento = 0;
altura = 0;
}
// Desaloca memória.
TexturaImagem::~TexturaImagem() {
free();
}
// Desaloca a textura.
void TexturaImagem::free() {
if (texturaReal != NULL) {
SDL_DestroyTexture(texturaReal);
texturaReal = NULL;
comprimento = 0;
altura = 0;
}
}
int TexturaImagem::getComprimento() {
return comprimento;
}
int TexturaImagem::getAltura() {
return altura;
}
// Renderiza as texturas na tela.
void TexturaImagem::renderizar(int eixoX, int eixoY, SDL_Renderer* renderizador) {
SDL_Rect renderQuad = {eixoX, eixoY, comprimento, altura};
SDL_RenderCopy(renderizador, texturaReal, NULL, &renderQuad);
}
// Carrega a imagem contida em "path".
bool TexturaImagem::carregarImagem(std::string path, SDL_Renderer* renderizador) {
// Desaloca qualquer imagem que esteja armazenada no objeto.
free();
SDL_Texture *texturaNova = NULL;
// Criando uma superfície contendo a imagem pedida.
SDL_Surface *superficieCarregada = IMG_Load(path.c_str());
if (superficieCarregada == NULL) {
printf("ERRO: Não foi possível carregar a imagem %s --> %s\n", path.c_str(), IMG_GetError());
} else {
// Apagando pixels transparentes (usado para PNGs).
SDL_SetColorKey(superficieCarregada, SDL_TRUE, SDL_MapRGB(superficieCarregada->format, 0, 0xFF, 0xFF));
// Criando uma textura a partir da superfíce carregada anteriormente.
texturaNova = SDL_CreateTextureFromSurface(renderizador, superficieCarregada);
if (texturaNova == NULL) {
printf("ERRO: Não foi possível criar a textura de %s --> %s\n", path.c_str(), SDL_GetError());
} else {
comprimento = superficieCarregada->w;
altura = superficieCarregada->h;
}
// Desalocando memória da superfície.
SDL_FreeSurface(superficieCarregada);
}
// Armazenando a textura criado no objeto.
texturaReal = texturaNova;
if (texturaReal == NULL) return false;
return true;
}