SDL Image com Texture
Na criação de jogos, as imagens são de extrema importância pois compõem a parte gráfica do nosso joguinho e ajudam ao jogador entender o que acontece na tela com base em suas ações. As vezes carregamos várias imagens simultaneamente para realizar movimentações e afins, já vimos aqui como carregar uma imagem utilizando SDL_Surface, porém existe um outro modo mais otimizado de trabalhar com imagens utilizando SDL_Texture. A SDL_Sruface carrega as imagens através do software acabando por fim utilizando sua memória RAM para regular e armazena-las. SDL_Texture porém, renderiza as imagens através do hardware, armazenando em VRAM (Ram da placa de vídeo) usando, internamente, o OpenGL ou DirectX acelerados portanto pelo GPU.
Portanto a renderização por hardware é mais rápida e deve ser priorizada. principalmente quando falamos de quantidades massivas de conteúdo ocupando sua RAM.
Vamos ao tutorial!
Primeiro devemos incluir a biblioteca "SDL2/SDL_image.h" e no main inicializa o vídeo da SDL. Para trabalhar com as imagens, precisamos de uma variável que cuidara de todas as renderizações daquela janela. A variável é do tipo SDL_Renderer * Além da variável precisamos criar o Render com SDL_CreateRenderer(nome da sua Janela,-1,como deve ser criada); O ultimo parâmetro depende do que o seu jogo precisa, pesquisa mais na wiki da SDL por SDL_CreateRenderer para ver quais as opções e suas funcionalidades.
Não lembra como criar uma janela? veja aqui
SDL_Renderer *renderer //renderizações da janela nessa variável
renderer = SDL_CreateRenderer(janela, -1, SDL_RENDERER_ACCELERATED);
Agora vamos declarar as variáveis da imagem. As imagens são do tipo SDL_Texture*
SDL_Texture *fundo=NULL;//Variável das imagens
Depois da declaração da imagem, já podemos carregar a que desejamos. Para isso utilizamos o comando IMG_LoadTexture(renderer,"local aonde a imagem esta.png) que deve ser atribuído a variável desejada.
Lembrando que, as imagens devem(para melhor organização) estar em uma pasta dentro do projeto, no meu caso, o nome da imagem é "fundo" e esta dentro da pasta Imagens do meu projeto.
fundo = IMG_LoadTexture(renderer, "Imagens/fundo.png");
/*carrega a imagem desejada para a variavel;*/
Com a imagem carregada, podemos desenha-la na tela, lembre-se que uma imagem pode ser desenhada sobre a outra, então tenha prioridades quanto a ordem de acordo com seu desejo.
Para renderizar a texture, temos o comando SDL_RenderCopy(renderer, nome da imagem, NULL, o local onde quer imprimir a imagem); Se deseja que a imagem ocupe a tela inteira, deixe os ultimos dois parâmetros como NULL, caso contrário pode-se fazer um Rect é passar sua variável indicando o local exato na tela.
Após o SDL_RenderCopy, precisa atualizar a tela para as imagens aparecerem, faça isso com SDL_RenderPresent(renderer);
Caso deseje limpar a tela o comando é:
SDL_RenderClear(renderer)
SDL_RenderClear(renderer); //Limpa a tela
SDL_RenderCopy(renderer,fundo,NULL,NULL);//carrega a imagem na tela
SDL_RenderPresent(renderer);//atualiza a tela com as imagens
Pronto, após isso a imagem deve ser carregada. A caso de teste, utilize SDL_Delay antes de fechar a Janela.
Libere o Renderer e as Textures com
SDL_DestroyTexture(Nome da texture);
SDL_DestroyRenderer (render);
SDL_Delay(3000);// Espera 3 segundo
SDL_DestroyTexture (fundo);// Libera a texture
fundo = NULL;
SDL_DestroyRenderer (render);// libera o render
SDL_DestroyWindow(janela);// destrói a Janela
SDL_Quit(); // fim do programa
Feche o main compile e veja sua imagem na tela!
Baixe o projeto aqui!
Bom Trabalho!
Links que podem ajudar:
https://wiki.libsdl.org/SDL_CreateRenderer
0 Comentários