Example - Sdl3
#define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600 #define BALL_RADIUS 20
ball_x += velocity_x * delta_time; ball_y += velocity_y * delta_time; sdl3 example
– SDL3 has renamed many event types. The quit event is now SDL_EVENT_QUIT (instead of SDL_QUIT ). Key events follow a similar pattern: SDL_EVENT_KEY_DOWN and the key code is accessed via event.key.key (where SDLK_ESCAPE is unchanged). The event loop is non-blocking thanks to SDL_PollEvent . The event loop is non-blocking thanks to SDL_PollEvent
// Render SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // black background SDL_RenderClear(renderer); // Draw a filled circle (using SDL_RenderFillRect would be simpler, but we approximate) // For a real circle, we'd use a texture, but SDL3's renderer still lacks native circle. // Let's draw a simple rectangle to keep the example focused. SDL_FRect ball_rect = { ball_x - BALL_RADIUS, ball_y - BALL_RADIUS, BALL_RADIUS * 2, BALL_RADIUS * 2 }; SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255); // blue SDL_RenderFillRect(renderer, &ball_rect); // In SDL3, we call SDL_RenderPresent (same as SDL2) SDL_RenderPresent(renderer); // Frame rate control (optional: ~60 FPS) SDL_Delay(16); } SDL_FRect ball_rect = { ball_x - BALL_RADIUS, ball_y
// 3. Create a renderer for accelerated 2D SDL_Renderer* renderer = SDL_CreateRenderer(window, NULL, SDL_RENDERER_ACCELERATED); if (!renderer) { SDL_Log("SDL_CreateRenderer Error: %s", SDL_GetError()); SDL_DestroyWindow(window); SDL_Quit(); return 1; }
– SDL_SetRenderDrawColor sets the drawing color. SDL_RenderClear fills the whole window with black. We then draw a filled rectangle (representing the ball) in blue. Note: SDL3’s renderer still does not include a native filled circle primitive, so a rectangle suffices for demonstration. Finally, SDL_RenderPresent swaps the buffers to show the frame.