Don't batch mouse motion for Sunshine

This commit is contained in:
Cameron Gutman
2023-01-16 22:01:34 -06:00
parent 8a0142bd0f
commit 9c15cceee7
3 changed files with 33 additions and 17 deletions
+4 -1
View File
@@ -11,12 +11,13 @@
#define MOUSE_POLLING_INTERVAL 5 #define MOUSE_POLLING_INTERVAL 5
SdlInputHandler::SdlInputHandler(StreamingPreferences& prefs, NvComputer*, int streamWidth, int streamHeight) SdlInputHandler::SdlInputHandler(StreamingPreferences& prefs, NvComputer* computer, int streamWidth, int streamHeight)
: m_MultiController(prefs.multiController), : m_MultiController(prefs.multiController),
m_GamepadMouse(prefs.gamepadMouse), m_GamepadMouse(prefs.gamepadMouse),
m_SwapMouseButtons(prefs.swapMouseButtons), m_SwapMouseButtons(prefs.swapMouseButtons),
m_ReverseScrollDirection(prefs.reverseScrollDirection), m_ReverseScrollDirection(prefs.reverseScrollDirection),
m_SwapFaceButtons(prefs.swapFaceButtons), m_SwapFaceButtons(prefs.swapFaceButtons),
m_BatchMouseMotion(computer->isNvidiaServerSoftware),
m_MouseMoveTimer(0), m_MouseMoveTimer(0),
m_MousePositionLock(0), m_MousePositionLock(0),
m_MouseWasInVideoRegion(false), m_MouseWasInVideoRegion(false),
@@ -193,6 +194,7 @@ SdlInputHandler::SdlInputHandler(StreamingPreferences& prefs, NvComputer*, int s
SDL_AtomicSet(&m_MouseDeltaY, 0); SDL_AtomicSet(&m_MouseDeltaY, 0);
SDL_AtomicSet(&m_MousePositionUpdated, 0); SDL_AtomicSet(&m_MousePositionUpdated, 0);
if (m_BatchMouseMotion) {
Uint32 pollingInterval = QString(qgetenv("MOUSE_POLLING_INTERVAL")).toUInt(); Uint32 pollingInterval = QString(qgetenv("MOUSE_POLLING_INTERVAL")).toUInt();
if (pollingInterval == 0) { if (pollingInterval == 0) {
pollingInterval = MOUSE_POLLING_INTERVAL; pollingInterval = MOUSE_POLLING_INTERVAL;
@@ -205,6 +207,7 @@ SdlInputHandler::SdlInputHandler(StreamingPreferences& prefs, NvComputer*, int s
m_MouseMoveTimer = SDL_AddTimer(pollingInterval, SdlInputHandler::mouseMoveTimerCallback, this); m_MouseMoveTimer = SDL_AddTimer(pollingInterval, SdlInputHandler::mouseMoveTimerCallback, this);
} }
}
SdlInputHandler::~SdlInputHandler() SdlInputHandler::~SdlInputHandler()
{ {
+1
View File
@@ -147,6 +147,7 @@ private:
bool m_SwapMouseButtons; bool m_SwapMouseButtons;
bool m_ReverseScrollDirection; bool m_ReverseScrollDirection;
bool m_SwapFaceButtons; bool m_SwapFaceButtons;
bool m_BatchMouseMotion;
SDL_TimerID m_MouseMoveTimer; SDL_TimerID m_MouseMoveTimer;
SDL_atomic_t m_MouseDeltaX; SDL_atomic_t m_MouseDeltaX;
SDL_atomic_t m_MouseDeltaY; SDL_atomic_t m_MouseDeltaY;
+12
View File
@@ -181,6 +181,7 @@ void SdlInputHandler::handleMouseMotionEvent(SDL_MouseMotionEvent* event)
return; return;
} }
if (m_BatchMouseMotion) {
// Batch until the next mouse polling window or we'll get awful // Batch until the next mouse polling window or we'll get awful
// input lag everything except GFE 3.14 and 3.15. // input lag everything except GFE 3.14 and 3.15.
if (m_AbsoluteMouseMode) { if (m_AbsoluteMouseMode) {
@@ -191,6 +192,17 @@ void SdlInputHandler::handleMouseMotionEvent(SDL_MouseMotionEvent* event)
SDL_AtomicAdd(&m_MouseDeltaY, event->yrel); SDL_AtomicAdd(&m_MouseDeltaY, event->yrel);
} }
} }
else {
// On Sunshine, we can send input immediately
if (m_AbsoluteMouseMode) {
updateMousePositionReport(event->x, event->y);
flushMousePositionUpdate();
}
else {
LiSendMouseMoveEvent(event->xrel, event->yrel);
}
}
}
void SdlInputHandler::handleMouseWheelEvent(SDL_MouseWheelEvent* event) void SdlInputHandler::handleMouseWheelEvent(SDL_MouseWheelEvent* event)
{ {