From 958952f617e9b432227cd327fb791277ba8a71c5 Mon Sep 17 00:00:00 2001 From: vent Date: Tue, 7 Jan 2025 16:30:06 +0000 Subject: [PATCH] Fix initial GetMouseDelta on GLFW The initial mouse delta is often very large, depending on where the cursor was before the window opened. This is because the first mouse delta is the x/y coordinates your cursor entered the screen from. This can (and often does) cause the free camera to make a sudden jump when its moved for the first time. The solution to this is to initialize the previousPosition and the currentPosition to the same value on the first mouse input, essentially ignoring the first mouse delta. --- src/platforms/rcore_desktop_glfw.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/platforms/rcore_desktop_glfw.c b/src/platforms/rcore_desktop_glfw.c index dba821dd..147e7c9f 100644 --- a/src/platforms/rcore_desktop_glfw.c +++ b/src/platforms/rcore_desktop_glfw.c @@ -1873,6 +1873,13 @@ static void MouseCursorPosCallback(GLFWwindow *window, double x, double y) CORE.Input.Mouse.currentPosition.y = (float)y; CORE.Input.Touch.position[0] = CORE.Input.Mouse.currentPosition; + static bool firstMouseInput = true; + if (firstMouseInput) + { + CORE.Input.Mouse.previousPosition = CORE.Input.Mouse.currentPosition; + firstMouseInput = false; + } + #if defined(SUPPORT_GESTURES_SYSTEM) && defined(SUPPORT_MOUSE_GESTURES) // Process mouse events as touches to be able to use mouse-gestures GestureEvent gestureEvent = { 0 };