1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| #include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
const int SIZE_TEXT = 15;
int main(int argc, char* argv[]){
// Initialisation SDL
if(0 != SDL_Init(SDL_INIT_VIDEO)){
std::cout << "Erreur d'initialisation de la SDL : " << SDL_GetError() << "\n";
return -1;
}
// Création de Fenetre
SDL_Window *window = NULL;
window = SDL_CreateWindow("Test de rendu TTF et TTF dans SDL_Texture", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
800, 800, SDL_WINDOW_SHOWN);
if(window == NULL){
std::cout << "Erreur de creation de la fenetre : " << SDL_GetError() << "\n";
return -1;
}
// Création Renderer
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
// Initialisation TTF
TTF_Init();
// Création d'un text avec TTF
const char* textTTF = "Text TTF mode Blended";
TTF_Font* font = TTF_OpenFont("arial.ttf", SIZE_TEXT);
if(!font){
std::cout << "Impossible de charger la font.\n";
return -1;
}
SDL_Color color; color.r = 255; color.g = 255; color.b = 255;
SDL_Surface* textSurf = TTF_RenderText_Blended(font, textTTF, color);
// Transforme la SDL_Surface en SDL_Texture
SDL_Texture* textTexture = SDL_CreateTextureFromSurface(renderer, textSurf);
// Enregistre la taille du texte
SDL_Rect rectDest; rectDest.w = textSurf->w; rectDest.h = textSurf->h;
// Copie de la texture du text dans une autre texture
// ==============================================================================
// Créer une texture vide de la meme taille que le text
SDL_Texture* textureCopy = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, textSurf->w, textSurf->h);
// Configure la destination des rendu future dans textureCopy
SDL_SetRenderTarget(renderer, textureCopy);
// Active le mode transparence avant la copie
SDL_SetTextureBlendMode(textureCopy, SDL_BLENDMODE_BLEND);
// Copie la texture TTF dans la nouvelle texture textureCopy
SDL_RenderCopy(renderer, textTexture, 0, &rectDest);
// Configure la destination des rendu future à l'écran
SDL_SetRenderTarget(renderer, 0);
// ==============================================================================
// Affiche le premier text
rectDest.x = 20; rectDest.y = 20;
SDL_RenderCopy(renderer, textTexture, 0, &rectDest);
SDL_RenderPresent(renderer);
// Vide l'écran
SDL_RenderClear(renderer);
// Attend 2 secondes et affiche le texte copié dans une nouvelle texture
SDL_Delay(2000);
SDL_RenderCopy(renderer, textureCopy, 0, &rectDest);
SDL_RenderPresent(renderer);
// Attend 2 secondes et quitte le programme
SDL_Delay(2000);
// Fermeture du programme
SDL_DestroyTexture(textureCopy);
SDL_DestroyTexture(textTexture);
SDL_FreeSurface(textSurf);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
TTF_Quit();
SDL_Quit();
return 0;
} |
Partager