Texture SDL Imagem Render


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

Postar um comentário

0 Comentários