mirror of
https://github.com/Relintai/rcpp_framework.git
synced 2024-11-14 04:57:21 +01:00
166 lines
2.8 KiB
C++
166 lines
2.8 KiB
C++
|
#include "texture.h"
|
||
|
|
||
|
#include "renderer.h"
|
||
|
|
||
|
Color Texture::get_color_mod() const {
|
||
|
Uint8 r;
|
||
|
Uint8 g;
|
||
|
Uint8 b;
|
||
|
Uint8 a;
|
||
|
|
||
|
SDL_GetTextureColorMod(_texture, &r, &g, &b);
|
||
|
SDL_GetTextureAlphaMod(_texture, &a);
|
||
|
|
||
|
return Color(r, g, b, a);
|
||
|
}
|
||
|
void Texture::set_color_mod(const Color &color) {
|
||
|
SDL_SetTextureColorMod(_texture, color.r, color.g, color.b);
|
||
|
SDL_SetTextureAlphaMod(_texture, color.a);
|
||
|
}
|
||
|
|
||
|
SDL_BlendMode Texture::get_blend_mode() const {
|
||
|
SDL_BlendMode blendMode;
|
||
|
|
||
|
SDL_GetTextureBlendMode(_texture, &blendMode);
|
||
|
|
||
|
return blendMode;
|
||
|
}
|
||
|
void Texture::set_blend_mode(const SDL_BlendMode blend_mode) {
|
||
|
SDL_SetTextureBlendMode(_texture, blend_mode);
|
||
|
}
|
||
|
|
||
|
SDL_ScaleMode Texture::get_texture_scale_mode() const {
|
||
|
SDL_ScaleMode scale_mode;
|
||
|
|
||
|
SDL_GetTextureScaleMode(_texture, &scale_mode);
|
||
|
|
||
|
return scale_mode;
|
||
|
}
|
||
|
void Texture::set_texture_scale_mode(const SDL_ScaleMode scale_mode) {
|
||
|
SDL_SetTextureScaleMode(_texture, scale_mode);
|
||
|
}
|
||
|
|
||
|
Image *Texture::get_image() {
|
||
|
return _image;
|
||
|
}
|
||
|
void Texture::set_image(Image *image) {
|
||
|
if (_texture) {
|
||
|
free();
|
||
|
}
|
||
|
|
||
|
_image = image;
|
||
|
|
||
|
refresh();
|
||
|
}
|
||
|
|
||
|
int Texture::get_width() const {
|
||
|
Uint32 format;
|
||
|
int access;
|
||
|
int w;
|
||
|
int h;
|
||
|
|
||
|
if (SDL_QueryTexture(_texture, &format, &access, &w, &h)) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return w;
|
||
|
}
|
||
|
int Texture::get_height() const {
|
||
|
Uint32 format;
|
||
|
int access;
|
||
|
int w;
|
||
|
int h;
|
||
|
|
||
|
if (SDL_QueryTexture(_texture, &format, &access, &w, &h)) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return h;
|
||
|
}
|
||
|
Uint32 Texture::get_format() const {
|
||
|
Uint32 format;
|
||
|
int access;
|
||
|
int w;
|
||
|
int h;
|
||
|
|
||
|
if (SDL_QueryTexture(_texture, &format, &access, &w, &h)) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return format;
|
||
|
}
|
||
|
int Texture::get_access() const {
|
||
|
Uint32 format;
|
||
|
int access;
|
||
|
int w;
|
||
|
int h;
|
||
|
|
||
|
if (SDL_QueryTexture(_texture, &format, &access, &w, &h)) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return access;
|
||
|
}
|
||
|
|
||
|
void Texture::create(int access, int w, int h) {
|
||
|
if (_texture) {
|
||
|
free();
|
||
|
}
|
||
|
|
||
|
_image = nullptr;
|
||
|
|
||
|
_texture = SDL_CreateTexture(Renderer::get_singleton()->get_renderer(), SDL_PIXELFORMAT_RGBA8888, access, w, h);
|
||
|
}
|
||
|
void Texture::refresh() {
|
||
|
if (_image == nullptr) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (_image->get_surface() == nullptr) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (_texture) {
|
||
|
free();
|
||
|
}
|
||
|
|
||
|
_texture = SDL_CreateTextureFromSurface(Renderer::get_singleton()->get_renderer(), _image->get_surface());
|
||
|
}
|
||
|
void Texture::free() {
|
||
|
if (_texture) {
|
||
|
SDL_DestroyTexture(_texture);
|
||
|
|
||
|
_texture = nullptr;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
SDL_Texture *Texture::get_texture() {
|
||
|
return _texture;
|
||
|
}
|
||
|
SDL_Texture *Texture::get_texture() const {
|
||
|
return _texture;
|
||
|
}
|
||
|
|
||
|
bool Texture::is_render_target() {
|
||
|
if (_texture == Renderer::get_singleton()->get_render_target()) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
Texture::Texture() {
|
||
|
_image = nullptr;
|
||
|
_texture = nullptr;
|
||
|
}
|
||
|
Texture::Texture(Image *image) {
|
||
|
_image = nullptr;
|
||
|
_texture = nullptr;
|
||
|
|
||
|
set_image(image);
|
||
|
}
|
||
|
Texture::~Texture() {
|
||
|
if (_texture) {
|
||
|
free();
|
||
|
}
|
||
|
}
|