La version 3 de la librairie SDL est sortie !

Tout se passe sur la  page officielle

Une nouvelle API est (toujours ? o_O)  une bonne nouvelle: le projet est bien portant, de nouvelles fonctionnalités sont disponibles, des tonnes de bugs ont été corrigés ... 

C'est bien le cas de la SDL3 où les développeurs ont mis l'accent sur l'homogénéisation des noms de fonctions, (beaucoup de renommage et de mise en conformité comme l'indique le post suivant qui détaille le processus de migration) 

Des nouvelles fonctionnalités sont présentes, comme la gestion des tablettes tactiles, mais aussi de la prise en charge des Webcam !

Voici justement un nouveau code avec la SDL3

#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>

#include <stdexcept>
#include <string>

int main(int argc, char ** argv)
{
    std::string title = "First Windows";
    int width = 800;
    int height = 600;

    // initialisation
	if (!SDL_Init(SDL_INIT_VIDEO)) {
		throw std::runtime_error("Failed to initialize SDL: " + std::string(SDL_GetError()));
	}

	SDL_Window* window = SDL_CreateWindow(title.c_str(), width, height, 0);
	if (!window) {
		SDL_Quit();
		throw std::runtime_error("Failed to create window: " + std::string(SDL_GetError()));
	}

	SDL_Renderer* renderer = SDL_CreateRenderer(window, nullptr);
	if (!renderer) {
		SDL_DestroyWindow(window);
		SDL_Quit();
		throw std::runtime_error("Failed to create renderer: " + std::string(SDL_GetError()));
	}

    // renderer screen
    SDL_RenderClear(renderer);
    SDL_RenderPresent(renderer);
    // wait 3s
    SDL_Delay(3000);

    // end
    SDL_DestroyRenderer(renderer);
	SDL_DestroyWindow(window);
	SDL_Quit();

	return 0;
}

 

On constate que l'include est légèrement modifié !

#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>

 

Les paramètres de SDL_CreateWindow sont légèrement différents.

 

	SDL_Window* window = SDL_CreateWindow(title.c_str(), width, height, 0);
	if (!window) {
		SDL_Quit();
		throw std::runtime_error("Failed to create window: " + std::string(SDL_GetError()));
	}

 

Tout comme le SDL_CreateRenderer, si vous en avez besoin

	SDL_Renderer* renderer = SDL_CreateRenderer(window, nullptr);