SDL2 provides a flexible API to create windows, renderers, and render text using SDL_ttf. This guide covers setup, window & renderer creation, font loading, text rendering, and cleanup.
Note: Ensure SDL2 and SDL_ttf are installed and linked in your project.
SDL_Init(SDL_INIT_VIDEO);
TTF_Init();
Initialize video and text libraries before use.
SDL_Window* window = SDL_CreateWindow(
"SDL2 Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
800, 600, SDL_WINDOW_SHOWN
);
SDL_Renderer* renderer = SDL_CreateRenderer(
window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC
);
Use accelerated renderer with vsync for smooth drawing.
TTF_Font* font = TTF_OpenFont("path/to/font.ttf", 24);
Second parameter is font size in points.
SDL_Color color = {255, 255, 255, 255}; /* white */
SDL_Surface* textSurf = TTF_RenderText_Blended(
font, "Hello SDL2!", color
);
Blended gives high-quality anti-aliased text.
SDL_Texture* textTex = SDL_CreateTextureFromSurface(
renderer, textSurf
);
SDL_FreeSurface(textSurf);
Free surface after creating texture to save memory.
SDL_Rect dst = { 50, 50, 200, 50 };
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, textTex, NULL, &dst);
SDL_RenderPresent(renderer);
Use SDL_RenderClear and Present each frame.
bool running = true;
while (running) {
SDL_Event e;
while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT) running = false;
}
/* render calls here */
}
Poll events to keep application responsive.
SDL_DestroyTexture(textTex);
TTF_CloseFont(font);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
TTF_Quit();
SDL_Quit();
Clean up all resources before exit.