X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Flibretro.c;h=ed4bb5bdfb37c4ca3b2b20c3083674010e68fdcd;hb=3e82ffc4389a4699d0001133c7c2bffd9ee40edc;hp=7f331574df168c11f0c2614443af6cf75a618c40;hpb=e5241564f4444496f51f4de9bf533b1d910449ec;p=pcsx_rearmed.git diff --git a/frontend/libretro.c b/frontend/libretro.c index 7f331574..ed4bb5bd 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -146,8 +146,8 @@ int multitap1 = 0; int multitap2 = 0; int in_enable_vibration = 1; static int in_enable_crosshair[2] = { 0, 0 }; -static bool in_dualshock_toggle_enable = 0; -static bool in_dualshock_toggling = 0; +static int in_dualshock_analog_combo = 0; +static bool in_dualshock_toggling = false; // NegCon adjustment parameters // > The NegCon 'twist' action is somewhat awkward when mapped @@ -237,7 +237,10 @@ static void set_vout_fb() fb.access_flags = RETRO_MEMORY_ACCESS_WRITE; vout_pitch = vout_width; - if (environ_cb(RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER, &fb) && fb.format == RETRO_PIXEL_FORMAT_RGB565) { + if (environ_cb(RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER, &fb) + && fb.format == RETRO_PIXEL_FORMAT_RGB565 + && vout_can_dupe && duping_enable) + { vout_buf_ptr = fb.data; if (fb.pitch / 2 != vout_pitch && fb.pitch != vout_width * 2) SysPrintf("got unusual pitch %zd for resolution %dx%d\n", fb.pitch, vout_width, vout_height); @@ -2014,11 +2017,27 @@ static void update_variables(bool in_flight) } var.value = NULL; - var.key = "pcsx_rearmed_analog_toggle"; + var.key = "pcsx_rearmed_analog_combo"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - in_dualshock_toggle_enable = (strcmp(var.value, "enabled") == 0); + if (strcmp(var.value, "l1+r1+select") == 0) + in_dualshock_analog_combo = (1 << RETRO_DEVICE_ID_JOYPAD_L) | + (1 << RETRO_DEVICE_ID_JOYPAD_R) | (1 << RETRO_DEVICE_ID_JOYPAD_SELECT); + else if (strcmp(var.value, "l1+r1+start") == 0) + in_dualshock_analog_combo = (1 << RETRO_DEVICE_ID_JOYPAD_L) | + (1 << RETRO_DEVICE_ID_JOYPAD_R) | (1 << RETRO_DEVICE_ID_JOYPAD_START); + else if (strcmp(var.value, "l1+r1+l3") == 0) + in_dualshock_analog_combo = (1 << RETRO_DEVICE_ID_JOYPAD_L) | + (1 << RETRO_DEVICE_ID_JOYPAD_R) | (1 << RETRO_DEVICE_ID_JOYPAD_L3); + else if (strcmp(var.value, "l1+r1+r3") == 0) + in_dualshock_analog_combo = (1 << RETRO_DEVICE_ID_JOYPAD_L) | + (1 << RETRO_DEVICE_ID_JOYPAD_R) | (1 << RETRO_DEVICE_ID_JOYPAD_R3); + else if (strcmp(var.value, "l3+r3") == 0) + in_dualshock_analog_combo = (1 << RETRO_DEVICE_ID_JOYPAD_L3) | + (1 << RETRO_DEVICE_ID_JOYPAD_R3); + else + in_dualshock_analog_combo = 0; } var.value = NULL; @@ -2873,17 +2892,13 @@ static void update_input_mouse(int port, int ret) static void update_input(void) { - int16_t analog_combo = - (1 << RETRO_DEVICE_ID_JOYPAD_L) | - (1 << RETRO_DEVICE_ID_JOYPAD_R) | - (1 << RETRO_DEVICE_ID_JOYPAD_SELECT); int i; int j; // reset all keystate, query libretro for keystate for (i = 0; i < PORTS_NUMBER; i++) { - int16_t ret = 0; + int32_t ret = 0; int type = in_type[i]; in_keystate[i] = 0; @@ -2892,7 +2907,11 @@ static void update_input(void) continue; if (libretro_supports_bitmasks) + { ret = input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_MASK); + // undo int16 sign extension (why input_state_cb returns int16 in the first place?) + ret &= (1 << (RETRO_DEVICE_ID_JOYPAD_R3 + 1)) - 1; + } else { for (j = 0; j < (RETRO_DEVICE_ID_JOYPAD_R3 + 1); j++) @@ -2918,8 +2937,8 @@ static void update_input(void) break; default: // dualshock ANALOG toggle? - if (type == PSE_PAD_TYPE_ANALOGPAD && in_dualshock_toggle_enable - && (ret & analog_combo) == analog_combo) + if (type == PSE_PAD_TYPE_ANALOGPAD && in_dualshock_analog_combo != 0 + && ret == in_dualshock_analog_combo) { if (!in_dualshock_toggling) {