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 !