mirror of https://github.com/mgba-emu/mgba.git
Libretro: Lazy-load sensors
This commit is contained in:
parent
9e251c54e7
commit
49b12139ec
|
@ -69,7 +69,8 @@ static int rumbleDown;
|
||||||
static struct mRumble rumble;
|
static struct mRumble rumble;
|
||||||
static struct GBALuminanceSource lux;
|
static struct GBALuminanceSource lux;
|
||||||
static struct mRotationSource rotation;
|
static struct mRotationSource rotation;
|
||||||
static bool rotationEnabled;
|
static bool tiltEnabled;
|
||||||
|
static bool gyroEnabled;
|
||||||
static int luxLevelIndex;
|
static int luxLevelIndex;
|
||||||
static uint8_t luxLevel;
|
static uint8_t luxLevel;
|
||||||
static bool luxSensorEnabled;
|
static bool luxSensorEnabled;
|
||||||
|
@ -100,9 +101,12 @@ static void _initSensors(void) {
|
||||||
sensorStateCallback = sensorInterface.set_sensor_state;
|
sensorStateCallback = sensorInterface.set_sensor_state;
|
||||||
|
|
||||||
if (sensorStateCallback && sensorGetCallback) {
|
if (sensorStateCallback && sensorGetCallback) {
|
||||||
if (sensorStateCallback(0, RETRO_SENSOR_ACCELEROMETER_ENABLE, EVENT_RATE)
|
if (sensorStateCallback(0, RETRO_SENSOR_ACCELEROMETER_ENABLE, EVENT_RATE)) {
|
||||||
&& sensorStateCallback(0, RETRO_SENSOR_GYROSCOPE_ENABLE, EVENT_RATE)) {
|
tiltEnabled = true;
|
||||||
rotationEnabled = true;
|
}
|
||||||
|
|
||||||
|
if (sensorStateCallback(0, RETRO_SENSOR_GYROSCOPE_ENABLE, EVENT_RATE)) {
|
||||||
|
gyroEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sensorStateCallback(0, RETRO_SENSOR_ILLUMINANCE_ENABLE, EVENT_RATE)) {
|
if (sensorStateCallback(0, RETRO_SENSOR_ILLUMINANCE_ENABLE, EVENT_RATE)) {
|
||||||
|
@ -318,7 +322,8 @@ void retro_init(void) {
|
||||||
sensorGetCallback = 0;
|
sensorGetCallback = 0;
|
||||||
sensorStateCallback = 0;
|
sensorStateCallback = 0;
|
||||||
|
|
||||||
rotationEnabled = false;
|
tiltEnabled = false;
|
||||||
|
gyroEnabled = false;
|
||||||
rotation.sample = _updateRotation;
|
rotation.sample = _updateRotation;
|
||||||
rotation.readTiltX = _readTiltX;
|
rotation.readTiltX = _readTiltX;
|
||||||
rotation.readTiltY = _readTiltY;
|
rotation.readTiltY = _readTiltY;
|
||||||
|
@ -363,7 +368,8 @@ void retro_deinit(void) {
|
||||||
sensorStateCallback = NULL;
|
sensorStateCallback = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
rotationEnabled = false;
|
tiltEnabled = false;
|
||||||
|
gyroEnabled = false;
|
||||||
luxSensorEnabled = false;
|
luxSensorEnabled = false;
|
||||||
sensorsInitDone = false;
|
sensorsInitDone = false;
|
||||||
}
|
}
|
||||||
|
@ -374,7 +380,6 @@ void retro_run(void) {
|
||||||
}
|
}
|
||||||
uint16_t keys;
|
uint16_t keys;
|
||||||
|
|
||||||
_initSensors();
|
|
||||||
inputPollCallback();
|
inputPollCallback();
|
||||||
|
|
||||||
bool updated = false;
|
bool updated = false;
|
||||||
|
@ -1023,6 +1028,7 @@ static void _updateLux(struct GBALuminanceSource* lux) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (luxSensorUsed) {
|
if (luxSensorUsed) {
|
||||||
|
_initSensors();
|
||||||
float fLux = luxSensorEnabled ? sensorGetCallback(0, RETRO_SENSOR_ILLUMINANCE) : 0.0f;
|
float fLux = luxSensorEnabled ? sensorGetCallback(0, RETRO_SENSOR_ILLUMINANCE) : 0.0f;
|
||||||
luxLevel = cbrtf(fLux) * 8;
|
luxLevel = cbrtf(fLux) * 8;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1124,9 +1130,12 @@ static void _updateRotation(struct mRotationSource* source) {
|
||||||
tiltX = 0;
|
tiltX = 0;
|
||||||
tiltY = 0;
|
tiltY = 0;
|
||||||
gyroZ = 0;
|
gyroZ = 0;
|
||||||
if (rotationEnabled) {
|
_initSensors();
|
||||||
|
if (tiltEnabled) {
|
||||||
tiltX = sensorGetCallback(0, RETRO_SENSOR_ACCELEROMETER_X) * 3e8f;
|
tiltX = sensorGetCallback(0, RETRO_SENSOR_ACCELEROMETER_X) * 3e8f;
|
||||||
tiltY = sensorGetCallback(0, RETRO_SENSOR_ACCELEROMETER_Y) * -3e8f;
|
tiltY = sensorGetCallback(0, RETRO_SENSOR_ACCELEROMETER_Y) * -3e8f;
|
||||||
|
}
|
||||||
|
if (gyroEnabled) {
|
||||||
gyroZ = sensorGetCallback(0, RETRO_SENSOR_GYROSCOPE_Z) * -1.1e9f;
|
gyroZ = sensorGetCallback(0, RETRO_SENSOR_GYROSCOPE_Z) * -1.1e9f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue