Files
coffee_crisis_arcade_edition/source/texture.h
Sergio 28df97ea94 Pasaeta de "include-what-you-use" per arreglar els includes
Renombrats alguns fitxers per consistencia
2024-09-29 06:24:11 +02:00

104 lines
3.1 KiB
C++

#pragma once
#include <SDL2/SDL_blendmode.h> // for SDL_BlendMode
#include <SDL2/SDL_pixels.h> // for SDL_PIXELFORMAT_RGBA8888, SDL_PixelF...
#include <SDL2/SDL_rect.h> // for SDL_Point, SDL_Rect
#include <SDL2/SDL_render.h> // for SDL_Renderer, SDL_FLIP_NONE, SDL_TEX...
#include <SDL2/SDL_stdinc.h> // for Uint8, Uint32, Uint16
#include <string> // for string, basic_string
#include <vector> // for vector
// Definiciones de tipos
struct surface_s
{
Uint8 *data;
Uint16 w, h;
};
typedef struct surface_s *Surface;
class Texture
{
private:
// Objetos y punteros
SDL_Texture *texture; // La textura
SDL_Renderer *renderer; // Renderizador donde dibujar la textura
Surface surface; // Surface para usar imagenes en formato gif con paleta
// Variables
int width; // Ancho de la imagen
int height; // Alto de la imagen
std::string path; // Ruta de la imagen de la textura
std::vector<std::vector<Uint32>> palettes; // Vector con las diferentes paletas
int paletteIndex; // Indice de la paleta en uso
// Crea una nueva surface
Surface newSurface(int w, int h);
// Elimina una surface
void deleteSurface(Surface surface);
// Crea una surface desde un fichero .gif
Surface loadSurface(const char *filename);
// Vuelca la surface en la textura
void flipSurface();
// Carga una paleta desde un fichero
std::vector<Uint32> loadPal(const char *filename);
public:
// Constructor
Texture(SDL_Renderer *renderer, std::string path = "");
// Destructor
~Texture();
// Carga una imagen desde un fichero
bool loadFromFile(std::string path);
// Crea una textura en blanco
bool createBlank(int width, int height, SDL_PixelFormatEnum format = SDL_PIXELFORMAT_RGBA8888, SDL_TextureAccess = SDL_TEXTUREACCESS_STREAMING);
// Libera la memoria de la textura
void unload();
// Establece el color para la modulacion
void setColor(Uint8 red, Uint8 green, Uint8 blue);
// Establece el blending
void setBlendMode(SDL_BlendMode blending);
// Establece el alpha para la modulación
void setAlpha(Uint8 alpha);
// Renderiza la textura en un punto específico
void render(int x, int y, SDL_Rect *clip = nullptr, float zoomW = 1, float zoomH = 1, double angle = 0.0, SDL_Point *center = nullptr, SDL_RendererFlip flip = SDL_FLIP_NONE);
// Establece la textura como objetivo de renderizado
void setAsRenderTarget(SDL_Renderer *renderer);
// Obtiene el ancho de la imagen
int getWidth();
// Obtiene el alto de la imagen
int getHeight();
// Recarga la textura
bool reLoad();
// Obtiene la textura
SDL_Texture *getSDLTexture();
// Añade una paleta a la lista
void addPalette(std::string path);
// Establece un color de la paleta
void setPaletteColor(int palette, int index, Uint32 color);
// Cambia la paleta de la textura
void setPalette(int palette);
// Obtiene el renderizador
SDL_Renderer *getRenderer();
};