diff --git a/android/native/jni/input_android.c b/android/native/jni/input_android.c index 3cba28b656..e484dbcfb0 100644 --- a/android/native/jni/input_android.c +++ b/android/native/jni/input_android.c @@ -415,6 +415,8 @@ static int16_t android_input_state(void *data, const struct retro_keybind **bind case RETRO_DEVICE_JOYPAD: return ((state[port] & binds[port][id].joykey) && (port < pads_connected)); case RETRO_DEVICE_POINTER: + if (index != 0) // TODO: Multitouch. + return 0; switch(id) { case RETRO_DEVICE_ID_POINTER_X: diff --git a/gfx/gl.c b/gfx/gl.c index a17ace4d34..9d8c0d70e6 100644 --- a/gfx/gl.c +++ b/gfx/gl.c @@ -1286,7 +1286,7 @@ static void gl_set_nonblock_state(void *data, bool state) context_swap_interval_func(state ? 0 : 1); } -static bool resolve_extensions(gl_t *gl) +static bool resolve_extensions(gl_t *gl, bool rgb32) { #ifdef _WIN32 // Win32 GL lib doesn't have some elementary functions needed. @@ -1467,7 +1467,7 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); #endif - if (!resolve_extensions(gl)) + if (!resolve_extensions(gl, video->rgb32)) { context_destroy_func(); free(gl); diff --git a/input/dinput.c b/input/dinput.c index ed62f4a0aa..645051fc0b 100644 --- a/input/dinput.c +++ b/input/dinput.c @@ -237,8 +237,11 @@ static int16_t dinput_mouse_state(struct dinput_input *di, unsigned id) } } -static int16_t dinput_pointer_state(struct dinput_input *di, unsigned id) +static int16_t dinput_pointer_state(struct dinput_input *di, unsigned index, unsigned id) { + if (index != 0) + return 0; + int16_t res_x = 0, res_y = 0; bool valid = input_translate_coord_viewport(di->mouse_x, di->mouse_y, &res_x, &res_y); @@ -284,7 +287,7 @@ static int16_t dinput_input_state(void *data, return dinput_mouse_state(di, id); case RETRO_DEVICE_POINTER: - return dinput_pointer_state(di, id); + return dinput_pointer_state(di, index, id); case RETRO_DEVICE_LIGHTGUN: return dinput_lightgun_state(di, id); diff --git a/input/sdl_input.c b/input/sdl_input.c index 4090a41822..9bb929cce5 100644 --- a/input/sdl_input.c +++ b/input/sdl_input.c @@ -120,8 +120,11 @@ static int16_t sdl_mouse_device_state(sdl_input_t *sdl, unsigned id) } } -static int16_t sdl_pointer_device_state(sdl_input_t *sdl, unsigned id) +static int16_t sdl_pointer_device_state(sdl_input_t *sdl, unsigned index, unsigned id) { + if (index != 0) + return 0; + int16_t res_x = 0, res_y = 0; bool valid = input_translate_coord_viewport(sdl->mouse_abs_x, sdl->mouse_abs_y, &res_x, &res_y); @@ -182,7 +185,7 @@ static int16_t sdl_input_state(void *data_, const struct retro_keybind **binds, case RETRO_DEVICE_MOUSE: return sdl_mouse_device_state(data, id); case RETRO_DEVICE_POINTER: - return sdl_pointer_device_state(data, id); + return sdl_pointer_device_state(data, index, id); case RETRO_DEVICE_KEYBOARD: return sdl_keyboard_device_state(data, id); case RETRO_DEVICE_LIGHTGUN: diff --git a/input/x11_input.c b/input/x11_input.c index 052d2f4e48..e7368537aa 100644 --- a/input/x11_input.c +++ b/input/x11_input.c @@ -107,8 +107,11 @@ static int16_t x_mouse_state(x11_input_t *x11, unsigned id) } } -static int16_t x_pointer_state(x11_input_t *x11, unsigned id) +static int16_t x_pointer_state(x11_input_t *x11, unsigned index, unsigned id) { + if (index != 0) + return 0; + int16_t res_x = 0, res_y = 0; bool valid = input_translate_coord_viewport(x11->mouse_x, x11->mouse_y, &res_x, &res_y); @@ -177,7 +180,7 @@ static int16_t x_input_state(void *data, const struct retro_keybind **binds, uns return x_mouse_state(x11, id); case RETRO_DEVICE_POINTER: - return x_pointer_state(x11, id); + return x_pointer_state(x11, index, id); case RETRO_DEVICE_LIGHTGUN: return x_lightgun_state(x11, id); diff --git a/retroarch.c b/retroarch.c index 6257f8f842..cce910b1cb 100644 --- a/retroarch.c +++ b/retroarch.c @@ -472,19 +472,19 @@ size_t audio_sample_batch(const int16_t *data, size_t frames) #ifdef HAVE_OVERLAY static inline void input_poll_overlay(void) { - bool pressed = input_input_state_func(NULL, 0, - RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_PRESSED); - driver.overlay_state = 0; - if (!pressed) - return; - int16_t x = input_input_state_func(NULL, 0, - RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_X); - int16_t y = input_input_state_func(NULL, 0, - RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_Y); + for (unsigned i = 0; + input_input_state_func(NULL, 0, RETRO_DEVICE_POINTER, i, RETRO_DEVICE_ID_POINTER_PRESSED); + i++) + { + int16_t x = input_input_state_func(NULL, 0, + RETRO_DEVICE_POINTER, i, RETRO_DEVICE_ID_POINTER_X); + int16_t y = input_input_state_func(NULL, 0, + RETRO_DEVICE_POINTER, i, RETRO_DEVICE_ID_POINTER_Y); - driver.overlay_state = input_overlay_poll(driver.overlay, x, y); + driver.overlay_state |= input_overlay_poll(driver.overlay, x, y); + } } #endif