Estou aprendendo SDL 2.0 no momento e já vi esse método para carregar BMPs:
SDL_Texture* LoadImage(std::string file)
{
SDL_Surface *loadedImage = nullptr;
SDL_Texture *texture = nullptr;
loadedImage = SDL_LoadBMP(file.c_str());
if (loadedImage != nullptr)
{
texture = SDL_CreateTextureFromSurface(renderer, loadedImage);
SDL_FreeSurface(loadedImage);
}
else
std::cout << SDL_GetError() << std::endl;
return texture;
}
Como eu poderia alternar para carregar arquivos PNG?
Edição: Woops, esqueci de adicionar o meu método de carregamento PNGs.
SDL_Texture* grass_image = nullptr;
grass_image = IMG_LoadTexture(renderer, "res/grass.bmp");
SDL_Rect grass_rect;
grass_rect.x = 0;
grass_rect.y = 0;
grass_rect.w = SCREEN_WIDTH;
grass_rect.h = SCREEN_HEIGHT;
if (grass_image == NULL)
std::cout << "Couldn't load grass_image" << std::endl;
while (!quit && mainEvent -> type != SDL_Quit)
{
SDL_RenderCopy(renderer, grass_image, NULL, &grass_rect);
}
Eu só não quero ter que fazer isso para cada imagem. Então, como eu poderia colocar isso em uma função?
Obrigado!
Respostas:
Você deve usar a API SDL_Image, ela possui uma função simples que carrega tudo:
Mais precisamente, ele carrega os formatos de miniatura ICO (Ícone) / CUR (Cursor) / BMP, PNM (PPM / PGM / PBM), XPM, LBM (IFF ILBM), PCX, GIF, JPEG, PNG, TMP, TIFF e XV .
Ele também possui funções de formato individual, como
IMG_isPNG
eIMG_LoadPNG_RW
.Essa biblioteca é uma das mais usadas para carregar arquivos de imagem com SDL, eu acho.
Site e documentação
fonte
Para carregar arquivos PNG com SDL, é necessário ter a extensão da biblioteca SDL_Image.
http://www.libsdl.org/projects/SDL_image
Uma descrição desta extensão da biblioteca:
"SDL_image é uma biblioteca de carregamento de arquivos de imagem. Carrega imagens como superfícies SDL e suporta os seguintes formatos: BMP, GIF, JPEG, LBM, PCX, PNG, PNM, TGA, TIFF, WEBP, XCF, XPM, XV."
fonte
SDL 2 SDL_image exemplo mínimo de executável
main.c
GitHub upstream .
Compile e execute:
Resultado:
Testado no Ubuntu 16.04, GCC 6.4.0, SDL 2.0.4, SDL Image 2.0.1.
fonte
IMG_LoadTexture()
.