Introduction to SDL2 Window & Text

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.

Initializing SDL & SDL_ttf


SDL_Init(SDL_INIT_VIDEO);
TTF_Init();
        

Initialize video and text libraries before use.

Creating Window & Renderer


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.

Loading a Font


TTF_Font* font = TTF_OpenFont("path/to/font.ttf", 24);
        

Second parameter is font size in points.

Rendering Text to Surface


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.

Creating Texture from Surface


SDL_Texture* textTex = SDL_CreateTextureFromSurface(
  renderer, textSurf
);
SDL_FreeSurface(textSurf);
        

Free surface after creating texture to save memory.

Rendering Texture to Screen


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.

Handling Events Loop


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.

Cleanup and Shutdown


SDL_DestroyTexture(textTex);
TTF_CloseFont(font);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
TTF_Quit();
SDL_Quit();
        

Clean up all resources before exit.