Voyons sur un exemple comment obtenir des informations en SDL3

En SDL3, récupérer une liste se fait généralement en utilisant une fonction qui récupère les ID des objets que vous voulez utiliser, un peu comme expliqué avec le Joystick. 

Prenons un autre exemple, les sensors:

    int count = 0; // Variable pour stocker le nombre de capteurs
    SDL_SensorID* sensorIDs = SDL_GetSensors(&count); // Récupération des capteurs et de leur nombre

    if (!sensorIDs || count <= 0) {
        std::cout << "Aucun capteur détecté." << std::endl;
        SDL_Quit();
        return 0;
    }

 

La SDL3 dispose d'une fonction SDL_GetSensors(&count) qui va indiquer via count le nombre de capteurs et renvoyer un tableau qui contient les identifiants desdits capteurs.

    for (int i = 0; i < count; ++i) {
        SDL_SensorID sensorID = sensorIDs[i]; // Identifiant unique du capteur

        // Ouvrir le capteur pour obtenir des informations détaillées
        SDL_Sensor* sensor = SDL_OpenSensor(sensorID);
        if (!sensor) {
            std::cerr << "Impossible d'ouvrir le capteur " << i << ": " << SDL_GetError() << std::endl;
            continue;
        }

 

Après on utilisera SDL_OpenSensor qui récupère en gros un identifiant pour renvoyer le capteur en question.

        const char* name = SDL_GetSensorName(sensor); // Nom du capteur
        SDL_SensorType type = SDL_GetSensorType(sensor); // Type du capteur

 

Après on peut interroger le capteur et l'utiliser ...

Voici le code complet :

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

int main(int argc, char* argv[]) {
    if ( ! SDL_Init(SDL_INIT_SENSOR)) {
        std::cerr << "Erreur lors de l'initialisation de SDL: " << SDL_GetError() << std::endl;
        return -1;
    }

    int count = 0; // Variable pour stocker le nombre de capteurs
    SDL_SensorID* sensorIDs = SDL_GetSensors(&count); // Récupération des capteurs et de leur nombre

    if (!sensorIDs || count <= 0) {
        std::cout << "Aucun capteur détecté." << std::endl;
        SDL_Quit();
        return 0;
    }

    std::cout << "Nombre de capteurs détectés: " << count << std::endl;

    for (int i = 0; i < count; ++i) {
        SDL_SensorID sensorID = sensorIDs[i]; // Identifiant unique du capteur

        // Ouvrir le capteur pour obtenir des informations détaillées
        SDL_Sensor* sensor = SDL_OpenSensor(sensorID);
        if (!sensor) {
            std::cerr << "Impossible d'ouvrir le capteur " << i << ": " << SDL_GetError() << std::endl;
            continue;
        }

        const char* name = SDL_GetSensorName(sensor); // Nom du capteur
        SDL_SensorType type = SDL_GetSensorType(sensor); // Type du capteur

        std::cout << "Capteur " << i << ": " << (name ? name : "Inconnu") << std::endl;
        std::cout << "  Type: ";
        
        switch (type) {
            case SDL_SENSOR_ACCEL:
                std::cout << "Accelerometer";
                break;
            case SDL_SENSOR_GYRO:
                std::cout << "Gyroscope";
                break;
            case SDL_SENSOR_ACCEL_L:
                std::cout << "Accelerometer for left Joy-Con controller and Wii nunchuk ";
                break;
            case SDL_SENSOR_GYRO_L:
                std::cout << "Gyroscope for left Joy-Con controller";
                break;
            case SDL_SENSOR_ACCEL_R:
                std::cout << "Accelerometer for right Joy-Con controller";
                break;
            case SDL_SENSOR_GYRO_R:
                std::cout << "Gyroscope for right Joy-Con controller";
                break;
            default:
                std::cout << "Unknown sensor type or Returned for an invalid sensor";
                break;
        }
        std::cout << std::endl;

        // Fermer le capteur une fois les informations obtenues
        SDL_CloseSensor(sensor);
    }

    // Libération de la mémoire allouée pour le tableau
    SDL_free(sensorIDs);

    SDL_Quit();
    return 0;
}

Voila !