Quantum
48be58378c
[client] opengl: scale UI elements on high DPI displays
...
This is done by simply scaling up the rendered text bitmap.
2021-02-21 19:06:53 +11:00
Quantum
fd50426dda
[client] egl: scale UI elements on high DPI displays
...
This is done by actually rendering the text at high DPI.
2021-02-21 19:06:53 +11:00
Quantum
89bdaec95a
[client] opengl: support scaled UI for high DPI displays
2021-02-21 19:06:53 +11:00
Quantum
3ec73e2444
[client] egl: support scaled UI for high DPI displays
2021-02-21 19:06:53 +11:00
Quantum
447aedc9a3
[client] wayland: pass scale factor information to renderer
2021-02-21 19:06:53 +11:00
Quantum
b35e19fc27
[client] renderer: add interface for high DPI rendering
2021-02-21 19:06:53 +11:00
Quantum
6b26089353
[client] wayland: keep track of wl_output scale information
...
This will later be used to control the size of the underlying EGL buffers
in order to handle high DPI.
2021-02-21 19:06:53 +11:00
Quantum
e46cadb211
[client] egl: generate header file with #define for desktop shader
...
Instead of duplicating the #defines from the shader into the C code,
this commit adds a custom CMake rule that exports all the #defines
from a shader into a C header.
2021-02-21 14:20:41 +11:00
Quantum
ba6f26393f
[client] egl: add framework for multiple scaling algorithms
...
This commit fixes the issues with the meaning of useNearest being flipped
by removing the variable and use enumerations.
We define an enumeration EGL_DesktopScaleType to express the type of scaling
needed to be performed: no scaling, upscaling, or downscaling. This is
updated when either the frame size or the viewport size changes.
Previously, we only updated the useNearest when the frame size changes.
The desktop shader can now support an enumeration of scaling algorithms,
although only nearest and linear are currently implemented.
Like before, nearest is used when not scaling or upscaling, and linear is
used when downscaling.
2021-02-21 14:20:41 +11:00
Quantum
39a09ca565
[client] egl: remove dependency on SDL
...
After this PR, EGL functions are now accessed through <EGL/egl.h>
instead of through <SDL2/SDL_egl.h>, removing a pointless dependency
on SDL.
2021-02-21 10:31:49 +11:00
Quantum
5649d1ad95
[client] wayland: split Wayland display server into modules
...
The Wayland display server is getting unwieldy due to the sheer size.
To make it easier to edit in the future, I split it into many components
based on logical boundaries.
2021-02-21 10:31:49 +11:00
Quantum
1ba1108099
[client] wayland: add option to enable cursor warp
...
This is enabled on default. Specify wayland:warpSupport=no to disable it,
which may be useful on certain compositors that do not warp when the
pointer is confined.
2021-02-21 10:31:49 +11:00
Quantum
9b688909b0
[client] wayland: support LG_DS_WARP_SURFACE
...
This commit implements support for LG_DS_WARP_SURFACE, as well as a warp
routine based on cursor confines.
This may not necessarily work for all compositors. As such, the old cursor
routines are still kept, and used when wm.warpSupport is set to false.
2021-02-21 10:31:49 +11:00
Quantum
270631f1b9
[client] ds: add surface-only warp variant
...
This commit converts the output of ds->getProp(LG_DS_WARP_SUPPORT) to
an enum containing three items:
* LG_DS_WARP_NONE: warp is not supported at all
* LG_DS_WARP_SURFACE: warp is possible, but only inside the window
* LG_DS_WARP_SCREEN: warp is possible anywhere on the screen
LG_DS_WARP_NONE corresponds to the old false return value, and
LG_DS_WARP_SCREEN corresponds to the old true return value.
LG_DS_WARP_SURFACE is designed for Wayland, where warping is possible,
but only in our window. In this case, since we cannot warp outside
the window, we can warp the cursor to the edge when we attempt to exit.
If the cursor leaves, the normal leave routine gets called, and the
cursor disappears. If the cursor does not end up leaving, we grab it
again.
2021-02-21 10:31:49 +11:00
Tudor Brindus
1a407a67b1
[client] input: add releaseKeysOnFocusLoss option
...
This makes dealing with window manager shortcuts that overlap with guest
keys more pleasant, while retaining the previous functionality for users
who prefer it.
For instance, previously, using Alt+Tab (or $mod as Alt in i3/sway
movement commands) would result in the guest retaining Alt as pressed.
When the guest regained focus, it would continue thinking Alt is
pressed, leading to accidentally triggering obscure shortcuts. One had
to remember to press Alt again to "unstick" things, which was
suboptimal.
2021-02-21 10:31:49 +11:00
Quantum
98a327e99e
[client] wayland: make clipboard writes asynchronous
...
This allows multiple Wayland clients to stream data from looking glass
without blocking the looking glass main thread.
2021-02-21 10:31:49 +11:00
Quantum
800f063a1d
[client] wayland: make clipboard read async
...
This allows reading from the clipboard without blocking the UI thread.
2021-02-21 10:31:49 +11:00
Quantum
e01666b6ad
[client] wayland: implement epoll registration mechanism
...
This will be used to register async clipboard I/O callbacks later.
2021-02-21 10:31:49 +11:00
Quantum
30a888711b
[client] egl: force DMA copy into texture in on_frame
...
This commit forces the DMA'd memory to be copied into the texture in
the EGL on_frame handler. This avoids tearing when the LG host inevitably
updates the underlying memory. We need an additional copy inside the GPU,
but this is cheap compared to copying from system memory.
We could have used logic to lock the memory buffer, but that would require
performing DMA on every frame, which wastes memory bandwidth. This
manifests as reduced frame rate when moving the mouse compared to the
non-DMA implementation.
We also keep multiple EGLImages, one for each DMA fd, to avoid issues
with the OpenGL driver.
2021-02-21 10:31:48 +11:00
Quantum
a450e0f8f5
[client] wayland: better self-copy detection
...
This new implementation uses a special mimetype to tag data copied from
the guest, instead of using flags. This should make it easier to
implement asynchronous transfers in the future. Also, it's simpler to
understand and less error-prone.
The pid is included in the mimetype in order to distinguish between
different instances of looking glass: you might want to copy between
two different VMs, for example.
2021-02-21 10:31:48 +11:00
Quantum
0c9ecdfcb5
[client] wm: optionally disable screensaver when requested in guest
...
This commit adds a new option, win:autoScreensaver, which when set to yes,
automatically disables the screensaver when requested by an application
running in the guest, and enables it when the application no longer wants
it disabled.
This is useful when doing media playback in the guest.
2021-02-21 10:31:48 +11:00
Quantum
cc2104c699
[client] wayland: cleanup surface and display
...
These used to be owned by SDL and can't be cleaned up. This has since
changed.
2021-02-21 10:31:48 +11:00
Geoffrey McRae
c6af5be1dc
[client] app: always track the mouse button state
...
This change fixes a bug on re-grab of the cursor if window focus was
lost while a mouse button was held.
2021-02-21 10:31:48 +11:00
Quantum
06f6a96b56
[client] spice: fix input:grabKeyboardOnFocus
...
It appears that the keyboard should only be grabbed if the client is
focused and the cursor is in the view. However, the relevant logic was
missing from core_setCursorInView, and the keyboard was never actually
grabbed.
This commit adds the call to g_state.ds->grabKeyboard(), allowing grabbing
to work.
2021-02-21 10:31:48 +11:00
Quantum
89b73512ad
[client] renderer: add ability to toggle the FPS display
...
Before, if you want to see the FPS, you need to close the client and
restart it with the -k switch to see the FPS. This is annoying.
This PR introduces a new keybind, ScrollLock+D, which, when pressed,
toggles the display of the FPS.
This is implemented for both EGL and OpenGL backends.
2021-02-21 10:31:48 +11:00
Quantum
b45f7a6733
[client] egl: fix race condition in help overlay
...
egl_help_set_text and egl_help_render were both accessing bmp->help from
different threads. This creates a race condition in which if the help text
is quickly toggled on and off, it stays on.
This has been fixed with an atomic exchange.
2021-02-21 10:31:48 +11:00
Geoffrey McRae
1d99c821eb
[client] egl: decrease the font size for the help text
2021-02-21 10:31:48 +11:00
Quantum
2993f7ae7d
[client] egl: create 24-bit colour context
...
This should prevent the looking-glass-client window from having an alpha
channel. On Wayland, the alpha channel is used to compose the window onto
the desktop, so the wallpaper would bleed through unless set to complete
opaque.
We worked around this by using constant alpha for rendering, but it was
not sustainable. Instead, we should just ask for 24-bit context.
2021-02-21 10:31:48 +11:00
Geoffrey McRae
5454053d96
[client] x11: set the window class name
2021-02-21 10:31:48 +11:00
Geoffrey McRae
17d423db06
[client] x11: handle window deletion properly
2021-02-21 10:31:48 +11:00
Quantum
5ac53362a3
[client] renderer/egl: implement support for rendering help text
...
The help text is rendered in the bottom left corner on a semi-transparent
background, very similar to how the FPS text is rendered.
2021-02-21 10:31:48 +11:00
Quantum
17b0e2cb22
[client] fonts: support rendering multiline text with SDL
2021-02-21 10:31:48 +11:00
Quantum
96dc8c602c
[client] keybind: display help overlay while ScrollLock is held
...
This overlay will show the list of keybindings.
2021-02-21 10:31:48 +11:00
Quantum
ead8069dae
[client] keybind: add descriptions for all keybindings
2021-02-21 10:31:48 +11:00
Quantum
4e765b063a
[client] kb: add display names for all supported keys
2021-02-21 10:31:48 +11:00
Quantum
5dce97264b
[client] renderers: add on_help to renderer interface
...
This will be used to tell a render to display a help message.
2021-02-21 10:31:48 +11:00
Geoffrey McRae
a00a6429d3
[client] app: fix spelling error
2021-02-21 10:31:48 +11:00
Geoffrey McRae
aafdec02df
[client] wayland: fix mouse code post refactor
2021-02-21 10:31:48 +11:00
Geoffrey McRae
4e1c0cc0d0
[client] ds: refactor app and cursor state into app.c and core.c
2021-02-21 10:31:48 +11:00
Geoffrey McRae
33fed48277
[client] app: fix broken mouse sensitivity
2021-02-21 10:31:48 +11:00
Quantum
b0f9d2f713
[client] spice/wayland: improve cursor tracking logic
...
One of the major issues with the old tracking code is a data race
between the cursor thread updating g_cursor.guest and the
app_handleMouseBasic function. Specifically, the latter may have
sent mouse input via spice that has not been processed by the guest
and updated g_cursor.guest, but the guest may overwrite g_cursor.guest
to a previous state before the input is processed. This causes some
movements to be doubled. Eventually, the cursor positions will
synchronize, but this nevertheless causes a lot of jitter.
In this commit, we introduce a new field g_cursor.projected, which
is unambiguously the position of the cursor after taking into account
all the input already sent via spice. This is synced up to the guest
cursor upon entering the window and when the host restarts. Afterwards,
all mouse movements will be based on this position. This eliminates
all cursor jitter as far as I could tell.
Also, the cursor is now synced to the host position when exiting
capture mode.
A downside of this commit is that if the 1:1 movement patch is not
correctly applied, the cursor position would be wildly off instead
of simply jittering, but that is an unsupported configuration and
should not matter.
Also unsupported is when an application in guest moves the cursor
programmatically and bypassing spice. When using those applications,
capture mode must be on. Before this commit, we try to move the guest
cursor back to where it should be, but it's inherently fragile and
may lead to scenarios such as wild movements in first-person shooters.
2021-02-21 10:31:48 +11:00
Quantum
543d660ccc
[client] wayland: check for the Wayland platform extension
...
We used to test for the EGL_KHR_platform_base and EGL_EXT_platform_base,
but those only really signal the availability of eglGetPlatformDisplay(EXT)
functions, not whether the constant EGL_PLATFORM_WAYLAND_KHR or
EGL_PLATFORM_WAYLAND_EXT is accepted by their respective functions.
Instead, we switch to test for the extensions that tells us whether the
Wayland platform is supported.
2021-02-21 10:31:48 +11:00
Quantum
ecebcc4c35
[client] opengl: make ds functions optional
...
Using a macro ENABLE_OPENGL just like ENABLE_EGL to optionally remove
OpenGL implementation code. This is mostly because on Wayland it's just
a rehash of the EGL code (as EGL is the only way to create OpenGL
contexts on Wayland).
2021-02-21 10:31:48 +11:00
Quantum
af2dafbdac
[client] wayland: add ability to create OpenGL contexts
...
This should allow the OpenGL backend to work.
2021-02-21 10:31:48 +11:00
Quantum
a56e363e39
[client] wayland: add stubs for OpenGL functions
...
This allows the client to run on Wayland, even though OpenGL doesn't work.
2021-02-21 10:31:48 +11:00
Geoffrey McRae
06af101bf9
[client] x11: properly handle window destruction and fullscreen support
2021-02-21 10:31:48 +11:00
Geoffrey McRae
973806dd9c
[client] opengl: implement & fix opengl support
2021-02-21 10:31:48 +11:00
Geoffrey McRae
740dad943b
[client] x11: cleanup on failure to initialize
2021-02-21 10:31:48 +11:00
Geoffrey McRae
4dfe4b8e2b
[client] allow renderers to pass back if they need an OpenGL context
2021-02-21 10:31:48 +11:00
Geoffrey McRae
cc521eab90
[client] app: fix reversed ds init logic
2021-02-21 10:31:48 +11:00
Geoffrey McRae
7d2c9ec447
[client] app: don't call ds->free if the ds was not initialized
2021-02-21 10:31:48 +11:00
Geoffrey McRae
8919d2718f
[client] egl: fix building without EGL support
2021-02-21 10:31:48 +11:00
Tudor Brindus
cf3e816603
[client] probe Wayland backend first
...
`$DISPLAY` will be set even in a Wayland session, which causes LG to
initialize itself under Xwayland unless it is explicitly compiled with
`-DENABLE_X11=OFF`.
We could add a Wayland check within the X11 backend, but reordering the
code-generated array seems like a better solution.
2021-02-21 10:31:48 +11:00
Quantum
b8bf980a29
[client] wayland: decorate window unless borderless is requested
...
Show server-side decoration with the xdg_decoration protocol unless
win:borderless=yes.
2021-02-21 10:31:48 +11:00
Quantum
5dad69675b
[client] wayland: respect request to maximize window
...
Request the compositor to maximize the window if win:maximize=yes.
2021-02-21 10:31:48 +11:00
Quantum
d0d1b31c10
[client] wayland: add handling for close event
...
When the xdg_toplevel receives a close event, call app_handleCloseEvent.
2021-02-21 10:31:48 +11:00
Quantum
6206d5dec4
[client] wayland: implement full screen handling
...
Implement waylandSetFullscreen and waylandGetFullscreen.
2021-02-21 10:31:48 +11:00
Quantum
265370b0f5
[client] wayland: implement cursor handling
...
This commit adds code to load the looking glass cursor and display it
when needed. Otherwise, the cursor is hidden.
2021-02-21 10:31:48 +11:00
Quantum
081d76268a
[client] wayland: handle mouse/keyboard enter events
...
This allows mouse and keyboard input to work again on Wayland.
2021-02-21 10:31:48 +11:00
Quantum
8559b354ae
[client] egl: always render desktop texture as opaque
...
We ask for 32-bit colour buffer when creating the EGL context. On Wayland,
this sometimes give contexts with alpha channels, resulting in unwanted
transparency. So we clear the alpha channel in the desktop shader.
We also switch to using constant alpha for blending the splash, which
avoids more alpha issues.
2021-02-21 10:31:48 +11:00
Quantum
9f0b99dac0
[client] wayland: implement window creation for egl
...
This commit implements window creation and resize logic, allowing the desktop
to be drawn.
2021-02-21 10:31:48 +11:00
Geoffrey McRae
f4c1927f56
[client] ds: added new getFullscreen
operation
...
As the window manager may change our mode to full screen without our
request we must ask the ds backend for the current state when we want to
toggle the mode.
2021-02-21 10:31:48 +11:00
Geoffrey McRae
cfa9171465
[client] x11: don't report borders if in fullscreen mode
2021-02-21 10:31:48 +11:00
Geoffrey McRae
2eac3dcb56
[client] x11: implemented missing functionallity
2021-02-21 10:31:48 +11:00
Geoffrey McRae
2d1e3c8022
[client] ds: validate the ds before attempting to use it
2021-02-21 10:31:48 +11:00
Geoffrey McRae
f8ac860fde
[client] app: rearrange code to reflect the header
2021-02-21 10:31:48 +11:00
Geoffrey McRae
6f4a116942
[client] ds: re-order as SDL is now the fallback
2021-02-21 10:31:48 +11:00
Geoffrey McRae
ca5c3938e4
[client] all: move all SDL specific code into displayservers/sdl
2021-02-21 10:31:48 +11:00
Geoffrey McRae
7ff5da4d62
[client] refactor keybinds out of main.c
2021-02-21 10:31:48 +11:00
Geoffrey McRae
37b3a26b9c
[client] all: refactor keybind code & functions
2021-02-21 10:31:48 +11:00
Geoffrey McRae
e18f7d3365
[client] app: replace old SDL_Scancode with int
2021-02-21 10:31:48 +11:00
Geoffrey McRae
3d03699cc8
[client] all: move keybind implementation into app.c/h
2021-02-21 10:31:48 +11:00
Geoffrey McRae
9674421ce4
[client] x11: fix double initialization of event members
2021-02-21 10:31:48 +11:00
Geoffrey McRae
dbb18a6ecb
[client] x11/sdl: get the border dimensions from the backend
2021-02-21 10:31:48 +11:00
Geoffrey McRae
6b1e310343
[client] move remaining code in core.c
into the SDL backend
2021-02-21 10:31:48 +11:00
Geoffrey McRae
bf583290a4
[client/common] restructure project in prep for full SDL removal
2021-02-21 10:31:46 +11:00
Geoffrey McRae
6f1c19b3b0
[all] improve backtrace and debugging support
2021-02-21 10:30:57 +11:00
Quantum
2973319bff
[client] opengl: remove glu dependency
...
We only use gluOrtho2D, which is trivially replaced with glOrtho, and
gluErrorString which can be replaced with a small lookup table.
2021-02-20 12:44:32 +11:00
Quantum
ec921d7f39
[client] spice: correctly ungrab keyboard when grabKeyboardOnFocus=no
...
When input:grabKeyboardOnFocus=no, exiting capture mode should ungrab
the keyboard. Otherwise, focusing the window doesn't grab the keyboard,
but toggling capture mode would leave the keyboard stuck in a grabbed
state until defocused.
2021-02-09 20:06:27 +11:00
Tudor Brindus
637a7625d2
[client] wayland: allow EGL/OpenGL vsync to be set to on
...
This effectively reverts 4bceaf5
.
Upstream ticket: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4180
Commit 941c651
makes working around the hang in LG itself not as
annoying as before.
In the future, we can bypass this entire issue by implementing our own
swapchain and listening to frame callbacks ourselves.
2021-02-09 09:12:57 +11:00
Tudor Brindus
e6ebcec689
[client] spice: don't send zero deltas for Wayland input
...
While a compositor will never send us 0-delta motion events, they can
still end up as 0-deltas post-projection, consuming QEMU buffer space
for no reason.
This should help with mouse skipping issues.
2021-02-01 11:09:46 +11:00
Quantum
25e74301be
[client] wayland: fix copying rich text into guest
...
Before this, copying rich text ends up with a lot of funky behaviour,
for example:
* copying text from Discord shows up as HTML unless pasted into a text
editor first
* copying text from Firefox shows up as the single letter h
This commit fixes all the above issues.
Due to the change in logic, we now use the first text format offered
instead of the last, which is almost certainly the preferred form.
Doing this gets us proper Unicode support, or Unicode characters would
end up as escapes of the form \uXXXX (this is used in the fallback
forms for applications without UTF-8 support).
2021-01-30 16:55:57 +11:00
Geoffrey McRae
e951aaad2d
[client] spice: fix errant keyboard grab/ungrab behaviour
2021-01-30 12:01:20 +11:00
Quantum
4fbaf18c89
[client] update host log file path
2021-01-29 15:56:01 +11:00
Geoffrey McRae
05f2305fa0
[client] correct error in variable name from last commit
2021-01-28 09:04:52 +11:00
Geoffrey McRae
b76fedeb67
[client] all: don't trigger cursor redraws if the cursor is not visible
2021-01-28 08:58:59 +11:00
Geoffrey McRae
9e96156912
[client] egl: use eglGetPlatformDisplay(EXT) if possible
2021-01-25 16:04:33 +11:00
Geoffrey McRae
837858c214
[client] prevent lgInit
from resetting the run state
...
If the renderer fails to start it sets the run state to stopped, having
lgInit where it was causes this to be reset to running triggering
invalid usage of g_state.lgmp.
2021-01-25 15:25:52 +11:00
Tudor Brindus
941c651fad
[client] unconditionally quit on second SIGINT
...
Under some circumstances, Looking Glass can hang when SIGINT'd, for
instance, if it's stuck waiting on spice I/O that won't complete because
the guest is misbehaving.
This commit provides an escape hatch for such cases, so one doesn't have
to reach for `kill -9 $(pidof looking-glass-client)`.
2021-01-25 09:39:35 +11:00
Geoffrey McRae
8caf951c41
[client] x11: don't attempt to grab the pointer on window resize
2021-01-25 09:25:01 +11:00
Geoffrey McRae
ef54e1be7f
[client] x11: add error checking around XIGrabDevice
2021-01-25 06:52:23 +11:00
Geoffrey McRae
4c1893fe20
[all] fix numerous memory leaks at application shutdown
2021-01-24 21:47:53 +11:00
Geoffrey McRae
086f73721d
[client] egl: remove accidental commit
2021-01-24 19:19:43 +11:00
Geoffrey McRae
202739c5be
[client] egl: better debug output for EGL errors
2021-01-24 13:17:11 +11:00
Geoffrey McRae
88b15cb3fe
[client] egl: nit, fix case of function name
2021-01-24 12:18:56 +11:00
Geoffrey McRae
6990d7f7e3
[client] egl: commit missed files for the last changeset
2021-01-24 12:16:39 +11:00
Geoffrey McRae
9941a4bb83
[client] egl: runtime detect support for glEGLImageTargetTexture2DOES
2021-01-24 12:06:10 +11:00
Quantum
908aa84599
[client] wayland: use acceleration in capture mode unless rawMouse
...
We are forced to use accelerated movement in regular mode as that is how the
host machine cursor moves and we want the cursors to line up (since Wayland
cannot do warps). To avoid a change in sensitivity when toggling capture
mode on/off, we should use accelerated deltas for capture mode as well,
unless the user explicitly asks for raw input with input:rawMouse.
2021-01-23 20:18:20 +11:00
Geoffrey McRae
185c7764ba
[client] spice: always show the pointer if using input:captureOnly
2021-01-21 17:36:22 +11:00
Geoffrey McRae
4113294d30
[client] spice: fix failure to ungrab the kb with captureOnly
2021-01-21 17:32:44 +11:00
Geoffrey McRae
aa92a7a90d
[client] app: fix error: ‘dataSize’ may be used uninitialized
(take 2)
2021-01-21 17:25:53 +11:00
Geoffrey McRae
c83243f22c
[client] app: fix error: ‘dataSize’ may be used uninitialized
2021-01-21 17:21:24 +11:00
Geoffrey McRae
23e883f60f
Revert "[client] sdl: move SDL specific screensaver inhibit"
...
This reverts commit afb0146d33
.
Additional handling is required to implement this properly, postpone
this for Beta 4
2021-01-21 15:58:37 +11:00
Geoffrey McRae
dcd0cb7d8e
[client] spice: release the mouse if the host stops
2021-01-21 15:39:15 +11:00
Geoffrey McRae
29ea8ecf6b
[client] app: if spice is not in use, hide the local cursor ( fixes #415 )
2021-01-21 14:17:31 +11:00
Geoffrey McRae
afb0146d33
[client] sdl: move SDL specific screensaver inhibit out of main.c
2021-01-21 14:03:05 +11:00
Quantum
3385438095
[client] wm: use correct logic for screensaver inhibition
...
Namely, we should inhibitIdle if noScreensaver is true, not the other way
around.
2021-01-21 12:14:38 +11:00
Quantum
6077dcc123
[client] spice/wayland: fix jitter when moving the cursor slowly
...
It does not make sense to accumulate fractional error in non-capture mode
as you know exactly where the cursor is supposed to be, at least on Wayland.
On Wayland, we base movements on the current guest position and desired
target position, and the accumulated errors only skew our movements.
2021-01-20 22:54:08 +11:00
Geoffrey McRae
e758f88519
[client] spice: fix failure to align and grab the pointer
2021-01-20 22:45:48 +11:00
Geoffrey McRae
3bccd9c45e
[client] spice: input:captureOnly shouldn't capture the pointer at start
2021-01-20 22:16:03 +11:00
Geoffrey McRae
947ba9bfe3
[client] spice: fix input:captureOnly support
2021-01-20 22:12:39 +11:00
Geoffrey McRae
4ca4fd35ad
[client] doc: added win:rotate
and keybind to README.md
2021-01-20 15:37:23 +11:00
Geoffrey McRae
8fa2b5f368
[client] config: make the help text for winRotate more descriptive
2021-01-20 15:35:13 +11:00
Geoffrey McRae
8cb0cbb91d
[client] doc: update README.md with new libraries and backend config
2021-01-20 15:33:56 +11:00
Geoffrey McRae
d6f39d66bf
[client] x11: xi
is now a required library for the x11
backend
2021-01-20 15:33:34 +11:00
Geoffrey McRae
ab79dae0b8
[client] cmake: fix typo in cmake configuration
2021-01-20 15:33:10 +11:00
Geoffrey McRae
ee8c883201
[client] x11: implement screensaver (un)inhibit
2021-01-20 15:24:10 +11:00
Geoffrey McRae
d1043e590a
[client] x11: register for absolute motion events while grabbed
2021-01-20 05:51:18 +11:00
Geoffrey McRae
5789a7efc0
[client] x11: fix failure to process the correct focus events
2021-01-20 05:41:33 +11:00
Geoffrey McRae
f883c630f6
[client] spice: set inView false if the focus is lost
...
Failure to do this results in loss of input on X11 as we need to be sure
the cursor is ungrabbed.
2021-01-20 05:07:55 +11:00
Geoffrey McRae
ac3333c0d2
[client] x11: switch to using XInput2 for all events and warp
...
On platforms like KDE, mixing X core events with XInput2 events causes
issues, so just switch entirely over to XInput2.
2021-01-20 04:53:43 +11:00
Geoffrey McRae
da65c47245
[client] spice: fix transposed cursor scale calculations
2021-01-20 04:53:43 +11:00
Xiretza
31ea93dd0d
[client] Fix compiler warnings about potentially uninitialized variables
...
Build failed with _FORTIFY_SOURCE enabled because the compiler couldn't
ensure the switch statements didn't hit the default arm and thus wouldn't
define the variables. Adding a statically failing assert makes sure that
all code paths either define the variables or fail early.
$ cd client
$ env CFLAGS='-O1 -D_FORTIFY_SOURCE=1' cmake -B build/
$ make -C build
[...]
client/renderers/EGL/egl.c: In function ‘egl_calc_mouse_size’:
client/renderers/EGL/egl.c:299:36: error: ‘h’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
299 | (this->mouseHeight * (1.0f / h)) * this->scaleY
| ~~~~~~^~~~
2021-01-20 03:05:30 +11:00
Geoffrey McRae
6d162cf92d
[client] spice: remove useless check, the displayserver should do this
2021-01-20 01:34:52 +11:00
Geoffrey McRae
8f07744c98
[client] don't hide the cursor unconditionally at startup
2021-01-20 01:27:38 +11:00
Geoffrey McRae
dacc573650
[client] spice: align the guest pointer to local when entering the view
2021-01-20 01:24:31 +11:00
Geoffrey McRae
555891face
[client] x11: filter out grab/ungrab focus/leave events
2021-01-20 01:21:19 +11:00
Geoffrey McRae
8e604667f9
[client] fix regression causing failure to warp when exiting the window
2021-01-20 00:52:33 +11:00
Geoffrey McRae
3774d2bfe9
[client] realign the pointer when input is re-enabled
2021-01-20 00:30:04 +11:00
Geoffrey McRae
31eafee468
[client] always show the cursor when not using spice ( fixes #409 )
2021-01-20 00:28:27 +11:00
Geoffrey McRae
2bfcfa36df
[client] all: fix regression with input disable toggle
2021-01-20 00:23:24 +11:00
Geoffrey McRae
819562d906
[client] fix keybind regression for EGL
2021-01-19 21:12:20 +11:00
Geoffrey McRae
0c8ce9daba
[client] x11: filter out duplicate button press events
2021-01-19 21:06:30 +11:00
Geoffrey McRae
c667322f25
[client] x11: cosmetic, rename device
to raw
for raw events
2021-01-19 20:47:25 +11:00
Geoffrey McRae
07c13a9d43
[client] x11: fix regression, raw event's dont give us the cursor pos
2021-01-19 20:46:12 +11:00
Geoffrey McRae
0bd1bb5075
[client] x11: removed left behind ifdef for XINPUT
2021-01-19 20:37:15 +11:00
Geoffrey McRae
f9faa0542b
[client] x11: use raw keyboard and mouse button press events
2021-01-19 20:36:43 +11:00
Geoffrey McRae
b87004c597
[client] app: ignore resize events that don't change the size
2021-01-19 20:15:12 +11:00
Quantum
2f11024db8
[client] displayserver: move screensaver handling into displayservers
...
This also makes Wayland idle inhibition respect noScreensaver setting.
2021-01-19 19:58:11 +11:00
Tudor Brindus
44a949f5c6
[client] wayland: inhibit idle while Looking Glass has keyboard focus
2021-01-19 07:03:50 +11:00
Tudor Brindus
bf5602b062
[cmake] wayland: build idle-inhibit-unstable-v1 header
2021-01-19 07:03:50 +11:00
Geoffrey McRae
6005006dd4
[client] dont show the pointer at launch unless it really should be
2021-01-19 06:00:59 +11:00
Geoffrey McRae
b2ac2980d5
[client] don't attempt to align to the guest with invalid pos data
2021-01-19 05:56:40 +11:00
Geoffrey McRae
1da24af6ee
[client] mouse: do not warp the cursor if it's outside the window
2021-01-19 05:38:25 +11:00
Geoffrey McRae
16f88a5285
[client] x11: don't care if SDL has XInput support anymore
...
As the X11 code is all self contained now and can be disabled at
configure time there is no longer any need to check if SDL has X11
XInput support.
2021-01-19 05:30:25 +11:00
Geoffrey McRae
85ee6737d5
[client] x11: implement keyboard event handing via xinput
2021-01-19 05:01:19 +11:00
Geoffrey McRae
dfe327301d
[client] spice: do not allow the inView to be set if mouse buttons held
...
When using the meta resize feautre the cursor is over the client window,
and as such the application continues to receive motion events. This
causes the window size to spaz out.
2021-01-19 04:40:31 +11:00
Geoffrey McRae
b92e547d91
[client] egl: force the use of nearest if needed
...
As the screen output rotation can be changed on the fly, if it has been
rotated to 90 or 270 the nearest flag will be incorrect, so we perform
this check here and override the provided value.
2021-01-19 04:26:59 +11:00
Geoffrey McRae
083deff489
[client] add keybind <ScrollLock+R> to rotate the display at runtime
2021-01-19 03:49:09 +11:00
Geoffrey McRae
0451ec237e
[client] spice: add not subtract to the rotation
2021-01-19 03:44:36 +11:00
Geoffrey McRae
d2458ff5d3
[client] retain backwards compatibillity for the capture keycode
...
This is an ugly hack for now that will get us over the line for Beta 3,
after which will need to be addressed and people will need to be
informed that their configured escape key will have changed.
2021-01-19 03:08:56 +11:00
Geoffrey McRae
8a1578230f
[client] all: properly support guest rotation
...
If the guest has it's output rotated (ie, landscape) we must rotate and
translate the pointer draw location, as well as all the translations of
cursor coordinate spaces based on the rotation, along with any local
rotations that may also be applied.
2021-01-19 02:54:56 +11:00
Geoffrey McRae
733bbf5153
[client] app: rename up,right,down,left rotation to 0,90,180,270
2021-01-19 02:53:47 +11:00
Quantum
ff1dc32efe
[client] spice/wayland: fix capture mode relative movement
...
It appears that Wayland pointer motion handlers are called even when relative
mouse mode is enabled. The events they generate break first-person games.
This commit disables those handlers when relative mouse is enabled.
2021-01-19 02:50:24 +11:00
Tudor Brindus
3935acf8a5
[client] add a SDL2 to uapi scancode table
2021-01-19 02:49:51 +11:00
Tudor Brindus
04908c3290
[client] add a uapi to PS/2 scancode table
...
This table was codegen'd from uapi/linux/input-event-codes.h and SDL's
events/scancodes_linux.h.
2021-01-19 02:49:51 +11:00
Tudor Brindus
7ae487057f
[client] wayland: implement key handling
2021-01-19 02:49:51 +11:00
Tudor Brindus
1f943fbbab
[client] use uapi keybindings internally
...
This commit moves SDL to uapi mapping to the SDL backend.
2021-01-19 02:49:51 +11:00
Tudor Brindus
36b70779b9
[client] app: move SDL key event handling out of main.c
2021-01-19 02:49:51 +11:00
Tudor Brindus
7c9b273f70
[client] app: add and expose app_handleKeyPress and app_handleKeyRelease
2021-01-19 02:49:51 +11:00
Geoffrey McRae
7355c196ba
[client] remove YUV420 support
2021-01-18 13:56:44 +11:00
Tudor Brindus
842bb59955
[client] wayland: do not fall back on SDL for scroll events
2021-01-17 17:58:32 +11:00
Tudor Brindus
e7132f757e
[client] wayland: do not fall back on SDL for button events
2021-01-17 17:03:24 +11:00
Quantum
d77da1ffc7
[client] wayland: clip desired guest cursor position
...
This avoids putting internal coordinates out of screen and causing cursor
spasms while dragging beyond the edge.
2021-01-17 16:31:33 +11:00
Geoffrey McRae
d22124519e
[client] mouse: dont leave the window if any mouse buttons are held
2021-01-17 15:13:45 +11:00
Geoffrey McRae
bab7eba7f0
[client] x11: prevent default mouse button/wheel handling by SDL
2021-01-17 14:38:31 +11:00
Geoffrey McRae
41a0cfe516
[client] app: move SDL mouse event handling out of main.c
2021-01-17 14:28:50 +11:00
Geoffrey McRae
a1069ddffa
[client] x11: use XInput for button events if possible
2021-01-17 14:24:42 +11:00
Geoffrey McRae
e106f2096b
[client] app: add and expose new app_handleButtonPress/Release methods
2021-01-17 14:23:51 +11:00
Geoffrey McRae
570abeda52
[client] app: move SDL window event handing out of main.c
2021-01-17 13:42:52 +11:00
Geoffrey McRae
31c42e3676
[client] app: add new app_handleCloseEvent for displayserver backends
2021-01-17 13:42:52 +11:00
Geoffrey McRae
89a6686349
[client] app: always call the default eventFilter for unhandled events
...
This change allows much of the SDL code to be moved into the SDL
displayserver implementation.
2021-01-17 13:42:52 +11:00
Geoffrey McRae
076ed1180f
[client] app: expose app_handleFocusEvent to displayservers
2021-01-17 13:42:52 +11:00
Geoffrey McRae
e23d536af5
[client] mouse: correct issues with cursor alignment on enter/exit/focus
2021-01-17 12:53:55 +11:00
Geoffrey McRae
76182bbeb8
[client] mouse: do not send mouse updates to the guest if not focused
2021-01-17 10:44:30 +11:00
Tudor Brindus
f86800cc3a
[client] mouse: process mouse up event even if not in view
...
Unless the corresponding mouse down event was on our surface, we should
not be receiving the mouse up.
This is always the case on Wayland. On some other platforms,
SDL_CaptureMouse can be used to obtain input that happens outside the
Looking Glass surface, but Looking Glass does not make use of that
function.
We may want to process a mouse up if the corresponding mouse down
initiated a drag (e.g., of a window) that was released slightly outside
of the Looking Glass surface. Previously, Looking Glass would ignore the
mouse up, and the guest would be confused into thinking the button had
never been released, not ending the drag.
2021-01-17 10:39:13 +11:00
Tudor Brindus
c69b86ab6e
[client] mouse: remove erroneous guard for setCursorInView
...
This seems like a leftover from ef678ba
, but the guard already exists in
setCursorInView itself.
2021-01-17 10:37:54 +11:00
Tudor Brindus
f1033fa4bb
[client] rename warpMouse to warpPointer
...
This is more truthful in what it does; the pointer may be backed by a
non-mouse device.
2021-01-17 10:19:22 +11:00
Tudor Brindus
d926319230
[client] wayland: be explicit about lack of warp support
...
Falling back on SDL is misleading, since SDL will bail out as well.
2021-01-17 10:19:22 +11:00
Tudor Brindus
56c80a15e6
[client] wayland: gracefully degrade when protocols are unsupported
...
zwp_relative_pointer_manager_v1 and zwp_pointer_constraints_v1 are
supported by GNOME/KDE/sway (and most other compositors), but they are
not a required part of the protocol.
Some users also run software in one-off nested compositors like cage[0]
for an extra layer of isolation; cage, at least, does not support
pointer captures.
This commit makes Looking Glass warn when an optional protocol is
unsupported, and fail if a required one is missing. Pointer grab paths
have a new guard against the aforementioned protocols being missing.
[0]: https://github.com/Hjdskes/cage
2021-01-17 10:19:22 +11:00
Geoffrey McRae
2a69a19dbd
[client] mouse: don't smooth large cursor jumps (ie, warp to align)
2021-01-17 03:12:02 +11:00
Geoffrey McRae
2738e822a4
[client] egl: remove external dependency on libdrm
2021-01-16 22:11:15 +11:00
Quantum
078a151e4f
[client] wayland: update absolute mouse position
...
We are actually getting mouse events directly from Wayland instead of going
through SDL, so we call app_updateCursorPos in pointer motion handlers and
swallow the SDL event.
Also removed parameters for app_handleMouseBasic as it relies exclusively on
absolute positions provided by app_updateCursorPos. Wayland does not give
you relative movements at all unless grabbed and passing absolute movements
is semantically incorrect.
Note that when the cursor is grabbed, movements are handled entirely through
relativePointerMotionHandler in wayland.c and does not go through
app_handleMouseBasic at all.
2021-01-16 21:40:24 +11:00
Geoffrey McRae
0690eacc9b
[client] mouse: prevent processing out of capture mode with invalid data
...
If the guest cursor state & position is unknown we can not rely on the
information to detect edge crossings. As such only allow cursor input if
LG is operating in capture mode.
2021-01-16 21:37:43 +11:00
Geoffrey McRae
165c2c3566
[client] mouse: grab the pointer when entering capture mode if needed
...
If the platform doesn't support warp then the move handler will never
grab the pointer, as such we need to unconditionally grab it in
`setGrabQuiet`
2021-01-16 21:32:38 +11:00
Geoffrey McRae
bb37a880f0
[client] wayland: report that wayland has no warp support
2021-01-16 21:19:20 +11:00
Geoffrey McRae
701dfd5694
[client] mouse: do not grab the pointer if the platform has no warp
...
Platforms such as Wayland have no abillity to warp the cursor, as such
can not operate in an always relative mode. This property allows
platforms to report the lack of warp support and prevent LG from
grabbing the pointer.
2021-01-16 21:17:35 +11:00
Geoffrey McRae
cebc728a67
[client] mouse: centralize the cursor view state management
2021-01-16 21:01:15 +11:00
Geoffrey McRae
ca5fc80af5
[client] wayland: fix early return preventing signal being set
2021-01-16 20:45:29 +11:00
Geoffrey McRae
9f74bb785e
[client] wayland: move wayland early init code out of main.c
2021-01-16 20:41:13 +11:00
Geoffrey McRae
bad25c409c
[client] displayserver: add new earlyInit
to the interface
...
Some platforms such as Wayland need to set environment vairables before
SDL is initialized, as such this change detects the display server
before SDL has started and calls the new `earlyInit` method providing
the implementation an opportunity to set things up.
2021-01-16 20:41:13 +11:00
Geoffrey McRae
ef678bab1d
[client] wayland: move wayland specific mouse code out of main.c
2021-01-16 20:41:13 +11:00
Geoffrey McRae
a4a042e90d
[client] mouse: force the cursor to the in view state when capturing
...
When capture mode is set if the cursor is not already in the view area
we need to force it to the state it would be if it were in view as
capture mode overrides all.
2021-01-16 20:41:13 +11:00
Geoffrey McRae
f18f07deaf
[client] mouse: window enter should not enable drawing the cursor
...
The pointer may not yet be in the view area so we should defer drawing
it until the mouse move handler determines that it's inside the view
area and turn it on itself.
2021-01-16 20:41:13 +11:00
Geoffrey McRae
dc3d07302f
[client] mouse: stop setGrabQuiet
from grabbing/ungrabbing the pointer
...
As LG always operates in relitive mode, the actual pointer grab/ungrab
is managed by the move handler, as such setGrabQuiet should not alter
the grab/ungrab state of the local pointer.
2021-01-16 20:41:13 +11:00
Quantum
48f002992a
[client] wayland: fix mouse logic after refactor
...
Now correctly set inView to only be within the guest and not the letterboxed
areas. Also show the system cursor in the letterboxed area.
2021-01-16 20:41:13 +11:00
Geoffrey McRae
27a38294ea
[client] major restructure of platform specific code
2021-01-16 20:41:13 +11:00
Geoffrey McRae
cbeae46c0b
[client] egl: move rotation into the fragment shader
2021-01-15 13:13:39 +11:00
Geoffrey McRae
72c86d7125
[client] all: add screen rotation support win:rotate
...
Currently only supports EGL, if there is enough demand for OpenGL
support this can be added later.
Closes #231
2021-01-15 12:42:16 +11:00
Geoffrey McRae
c40a81ddf4
[client] egl: remove no longer used yuv shader
2021-01-15 12:42:16 +11:00
Geoffrey McRae
25d6d88adb
[client] minor nit: compare double to double const
2021-01-15 08:50:27 +11:00
Quantum
78cb65a6a4
[client] spice: correctly use fabs for floating point
...
The prototype for abs is int abs (int n), which implicitly casts floating
point values to integers. The correct function is fabs.
This commit allows the client to compile under clang.
2021-01-15 08:48:15 +11:00
Quantum
369c49cdcf
[client] render/opengl: remove braces so fallthrough comment is recognized
...
gcc -Wimplicit-fallthrough only detects comments if they are immediately
preceded before the next label. Braces stops it from recognizing the
fallthrough comment.
2021-01-15 08:06:56 +11:00
Quantum
5f20ee46a8
[client] spice: remove suprious const on function return type
...
const in the return type does nothing and triggers -Wignored-qualifiers.
2021-01-15 08:06:56 +11:00
Quantum
0495f5de26
[client] enable useful extra warnings
...
-Wno-sign-compare is used to suppress warnings related to comparing signed
values with unsigned ones. It's too pedantic.
-Wunused-parameter is also too pedantic, especially since all parameters
have to be named in C.
Otherwise, -Wextra lets us catch bugs, such as x < 0 for unsigned x.
On gcc, we pass -Wimplicit-fallthrough=2 so it will recognize our fall
through comment.
2021-01-15 08:06:56 +11:00
Tudor Brindus
5538a31f6b
[client] add support for compiling with UndefinedBehaviorSanitizer
2021-01-14 17:48:28 +11:00
Tudor Brindus
a46a3a2668
[all] use explicit void parameter lists
...
This makes it a compile-time error to call a function that semantically
takes no parameters with a nonzero number of arguments.
Previously, such code would still compile, but risk blowing up the stack
if a compiler chose to use something other than caller-cleanup calling
conventions.
2021-01-14 17:29:37 +11:00
Tudor Brindus
dc17492750
[client] clipboard/wayland: make DnD a no-op
...
Wayland requires us to set all listeners, even for events we don't care
about. Not doing so caused Looking Glass to abort when used as a drop
target.
2021-01-14 17:09:54 +11:00
Quantum
17691f889b
[client] clipboard/wayland: avoid writing back to guest clipboard
...
Copying rich text from the guest would be turned into plaintext on the client.
Prior to this change, this would be sent back to the guest, overwriting its
clipboard. This made it impossible to copy rich text inside the guest.
This commit detects such self-copies by checking if the receiver is the
current process, and rejecting it.
2021-01-14 10:41:32 +11:00
Quantum
02421ef269
[client] clipboard/wayland: fix null mimetype receive error
...
This prevents looking-glass-client from failing with an error message like:
error marshalling arguments for receive (signature sh): null value passed for arg 0
Error marshalling request: Invalid argument
2021-01-14 10:41:08 +11:00
Quantum
50c934db5a
[client] wm/wayland: correctly handle double keyboard grab
...
When input:grabKeyboardOnFocus is set (default), entering capture mode grabs
the keyboard a second time. This commit makes the second grab a no-op on
Wayland to avoid a crash.
2021-01-13 15:53:02 +11:00
Geoffrey McRae
c650690bcc
[client] wm: fix duplicate declaration of static struct
2021-01-13 14:00:25 +11:00
Tudor Brindus
fd009c6392
[client] wm/wayland: bypass SDL loop for pointer events
2021-01-13 13:59:00 +11:00
Tudor Brindus
96c10c2c2d
[client] clipboard/wayland: make use of boilerplate from wm.c
2021-01-13 13:39:32 +11:00
Tudor Brindus
2aa2ec31ef
[client] clipboard/wayland: address style nits
2021-01-13 13:39:32 +11:00
Tudor Brindus
bf223158d0
[client] clipboard: try each clipboard until one initializes
...
Previously, main.c would segfault at runtime if clipboards were disabled
via cmake flags, as the clipboards array would be empty but still
indexed during initialization.
Co-authored-by: Quantum <quantum2048@gmail.com>
2021-01-13 13:39:32 +11:00
Tudor Brindus
2627381021
[client] clipboard/wayland: ignore SIGPIPE from clients that hang up
...
Otherwise, a badly-behaving client causes Looking Glass to receive a
SIGPIPE during Wayland copy operations. Handle EPIPE at call-sites
instead.
Co-authored-by: Quantum <quantum2048@gmail.com>
2021-01-13 13:39:32 +11:00
Tudor Brindus
48941cb9c4
[client] clipboard/wayland: implement better text mimetype heuristic
...
This roughly matches the heuristic that wl-copy uses to detect text.
2021-01-13 13:39:32 +11:00
Tudor Brindus
fb7ee16f7b
[client] clipboard/wayland: support keyboard capability hotplug
2021-01-13 13:39:32 +11:00
Tudor Brindus
c73d50f56a
[client] clipboard/wayland: implement host-to-VM transfers
...
Co-authored-by: Quantum <quantum2048@gmail.com>
2021-01-13 13:39:32 +11:00
Tudor Brindus
2bfd066833
[client] clipboard/wayland: implement VM-to-host image copy
...
Co-authored-by: Quantum <quantum2048@gmail.com>
2021-01-13 13:39:32 +11:00
Tudor Brindus
c58f33f5ab
[client] clipboard/wayland: implement VM-to-host text copy
...
Co-authored-by: Quantum <quantum2048@gmail.com>
2021-01-13 13:39:32 +11:00
Tudor Brindus
a205515d91
[client] clipboard/wayland: implement a no-op Wayland clipboard
...
Build scaffolding only; implementation in later commits.
Co-authored-by: Quantum <quantum2048@gmail.com>
2021-01-13 13:39:32 +11:00
Quantum
8f4e0f6b50
[client] spice/wayland: ignore mouse moves when dpiScale is unknown
...
This prevents division by zero and sending invalid information to spice.
2021-01-13 13:39:10 +11:00
Quantum
95205ca967
[client] spice/wayland: use correct coordinate space
...
This will now correctly respect the cursor hotspot.
2021-01-13 13:39:10 +11:00
Quantum
ab96f77d9e
[client] wm/wayland: generate protocol files into the build dir
...
This avoids polluting the source tree.
2021-01-12 16:00:12 +11:00
Quantum
1f01eec3a2
[client] spice/wayland: correctly update guest cursor location
2021-01-12 15:59:49 +11:00
Quantum
24a4de6d65
[client] wm/wayload: implement keyboard grabbing
2021-01-12 15:26:42 +11:00
Geoffrey McRae
b58176fcdb
[client] removed last remnents of the decoders & parsers
2021-01-12 12:42:06 +11:00
Tudor Brindus
c21f502414
[client] wm/wayland: implement grab mode for capture
2021-01-12 12:36:21 +11:00
Tudor Brindus
1040a7c168
[client] wm/wayland: don't grab keyboard
...
This is unimplemented for Wayland, and only has the effect of confining
the mouse.
2021-01-12 12:36:21 +11:00
Tudor Brindus
a97332025c
[cmake] add option to build Wayland headers
2021-01-12 12:36:21 +11:00
Geoffrey McRae
3a29d1cf03
[client] spice: zero the error accumulators when switching grab modes
2021-01-12 11:49:27 +11:00
Geoffrey McRae
8365419262
[client] spice: use modf in cursorToInt
for fractional tracking
2021-01-12 11:48:29 +11:00
Quantum
78bd41716a
[client] spice: use simple custom Wayland mouse logic
...
The normal logic does not work due to Wayland not supporting mouse warp.
We use a simple logic that works for the desktop with 1:1 mouse patch and
require capture mode for all other cases.
2021-01-11 20:57:13 +11:00
Quantum
790c2b39ad
[client] spice: set absolute position and focus state on Wayland
2021-01-11 20:57:13 +11:00
Geoffrey McRae
d68d82e5f7
[client] no need to set the hint here anymore as it's set in wm.c now
2021-01-11 00:26:37 +11:00
Tudor Brindus
ceab5f597b
[client] wm: specify SDL_FALSE to SDL_SetWindowGrab in wmUngrabPointer
2021-01-11 00:21:23 +11:00
Geoffrey McRae
fc0d82d490
[client] wm: added new platform agnostic wmWarpMouse
2021-01-10 15:47:03 +11:00
Geoffrey McRae
8466e57468
[client] remove grab/ungrab stubs
2021-01-10 15:33:29 +11:00
Geoffrey McRae
76ed75f871
[client] spice: create and use platform agnostic grab/ungrab methods
2021-01-10 15:26:33 +11:00
Tudor Brindus
8982493239
[client] clipboard: fix heap-buffer overflow in clipboardRequest
...
=================================================================
==7680==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000ec010 at pc 0x5622fcf9f386 bp 0x7f36084ff680 sp 0x7f36084ff678
WRITE of size 4 at 0x6020000ec010 thread T1
#0 0x5622fcf9f385 in clipboardRequest /code/LookingGlass/client/src/main.c:707
#1 0x5622fd0036c9 in wayland_cb_notice /code/LookingGlass/client/clipboards/Wayland/src/wayland.c:521
#2 0x5622fcf9f4dc in spiceClipboardNotice /code/LookingGlass/client/src/main.c:724
#3 0x5622fcfc4d59 in spice_agent_process /code/LookingGlass/repos/PureSpice/src/spice.c:1106
#4 0x5622fcfc16d6 in spice_on_main_channel_read /code/LookingGlass/repos/PureSpice/src/spice.c:655
#5 0x5622fcfbee4f in spice_process /code/LookingGlass/repos/PureSpice/src/spice.c:361
#6 0x5622fcf9e3a2 in spiceThread /code/LookingGlass/client/src/main.c:598
#7 0x5622fd006b5e in threadWrapper /code/LookingGlass/common/src/platform/linux/thread.c:39
#8 0x7f3614b2bf26 in start_thread /build/glibc-WZtAaN/glibc-2.30/nptl/pthread_create.c:479
#9 0x7f3614a4c2ee in __clone (/lib/x86_64-linux-gnu/libc.so.6+0xfd2ee)
0x6020000ec011 is located 0 bytes to the right of 1-byte region [0x6020000ec010,0x6020000ec011)
allocated by thread T1 here:
#0 0x7f36156f9628 in malloc (/lib/x86_64-linux-gnu/libasan.so.5+0x107628)
#1 0x5622fcf9f33f in clipboardRequest /code/LookingGlass/client/src/main.c:705
#2 0x5622fd0036c9 in wayland_cb_notice /code/LookingGlass/client/clipboards/Wayland/src/wayland.c:521
#3 0x5622fcf9f4dc in spiceClipboardNotice /code/LookingGlass/client/src/main.c:724
#4 0x5622fcfc4d59 in spice_agent_process /code/LookingGlass/repos/PureSpice/src/spice.c:1106
#5 0x5622fcfc16d6 in spice_on_main_channel_read /code/LookingGlass/repos/PureSpice/src/spice.c:655
#6 0x5622fcfbee4f in spice_process /code/LookingGlass/repos/PureSpice/src/spice.c:361
#7 0x5622fcf9e3a2 in spiceThread /code/LookingGlass/client/src/main.c:598
#8 0x5622fd006b5e in threadWrapper /code/LookingGlass/common/src/platform/linux/thread.c:39
#9 0x7f3614b2bf26 in start_thread /build/glibc-WZtAaN/glibc-2.30/nptl/pthread_create.c:479
Thread T1 created by T0 here:
#0 0x7f361562b9b2 in pthread_create (/lib/x86_64-linux-gnu/libasan.so.5+0x399b2)
#1 0x5622fd006cd0 in lgCreateThread /code/LookingGlass/common/src/platform/linux/thread.c:50
#2 0x5622fcfa5a7d in lg_run /code/LookingGlass/client/src/main.c:1615
#3 0x5622fcface28 in main /code/LookingGlass/client/src/main.c:2035
#4 0x7f3614975e0a in __libc_start_main ../csu/libc-start.c:308
SUMMARY: AddressSanitizer: heap-buffer-overflow /code/LookingGlass/client/src/main.c:707 in clipboardRequest
Shadow bytes around the buggy address:
0x0c04800157b0: fa fa 00 00 fa fa fd fa fa fa fd fa fa fa fd fd
0x0c04800157c0: fa fa fd fd fa fa fd fa fa fa 00 fa fa fa 00 fa
0x0c04800157d0: fa fa 00 fa fa fa fd fa fa fa fd fd fa fa fa fa
0x0c04800157e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c04800157f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c0480015800: fa fa[01]fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0480015810: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0480015820: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0480015830: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0480015840: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0480015850: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==7680==ABORTING
2021-01-10 14:52:58 +11:00
Quantum
4051cc6f93
[client] spice: fix cursor position mismatch with UI scaling
2021-01-10 13:51:20 +11:00
Netboy3
1727c7726b
[client] fix screensaver enable
...
The hint "SDL_HINT_VIDEO_ALLOW_SCREENSAVER" only works if set
before SDL_Init(). Move it to the proper location.
2021-01-10 13:43:57 +11:00
Quantum
0b890ed1ac
[client] add support for compiling with AddressSanitizer
2021-01-10 13:42:58 +11:00
Geoffrey McRae
fa1deafd58
Revert "[client] spice: better x11 grab/ungrab behaviour"
...
This reverts commit 18f9d936c6
.
2021-01-10 01:00:40 +11:00
Geoffrey McRae
176cc394d1
[client] don't show capture message at startup unless it's on
2021-01-10 00:56:34 +11:00
Geoffrey McRae
18f9d936c6
[client] spice: better x11 grab/ungrab behaviour
2021-01-10 00:55:31 +11:00
Geoffrey McRae
4334912e01
[client] egl: actually set the dma
texture member
2021-01-09 22:16:40 +11:00
Geoffrey McRae
19db67cfe5
[client] egl: detect the NVIDIA driver and disable DMA support
...
DMA suport for NVIDIA is advertised as available by the presense of the
extension `EGL_EXT_image_dma_buf_import`, however it is completely
broken. Until this is fixed refuse to use DMA support even if VM->VM
support is possible.
See: https://forums.developer.nvidia.com/t/egl-ext-image-dma-buf-import-broken-egl-bad-alloc-with-tons-of-free-ram/165552
2021-01-09 21:25:41 +11:00
Geoffrey McRae
21ba14f629
[client] spice: fix loss of click/focus on resize
2021-01-09 18:41:02 +11:00
Quantum
c9f41ea69e
[client] fix ignoreQuit on Wayland
...
On Wayland, SDL_WINDOWEVENT_CLOSE is sent even when exiting with keyboard
shortcuts. This meant that the client is still closed even with -Q.
We now swallow SDL_WINDOWEVENT_CLOSE if the cursor is inside the VM. This
should prevent keyboard shortcuts from closing the client, while still
allowing the window to be closed by clicking X with the mouse per #138 .
2021-01-09 18:28:43 +11:00
Geoffrey McRae
f47c8cb806
[client] add input:captureOnly
to disable input when not captured
2021-01-09 18:01:08 +11:00
Geoffrey McRae
5e9cfb9033
[client] updated README with new option description
2021-01-09 14:56:28 +11:00
Geoffrey McRae
318759f54d
[client] spice: allow mouse smoothing in capture but only if not RAW
2021-01-09 14:55:20 +11:00
Geoffrey McRae
1a4ac4c109
[client] updated README with new options
2021-01-09 14:41:48 +11:00
Geoffrey McRae
579be87597
[client] spice: added basic mouse smoothing for non-capture mode
...
Enabled by default, can be disabled with `input:mouseSmoothing`
2021-01-09 14:39:48 +11:00
Geoffrey McRae
ce96c77098
[client] spice: fixed grabKeyboardOnFocus regression
2021-01-08 23:15:48 +11:00
Geoffrey McRae
1c016ac0cd
[client] cursor: ensure cursor is rendered at init and aligned
2021-01-08 23:12:15 +11:00
Geoffrey McRae
86ca1bbbd6
[client] fix issues with cursor not always showing
2021-01-08 21:46:34 +11:00
Geoffrey McRae
3ac178a305
[client] spice: when in autoCapture limit the exit delta
...
Rapid movements in games can cause large detas that may cause the client
to allow the mouse to exit when this is not desired. This change
attempts to limit this by ignoring movements large movements when using
this mode.
2021-01-08 21:00:38 +11:00
Geoffrey McRae
40c3c38681
[client] refactor struct CursorState
to use struct DoublePoint
2021-01-08 20:49:20 +11:00
Geoffrey McRae
d2a4f8f346
[client] spice: dont ignore input that doesn't exit the window
2021-01-08 20:45:11 +11:00
Geoffrey McRae
59ea957d0d
[client] spice: don't grab the keyboard input unless we are focused
2021-01-08 20:26:32 +11:00
Geoffrey McRae
f352463d19
[client] spice: obey input:grabKeyboard
2021-01-08 20:13:41 +11:00
Geoffrey McRae
2789e73296
[client] spice: added new input:autoCapture
mode
...
This new mode if enabled (disabled by default) will cause the client to
attempt to hold onto the mouse when a title/game has it captured in the
guest. This is best effort and is not a replacement for full capture
mode.
2021-01-08 19:41:10 +11:00
Geoffrey McRae
6c8eba5f54
[client] spice: rewrite cursor handling code to take advantage of xinput
2021-01-08 15:37:40 +11:00
Geoffrey McRae
6030d2f189
[client] spice: filter out events that have < 2 axis
...
This prevents the mouse wheel from being treated as a cursor movement
2021-01-08 08:42:19 +11:00
Geoffrey McRae
2788394631
[client] all: use nanosleep instead of usleep for better precision
2021-01-08 08:27:12 +11:00
Geoffrey McRae
b0f2a2e39f
[client] spice: flag the cursor as inView unconditionally in capture
2021-01-08 03:27:03 +11:00
Geoffrey McRae
526572c9c9
[client] added new feature input:rawMouse for RAW mouse input
...
This option allows those that want it (gamers) to bypass all X11 mouse
acceleration and smoothing giving true 1:1 input to the guest while in
capture mode. Note: only supported for X11!
2021-01-08 03:12:42 +11:00
Geoffrey McRae
c99561c2ac
[client] spice: filter out duplicate X xinput events
2021-01-08 02:52:47 +11:00
Geoffrey McRae
62f59ce50d
[client] spice: don't use the raw data values for raw input
...
While using the RAW movement data sounds like a good idea the user
experience is quite bad as the mouse acceleration between host and guest
changes entering capture mode. This change alters this behaviour to use
the values after processing by the X server while retaining the simpler
code path for capture mode.
2021-01-08 02:04:30 +11:00
Geoffrey McRae
fb9cf6cfbc
[client] spice: apply sensitivity when in raw capture mode
2021-01-08 01:01:53 +11:00
Geoffrey McRae
974b409e91
[client] spice: x11 use xinput2 raw mode if possible for captured mouse
2021-01-08 00:44:15 +11:00
Geoffrey McRae
27a5a0811b
[client] spice: detect end of warp based on serial and x & y match
...
x11 serials are per server command, not per event, as such several
events may be processed by the server before a new event is received
causing the existing logic to fail. This changes the logic to check for
a larger serial instead of an exact match, and confirms the completion
of the warp by matching the target x/y.
2021-01-08 00:07:43 +11:00
Geoffrey McRae
d6bb518992
[client] spice: refactor g_cursor.last to g_cursor.pos
2021-01-07 02:16:55 +11:00
Geoffrey McRae
026251cfd9
[client] spice: fix reversed warp offset math and incorrect lookbehind
2021-01-07 02:05:47 +11:00
Geoffrey McRae
9b309db964
[client] spice: general improvements to cursor warp logic
...
Previously only up to two pending warp requests were possible, this
changes this so that additional warps can be queued if the cursor's
delta has moved more then 50px between each warp request.
The old code also had an error where it would null out any additional
movement since the warp was requested, but before it was processed, this
has been corrected.
2021-01-06 22:11:28 +11:00
Geoffrey McRae
271276a0a9
[client] ll: add new method ll_peek_tail
2021-01-06 22:11:10 +11:00
Geoffrey McRae
67022d664f
[client] spice: look for x11 warp completion events in key/btn events.
2021-01-06 20:17:52 +11:00
Geoffrey McRae
09e02b0613
[client] spice: prevent the cursor from escaping while captured
2021-01-06 08:35:13 +11:00
Geoffrey McRae
e70f585cfc
[client] spice: fix rounding issue causing entry->exit in the same event
...
This fixes an issue where the warp to center could break as the user
moves their cursor slowly over one of the bottom or right edges of the
screen while it's letterboxed.
2021-01-06 08:34:14 +11:00
Geoffrey McRae
d2d6ecd1c1
[client] spice: always flush XWarpPointer calls
2021-01-05 11:53:42 +11:00
Geoffrey McRae
6f99280fe3
[client] fix the warp logic to account for still pending warps to finish
...
As X11 is a server/client protocol, issuing commands such as
XWarpPointer do not happen immediately, as such we need to identify when
the warp is complete to know to null out the movement. To do this we
track each warp issued and look for it's completion in the event filter.
As some events come in via XInput2 we need to also make use of this
instead of just relying on MotionNotify, as such the support has been
implemented for XI_Motion events.
2021-01-05 11:47:17 +11:00
Geoffrey McRae
18e84c88a0
[client] ll: fix failure to properly track the list size
2021-01-05 11:42:26 +11:00
Geoffrey McRae
25d370ef22
[client] move new scaling variables into the CursorState struct
2021-01-05 09:48:30 +11:00
Geoffrey McRae
6c12990d26
[client] print out the client version too when there is a mismatch
2021-01-05 09:18:40 +11:00
Geoffrey McRae
12c83e82bb
[client] if the host version doesn't match wait for it to be upgraded
...
This change allows one to upgrade the host application using the LG
spice client instead of immediately terminating
2021-01-05 09:13:54 +11:00
Quantum
a172d79f66
spice: scale mouse input based on host DPI information
2021-01-05 09:03:29 +11:00
Geoffrey McRae
0bd5f0b2f1
[client/host] disable stack execution
2021-01-05 00:01:45 +11:00
Geoffrey McRae
523accf348
[client] spice: don't rely on the cursor position when it's not visible
...
DXGI DesktopDuplication does not send cursor positional updates when the
cursor is hidden, this happens when dragging a window around or when a
full screen application takes/hides the cursor. If this happened at the
same time as a resolution switch we don't know where the cursor really
is anymore.
2021-01-04 19:34:10 +11:00
Geoffrey McRae
53ae0ea9f1
[client] always update positional information when new format
2021-01-04 19:16:49 +11:00
Geoffrey McRae
4c31cef709
[client] doc: updated the readme with the latest options and bindings
2021-01-04 18:45:54 +11:00
Geoffrey McRae
8fd08cdd79
[client] spice: add option to ignore the windows key
...
If active this will prevent the client from sending keyboard events for
the windows key. The idea is to allow people to keep the windows key
bound to their WMs default action without causing the Windows start menu
to open
2021-01-04 18:22:39 +11:00
Geoffrey McRae
33b117e732
[client] spice: add new keybinds <ScrLck>+<LWin>, <ScrLck>+<RWin>
2021-01-04 18:07:09 +11:00
Geoffrey McRae
d775ed1ddb
[client] cosmetics
2021-01-04 15:52:10 +11:00
Tudor Brindus
d997f0d18c
[client] spice: properly handle high-precision scroll wheel input
...
Some setups (e.g. Wayland) have high precision scroll wheel input, such
that the y-delta on an event may exceed 1. In these cases, scrolling up
currently gets treated as scrolling down.
This commit changes the checks to use > 0 rather than == 1.
This is the approach suggested in
https://wiki.libsdl.org/SDL_MouseWheelEvent .
2021-01-04 15:51:52 +11:00
Quantum
78b1f64a61
[client] require 8 bit colour when creating OpenGL context
...
For some reason, if we don't ask for 8-bit, wayland will give a context with
lower bit depth, which looks terrible.
2021-01-04 15:51:36 +11:00
Tudor Brindus
1ca5e439c1
[client] egl: disable EGL when running on Wayland
...
This commit makes Looking Glass always use the OpenGL renderer when
running on Wayland. The EGL renderer is broken on Wayland and can't
reasonably be fixed until SDL is dropped entirely (as per
https://github.com/gnif/LookingGlass/issues/306 ).
Until that time, the OpenGL renderer provides a much better
Wayland-native experience.
2021-01-04 15:47:01 +11:00
Geoffrey McRae
3b0a98ede2
[client] spice: use xlib directly for warping
...
This change allows us to look for and filter out the warp completion
event as we can obtain and use the serial number of the warp request to
do so. This is far more elegant then the x/y match that we were doing
prior.
2021-01-04 15:40:23 +11:00
Geoffrey McRae
5d5b7b3d3c
[client] spice: just minor refactoring and commenting of code
2021-01-04 15:40:02 +11:00
Geoffrey McRae
3016f0c53e
[client] fix invalid method names
2021-01-04 14:44:33 +11:00
Tudor Brindus
4bceaf5505
[client] fix hang in eglSwapBuffers when exiting while not visible
...
eglSwapBuffers is allowed to block when called with a nonzero interval
parameter. On Wayland, Mesa will block until a frame callback arrives.
If an application is not visible, a compositor is free to not schedule
frame callbacks (in order to save CPU time rendering something that is
entirely invisible).
Currently, starting Looking Glass from a terminal, hiding it
entirely, and sending ^C will cause Looking Glass to hang joining the
render thread until the window is made visible again.
Calling eglDestroySurface is insufficient to unblock eglSwapBuffers, as
it attempts to grab the same underlying mutex.
Instead, this commit makes it so that we pass a 0 interval to
eglSwapBuffers when running on Wayland, such that we don't block waiting
for a frame callback. This is not entirely ideal as it *does* mean
Looking Glass submits buffers while hidden, but it seems better than
hanging on exit.
It also forces opengl:vsync and egl:vsync flags to off when running on
Wayland, as they are meaningless there.
2021-01-04 14:43:21 +11:00
Tudor Brindus
bc2f26b86d
[client] set default opengl:vsync=off
...
This makes it consistent with the EGL renderer.
2021-01-04 14:43:21 +11:00
Tudor Brindus
012ac950ac
[client] fix Wayland detection logic
...
$XDG_SESSION_TYPE is not guaranteed to be "wayland" when running on a
Wayland compositor. However, $WAYLAND_DISPLAY must always exist.
2021-01-04 14:43:21 +11:00
Geoffrey McRae
f7d4efe1c1
[client] spice: don't ignore all enter window events
2021-01-04 14:27:30 +11:00
Geoffrey McRae
1195a76368
[client] video: ensure that the renderer is always updated on resize
2021-01-04 13:40:03 +11:00
Geoffrey McRae
43e3999a95
[client] spice: also grab keyboard when in capture mode
2021-01-04 13:22:54 +11:00
Geoffrey McRae
bfc492421c
[client] spice: use XGrabPointer when in grab mode
...
People using high DPI mice and mouse accleration require this otherwise
the mouse can escape the window before we can warp it back.
2021-01-04 13:18:02 +11:00
Geoffrey McRae
2bc767430c
[client] spice: be more aggressive with window warp for high DPI mice
2021-01-04 12:59:14 +11:00
Geoffrey McRae
183d06f90c
[client] spice: fix borderless due to another SDL bug
...
SDL2 reports the window position as 0x0 when in borderless mode until
the window is moved or resized.
2021-01-04 12:28:35 +11:00
Geoffrey McRae
f7d7fbdb73
[client] rename state
to g_state
2021-01-04 12:06:54 +11:00
Geoffrey McRae
6878eee40a
[client] refactor cursor variables into their own global struct
2021-01-04 12:04:43 +11:00
Geoffrey McRae
c08aa8ece7
[client] spice: correct enter/leave event handling
2021-01-03 23:05:35 +11:00
Geoffrey McRae
5323d9833a
[client] spice: fix mouse warp on window focus
2021-01-03 22:59:23 +11:00
Geoffrey McRae
3b580af194
[client] spice: correct oob hotspot
2021-01-03 22:28:06 +11:00
Geoffrey McRae
29a6365107
[client] spice: correct rounding errors when reaching edges
2021-01-03 22:27:48 +11:00
Geoffrey McRae
9f495863cd
[client] spice: take into account the render rect for the new x/y pos
2021-01-03 17:42:58 +11:00
Geoffrey McRae
cd06fc251f
[client] spice: don't process cursor input when the local cursor is oob
2021-01-03 17:21:04 +11:00
Geoffrey McRae
029640f1b3
[client] spice: don't use SDLs capture mode under X11, we have our own
2021-01-03 16:31:10 +11:00
Geoffrey McRae
5064a4ecdd
[client] spice: take the cursor hotspot into account
2021-01-03 15:53:20 +11:00
Geoffrey McRae
bf1eba15d1
[client] egl: actually do front buffer rendering
2020-12-31 15:31:24 +11:00
Geoffrey McRae
1e4e582f67
[client] egl: only use a single texture but multiple PBOs
2020-12-31 14:18:38 +11:00
Geoffrey McRae
678ba0f484
[client] egl: check for EGLImage creation failure
2020-12-31 12:58:40 +11:00
Geoffrey McRae
2c2008c981
[client] egl: improve DMA logic
2020-12-31 12:58:22 +11:00
Geoffrey McRae
5802bfb5eb
[client] spice: calculate the entry point delta correctly
2020-12-06 11:07:05 +11:00
Geoffrey McRae
d61d7699e5
[client] spice: stop the cursor skipping the letterboxing
2020-12-06 09:58:50 +11:00
Geoffrey McRae
80d911f040
[client] spice: fix mouse exiting when the window is letterboxed/padded
2020-12-04 20:04:06 +11:00
Geoffrey McRae
1a8dfe1cc0
[client] spice: only check for a valid position if needed
2020-12-04 17:36:08 +11:00
Geoffrey McRae
c0a3b85580
[client] spice: don't disable warp when the future cursor pos is invalid
2020-12-04 17:32:28 +11:00
Geoffrey McRae
265b4544ef
[client] spice: adjust ordering to avoid dropping mouse input events
2020-12-04 01:40:29 +11:00
Geoffrey McRae
c5befbba0e
[client] spice: don't scale mouse if it's 1:1
2020-12-04 00:50:27 +11:00
Geoffrey McRae
3df23d6b73
[client] reworked the mouse tracking logic
2020-12-04 00:32:28 +11:00
Geoffrey McRae
e57f084c93
[client] added streaming clipboard support for large transfers
2020-12-03 12:01:51 +11:00
Geoffrey McRae
d700e19a32
[client] clipboard: correctly alert for large buffers
2020-12-03 02:35:40 +11:00
Geoffrey McRae
018dae691a
[client] remove left behind debug output
2020-12-03 02:03:47 +11:00
Geoffrey McRae
aaf449442a
[client] clipboard: refactor for readabillity
2020-12-03 01:58:05 +11:00
Geoffrey McRae
301ba45f0f
[client] don't grab keyboard if spice input is disabled
2020-12-01 10:03:20 +11:00
Geoffrey McRae
806ff934b2
[client] egl: detect if egl is even available
2020-11-29 21:43:28 +11:00
Geoffrey McRae
bbcaaccdcc
[client] added new option input:grabKeyboardOnFocus
2020-11-29 07:12:19 +11:00
Geoffrey McRae
dea7177d29
[client] added support for spice side/extra buttons
...
Note, QEMU must have support for these new buttons for this to have any
effect.
2020-11-28 14:59:21 +11:00
Geoffrey McRae
58dd352def
[client] set fullscreen after window creation to keep window dimensions
2020-11-28 10:19:17 +11:00
Geoffrey McRae
f36c674791
[client] always set the minimize on focus loss hint
2020-11-28 10:16:11 +11:00
Geoffrey McRae
4a823d0e4f
[client] grab the keyboard when the window has focus
2020-11-28 10:06:06 +11:00
jonpas
db51acdd8a
[client] add option to always show cursor
2020-11-16 06:48:57 +11:00
Geoffrey McRae
cd4dfd7252
[client] egl: cleanup/refactor of cursor texture code
2020-11-10 20:42:14 +11:00
Geoffrey McRae
12da2fc0b7
[client] fixed incorrect warpState
...
Credit to @Adam in Discord VFIO #looking-glass
2020-11-09 22:24:40 +11:00
Geoffrey McRae
36726bb349
[client] egl: fixed typo
2020-11-09 07:42:59 +11:00
Geoffrey McRae
dd7e0ea8c6
[client] egl: added colorblind support (egl:cbMode=0/1/2/3)
...
Based on http://www.daltonize.org/search/label/Daltonize
0 = Off
1 = Protanope
2 = Deuteranope
3 = Tritanope
2020-11-09 07:08:15 +11:00
Geoffrey McRae
ed95f8863d
[client] fix divide by zero fault with fpsMin disabled (set to 0)
2020-11-08 10:58:18 +11:00
Geoffrey McRae
4c14797319
[client] egl: no need to create textures when using DMA mode
2020-10-30 22:19:15 +11:00
Geoffrey McRae
42fef7a98d
[client] egl: remove deprecated YUV420 support
2020-10-30 19:31:48 +11:00
Geoffrey McRae
0badf2a84c
[all] move defines for LGMP_QUEUE_*_LEN into KVMFR.h
2020-10-30 18:48:41 +11:00
Geoffrey McRae
267fa6e389
[client] egl: select the correct fourcc type for dma mode
2020-10-30 11:55:47 +11:00
Geoffrey McRae
c8f740c34e
[client] fix usage of uninitialized time variable
2020-10-30 02:36:45 +11:00
Geoffrey McRae
4f9544d61d
[client] egl: added DMA texture support for direct upload
...
Note: This only works with the KVMFR kernel module in a VM->VM
configuration. If this causes issues it can be disabled with the new
option `app:allowDMA`
2020-10-30 02:36:45 +11:00
Geoffrey McRae
0bf73d862d
[client] added initial framework for dma buffer support
2020-10-30 02:36:45 +11:00
Ali Abdel-Qader
5081c3ea88
convert clipboard data type variable to Looking Glass enum before passing it to function
2020-10-29 13:46:14 +11:00
Ali Abdel-Qader
3284431785
change 'frameCount' to be atomic
2020-10-29 13:46:14 +11:00
Geoffrey McRae
a70858aea0
[client] reworked frame timing waits for better responsiveness
2020-10-26 18:09:45 +11:00
Geoffrey McRae
e02ccd7c6f
[client] fix transposed tsDiff arguments
2020-10-26 13:09:47 +11:00
Geoffrey McRae
0684ff401f
[client] fix race with call to on_restart
2020-10-14 19:40:20 +11:00
Geoffrey McRae
757a90a643
[client] add new keybind to toggle the video stream (ScrLck+V)
2020-10-14 19:32:21 +11:00
Geoffrey McRae
46df25bb80
[client] added new option win:dontUpscale
2020-10-12 23:27:33 +11:00
Geoffrey McRae
58ba76a27f
[client] seperate frame setup and data events
2020-10-12 19:43:29 +11:00
Geoffrey McRae
b2961c7939
[all] added new format version field to frame header
2020-10-12 18:52:37 +11:00
Geoffrey McRae
90d1ed64e4
[client] opengl: added RGBA16F support
2020-10-11 20:44:22 +11:00
Geoffrey McRae
919b77df71
[client] egl: fix RGBA16F support
2020-10-11 20:34:34 +11:00
Geoffrey McRae
98e0e5fc0b
[client] egl: correct invalid value for texture row length
2020-10-11 19:59:44 +11:00
Geoffrey McRae
8a9f004ff6
[host/client] fix invalid initialization of RGBA16F
2020-10-11 19:39:47 +11:00
Geoffrey McRae
9c6bd888fd
[host/client] added experimental RGBA16 float support (EGL only)
2020-10-11 19:22:31 +11:00
Jonathan Rubenstein
66df00cee2
Add option to skip splash screen fade out
2020-10-09 03:28:58 +11:00
Geoffrey McRae
a94d3734c2
[all] pass the project path to the version.cmake script
2020-10-09 02:51:28 +11:00
Geoffrey McRae
e6c88a4af3
[all] be smarter about getting the git version
2020-10-09 02:17:20 +11:00
Geoffrey McRae
8692e9af80
[client] don't hide the cursor when SPICE is disabled
...
Fixes #304
2020-08-21 15:40:22 +10:00
Geoffrey McRae
7d2b39058c
[client] ensure the cursor is updated when the window looses/gains focus
2020-08-20 16:05:55 +10:00
Geoffrey McRae
6927dbecd2
[client] added new input:mouseRedraw option
...
This new option, when enabled (the default) enables cursor movements to
trigger frame updates in the client, improving responsiveness at the
cost of increased FPS while the mouse is moving around.
2020-08-20 15:50:33 +10:00
Geoffrey McRae
f9b6dcc986
[client] only resync the timer if we got an early frame
...
This prevents a slow update (ie, 30ups) from pulling the refresh rate
below the minimum (ie, 60fps).
2020-08-20 15:18:45 +10:00
Geoffrey McRae
5c912e3c27
[client] spice: improve mouse syncronization with the host
2020-08-20 14:52:24 +10:00
Geoffrey McRae
7e362050f7
[all] update KVMFR to provide cursor hotspot information
...
This commit bumps the KVMFR protocol version as it adds additional
hotspot x & y fields to the KVMFRCursor struct. This corrects the issue
of invalid alignment of the local mouse when the shape has an offset
such as the 'I' beam.
2020-08-20 13:51:01 +10:00
Ash
10fbdeb294
update client/README.md: spice:captureOnStart from #278
2020-08-19 23:08:34 +10:00
Geoffrey McRae
c66a339bbc
[client] egl: ensure overflow occurs for state value checks
2020-08-15 22:39:10 +10:00
Geoffrey McRae
969effedde
[host] update information about PsExec now LG can run as a service
2020-08-13 11:41:16 +10:00
Geoffrey McRae
e3f97e384b
[client] rework the start/restart logic to use an enum
2020-08-11 15:14:58 +10:00
Geoffrey McRae
76e119f8ad
[client] egl: don't fade the splash when restarting
2020-08-11 14:54:48 +10:00
Geoffrey McRae
bfb12c74fb
[client] be quicker at detecting restart and quieter about it
2020-08-11 14:52:22 +10:00
Geoffrey McRae
fa50b7824c
[client] fix crash on shutdown while waiting for a restart
2020-08-11 14:45:43 +10:00
Geoffrey McRae
da8b2d0cec
[client] egl: properly wait for a new frame on restart
2020-08-11 14:45:08 +10:00
Geoffrey McRae
74649ddb96
[client] gracefully restart if the host application restarts
2020-08-11 14:30:44 +10:00
Geoffrey McRae
82e0b7b6ab
[doc] readme updated with PsExec information
2020-08-09 20:11:19 +10:00
Geoffrey McRae
3302d353cf
[client] always use spice mouse host mode
...
Since we only ever use offset movements as SPICE doesn't properly
support absolute x/y positional information without a virtual tablet
device (which breaks relative mode needed for capture), just always run
in this mode. This fixes an issue when the spice guest tools are
installed and the mouse fails to work when not captured.
2020-08-09 16:17:08 +10:00
Geoffrey McRae
1899d9f1da
[client] reset the frame time when we get a frame signal
...
This stops a duplicate frame rendering bug due to failure to discipline
based on the signal timing.
2020-08-09 15:55:12 +10:00
Geoffrey McRae
fb9b772db0
[client] we are getting the clock anyway, just reset the time
2020-08-09 15:54:45 +10:00
Geoffrey McRae
302b988524
[client] use atomics to track frame counts and avoid extra signals
2020-08-09 15:14:17 +10:00
Geoffrey McRae
06aee158de
[client] egl: make better use of atomics and fix modulus bug
2020-07-24 17:39:16 +10:00
Samuel Bowman
bd42445ea7
[client] add option to capture input on start
2020-07-17 08:39:32 +10:00
Geoffrey McRae
ede96fa486
[client] egl: don't map the texture until it's needed
...
The texture buffer may still be in use if we try to re-map it
immediately, instead only map when we need it mapped, and unmap
immediately after advancing the offset allowing the render thread to
continue while the unmap operation occurs
2020-05-30 16:50:27 +10:00
Geoffrey McRae
fcbdf7ba4f
[client] egl: fix non-streaming texture updates
2020-05-29 16:54:25 +10:00
Geoffrey McRae
e8c949c1e7
[client] egl: dont re-setup the fps texture on each update
2020-05-29 16:47:21 +10:00
Geoffrey McRae
28c93ef5ac
[client] egl: don't unmap/map all buffers for each frame
2020-05-29 15:48:59 +10:00
Geoffrey McRae
d7921c5d5f
[client] report the host version on mismatch if possible
2020-05-29 14:24:06 +10:00
Geoffrey McRae
6d296f2b44
[client] stop people running the client as root
2020-05-29 14:18:02 +10:00
Geoffrey McRae
553e2830bb
[client/host] share the host version with the client for diagnostics
2020-05-29 14:14:31 +10:00
Geoffrey McRae
08062e3fc3
[client] check for underflow when checking frame time
2020-05-22 22:02:44 +10:00
Geoffrey McRae
4441427943
[client] implemented better clock drift correction
2020-05-22 20:45:59 +10:00
Geoffrey McRae
f5da432d38
[client] put back the fps correction from drift/skew
2020-05-22 18:39:19 +10:00
Geoffrey McRae
60f665a65c
[client] more fps limiter fixes
2020-05-22 18:28:16 +10:00
Geoffrey McRae
9b6174793a
[client] revert cusror update render trigger
...
While it makes the mouse a bit nicer it causes frame skips during cursor
movement.
2020-05-22 18:16:48 +10:00
Geoffrey McRae
dedab38b99
[client] rename fpsLimit
to fpsMin
2020-05-22 18:15:17 +10:00
Geoffrey McRae
4580b18b04
[client] fix the fps limiter
2020-05-22 18:06:29 +10:00
Geoffrey McRae
88dad36449
[client] allow mouse movements to trigger render updates
...
Now EGL is lockless we can allow cursor updates to trigger frame updates
directly.
2020-05-22 18:00:18 +10:00
Geoffrey McRae
075c82b32c
[client] egl: fix context binding enabling a lock free implementation
2020-05-22 17:47:19 +10:00
Geoffrey McRae
ae2ffd0a28
[client] drop the default FPS target to 60 now that the fps is dynamic
2020-05-21 14:59:51 +10:00
Geoffrey McRae
26eea64689
[client] remove microstutter warning when using the fps display
...
This warning was added when it was thought to be the cause of the
microstutters, however this has been disproven with the latest batch of
changes.
2020-05-21 14:16:01 +10:00
Geoffrey McRae
c9ff1e1949
[client] egl: alter warning about low fps as it doesn't apply anymore
2020-05-21 14:09:51 +10:00
Geoffrey McRae
e31f38eadc
[client] allow frame updates to be triggered by a timed event
...
This is a major change to how the LG client performs it's updates. In
the past LG would operate a fixed FPS regardless of incoming update
speed and/or frequency. This change allows LG to dynamically increase
it's FPS in order to better sync with the guest as it's rate changes.
2020-05-21 13:41:59 +10:00
Geoffrey McRae
756b57400b
[client] egl: move context init to lock function
2020-05-21 11:55:35 +10:00
Geoffrey McRae
01bfd2e090
[client] egl: make better use of the second thread for streaming
2020-05-21 11:44:56 +10:00
Geoffrey McRae
240d0ff263
[client] add short delay to improve initial startup
2020-05-21 09:32:08 +10:00
Geoffrey McRae
3b47a4113f
[client/obs] update to use new LGMP init api
2020-05-21 09:28:41 +10:00
Geoffrey McRae
a6d6a49f82
[client] egl: use atomic members instead of locking the entire state
2020-05-21 08:20:30 +10:00
Geoffrey McRae
d899c26617
[client] egl: add low FPS warning when failing to keep up
2020-05-19 22:42:55 +10:00
Geoffrey McRae
73ba325072
[client] egl: reworked the streaming texture pipeline
2020-05-19 22:03:36 +10:00
Geoffrey McRae
06f8911ee1
[all] project cleanup
2020-05-19 11:06:39 +10:00
Geoffrey McRae
f96f0fecda
[client] egl: use proper atomics for pbo counting
2020-05-18 09:06:11 +10:00
Geoffrey McRae
18cc8d7cab
[client] fix host wait logic and print more useful help
2020-05-17 11:54:07 +10:00
Geoffrey McRae
b7ca3d7e37
[client] cleanup debug output
2020-05-17 11:25:27 +10:00
Geoffrey McRae
c4bf992c0c
[client/host] added enforcement of KVMFR versioning
2020-05-17 11:13:08 +10:00
feltcat
e7f088ef52
[client] egl: typo fix in info message
...
"Multsampling" to "Multisampling"
2020-04-24 19:01:42 +10:00
Geoffrey McRae
243efcd51a
[client] fix missing release_key_binds for mouse sensitivity bindings
2020-04-23 18:00:17 +10:00
feltcat
e3cbdd18a0
[client] add quit keybind
2020-04-23 17:57:58 +10:00
Geoffrey McRae
f6691a90c0
[client/obs] improve frambuffer_read functions to support copy pitch
...
Fixes #244
2020-04-14 13:27:07 +10:00
Mikko Rasa
ead09ed110
[client] opengl: render frame if config didn't change
2020-04-14 12:19:59 +10:00
Geoffrey McRae
75bc038144
[client] removed accidental debug commit
2020-04-12 13:48:59 +10:00
Geoffrey McRae
7018a3e737
[c-host] dxgi: close the desktop on deinit
2020-04-12 13:46:56 +10:00
Geoffrey McRae
b5f4c639fd
[client] provide better mouse tracking when exiting/entering the window
2020-04-07 14:54:38 +10:00
fishery
94a35a6558
[client] fix buffer overflow in opengl_options
...
buffer overflow loading opengl_options
2020-04-02 00:17:19 +11:00
Geoffrey McRae
95f5962186
[client] update to properly disconnect from spice
2020-02-01 14:24:23 +11:00
Geoffrey McRae
0b7f422d5d
[client] moved spice into a seperate repository
2020-01-31 21:39:57 +11:00
Geoffrey McRae
939bb07603
[all] cleanup use of atomic locking and switch to C11 stdatomic
2020-01-29 19:06:09 +11:00
Geoffrey McRae
cc2c49644d
[spice] reworked to avoid locking requirements on the input channel
...
POSIX `send` is thread safe, to take advantage of this the code has been
changed to construct a contiguous buffer and perform the send in a
single operation preventing any risk of a race condition.
Only the main channel still requires an interlock as the VD agent
requires multiple sends to transmit a full buffer.
2020-01-29 18:53:33 +11:00
Geoffrey McRae
29f221d547
[spice] improve connection code to use a single buffer
2020-01-29 16:52:23 +11:00
Geoffrey McRae
c1fd6552d2
[client] fix hang when trying to terminate an unconnected client
2020-01-27 12:25:47 +11:00
Geoffrey McRae
7b11ab04c6
[client] always update the renderer cursor state
2020-01-27 02:11:21 +11:00
Geoffrey McRae
bced5f95ff
[all] make cursor visible a flag and send it seperate to position
2020-01-27 02:07:32 +11:00
Geoffrey McRae
dcc9625803
[client] updated to use new cursor state flags
2020-01-26 17:30:16 +11:00
Geoffrey McRae
4d0f019ad5
[spice] prepare spice for external usage
2020-01-19 06:51:21 +11:00
Geoffrey McRae
e6154e685f
[client] cosmetics
2020-01-19 06:49:56 +11:00
Geoffrey McRae
2c59b5f557
[client] added checking for invalid arguments to custom string options
2020-01-19 06:48:20 +11:00
Geoffrey McRae
4746c89227
[all] moved time and locking methods to the common library
2020-01-17 14:35:08 +11:00
Geoffrey McRae
278d851c7c
[egl] added fallback for platforms not supporting eglGetPlatformDisplay
2020-01-17 11:50:00 +11:00
Geoffrey McRae
406e22a681
[client] override new behaviour in SDL 2.0.15 and disable xinput2
...
xinput2 is used to get touch interface events with the side effect of
consuming MotionNotify events which we use because of SDL2's inability
to correctly track the window size. Since we are not that intertested in
touch for our usecase, we just turn the events off again.
2020-01-13 22:21:12 +11:00
Geoffrey McRae
17e05c6fd5
[all] expose the FrameBuffer struct for correct sizeof calculations
2020-01-13 19:30:49 +11:00
Geoffrey McRae
9846762991
[all] align the frame data to the page boundary
2020-01-13 19:17:09 +11:00
Geoffrey McRae
f82a164d75
[client] enable SDL_SYSWMEVENT on X11 to work around SDL2 bugs
2020-01-13 14:03:26 +11:00
Geoffrey McRae
e554635e48
[spice] turn on TCP_QUICKACK
...
https://assets.extrahop.com/whitepapers/TCP-Optimization-Guide-by-ExtraHop.pdf
2020-01-11 16:03:28 +11:00
Geoffrey McRae
5e915dd1ff
[client] don't send mouse click events when out of view
2020-01-11 13:11:12 +11:00
Geoffrey McRae
13f55011c0
[client] don't draw the cursor if it leaves the frame
2020-01-11 12:56:46 +11:00
Geoffrey McRae
05dc713dac
[client] more cursor tweaks for better integration with the WM
2020-01-11 06:03:16 +11:00
Geoffrey McRae
80f3c7934a
[client] more cursor tweaks and some cleanup
2020-01-11 05:22:12 +11:00
Geoffrey McRae
1341bf8fbd
[client] fix mouse acceleration when in capture mode
...
SDL2 really doesn't do this well, instead I have implemented our own
capture method that allows us to maintain better client/server cursor
sync.
2020-01-11 04:53:46 +11:00
Geoffrey McRae
5b163063c3
[client] improved sync with guest cursor position
2020-01-11 03:41:44 +11:00
Geoffrey McRae
e5178793b3
[client] don't fail on invalid magic at startup
2020-01-10 18:07:18 +11:00
Geoffrey McRae
bea7c94cae
[client/c-host] updated to use new LGMP naming conventions
2020-01-10 11:01:35 +11:00
Geoffrey McRae
6f551c770c
[client] handle pointer visibility properly
2020-01-09 21:18:35 +11:00
Geoffrey McRae
2d755a45e0
[client] added support for LGMP
2020-01-09 20:32:42 +11:00
Geoffrey McRae
9282ed19b2
[client] check for clock drift and correct for it
...
Fixes #224
2020-01-06 20:38:01 +11:00
Geoffrey McRae
45ee79014d
[common] added back support for shared memory files
2020-01-06 00:20:30 +11:00
Geoffrey McRae
127113a59b
[client] fixed strange resize effect due to loss of precision
2020-01-03 17:23:48 +11:00
Geoffrey McRae
49bf115c84
[client] fix issue with windowmanager forcing the window size (i3wm)
2020-01-03 16:51:24 +11:00
Geoffrey McRae
2196516e2b
[client] added new win:forceAspect
option
...
Fixes #225
2020-01-03 15:53:44 +11:00
Geoffrey McRae
899dbff7e9
[client] use the event data instead of calling SDL_GetWindowSize
2020-01-03 15:26:07 +11:00
Geoffrey McRae
4345d94d68
[client] update client to use the common ivshmem* methods
2020-01-03 15:17:14 +11:00
Geoffrey McRae
c5baf212c8
[client] switch from SDL_Cond to LGEvent
2020-01-03 00:09:07 +11:00
Geoffrey McRae
ba31c78412
[client] switch from SDL_Thread to lgThread
2020-01-02 23:59:06 +11:00
Jonathan (JJRcop) Rubenstein
491ffc3576
Fix client not building on void linux
...
Thanks to
SharkWipf#8539,
Aiber#4888,
and Hadet#6969 on the VFIO discord
2019-12-28 00:07:39 +11:00
Rikard Falkeborn
6530ca62da
[client] fix return value in spice_read_nl error path
...
Returning -1 from a function with bool as return argument is the same as
returning true. If the channel is not connected, return false instead to
indicate the error.
2019-12-18 08:55:27 +11:00
Geoffrey McRae
85d46ed2b0
[profile] added a tool to help profile the host capture perf
2019-12-14 16:20:17 +11:00
Andrew Sheldon
70110b4a5a
[client] Use eglGetPlatformDisplay() to fix surface creation
...
[Why]
Recent versions of Mesa may have trouble with surface creation, resulting in
errors like:
egl.c:428 | egl_render_startup | Failed to create EGL surface (eglError: 0x300b)
[How]
Replace eglGetDisplay() with eglGetPlatformDisplay(). Requires EGL 1.5, but should
be supported with any desktop driver released in the past few years.
2019-12-13 00:35:35 +11:00
Geoffrey McRae
a6f23f00b4
[client] opengl: handle configuration failure properly
2019-12-12 23:32:31 +11:00
Geoffrey McRae
30e3a43311
[client] opengl: fixed failure to render full frame
2019-12-12 23:04:58 +11:00
Geoffrey McRae
dce6aaefea
[client] fix rare race condition when renderer is not ready
2019-12-10 03:30:04 +11:00
thejavascriptman
4843a278ff
respect minimizeOnFocusLoss
2019-11-15 18:13:11 +11:00
Geoffrey McRae
0e7e918e2c
[client] cleanup and re-order startup/shutdown code
2019-10-26 12:03:10 +11:00
Geoffrey McRae
7d6e061ade
[client] properly shutdown on failure to connect to the spice server
2019-10-26 11:27:05 +11:00
Geoffrey McRae
66891aa536
[client] don't require wayland-egl, fixes #204
2019-10-26 11:23:04 +11:00
Geoffrey McRae
9377fdfc37
[all] bump KVMFR version due to incompatible changes
2019-10-14 17:19:19 +11:00
Geoffrey McRae
4c0ca1c8e7
[client] fix xor support for masked color cursors
...
fixes #200
2019-10-09 19:48:42 +11:00
Geoffrey McRae
bca54ab1f6
[client/host] added new asyncronous memory copy
...
This changes the method of the memory copy from the host application to
the guest. Instead of performing a full copy from the capture device
into shared memory, and then flagging the new frame, we instead set a
write pointer, flag the client that there is a new frame and then copy
in chunks of 1024 bytes until the entire frame is copied. The client
upon seeing the new frame flag begins to poll at high frequency the
write pointer and upon each update copies as much as it can into the
texture.
This should improve latency but also slightly increase CPU usage on the
client due to the high frequency polling.
2019-10-09 13:53:02 +11:00
Geoffrey McRae
6d2c464436
[client] egl: improved streaming texture syncronization
2019-08-30 12:09:05 +10:00
Geoffrey McRae
e93bd7a3bf
[client] fix shutdown race condition with the frame thread
2019-08-30 11:54:26 +10:00
Geoffrey McRae
da94075e7b
[client] egl: more verbose error on texture egl failures
2019-08-30 11:40:38 +10:00
Geoffrey McRae
69522495de
[client] fix invalid shutdown of renderer outside of it's thread
2019-08-30 11:36:28 +10:00
Geoffrey McRae
fce88fc72c
[EGL] add debug printf helper
2019-08-30 11:33:43 +10:00
Geoffrey McRae
163a2e5d0a
[client] fix failure to build due to broken symlink, fixes #173
2019-07-23 11:06:51 +10:00
Geoffrey McRae
b979752989
[client] added missing include
2019-07-15 18:30:39 +10:00
orcephrye
8ad2d5f949
[client] autodetect monitor refresh rate for fps limit
2019-07-10 05:04:29 +10:00
Rokas Kupstys
745ba66119
Implement option to disable minimizing window on focus loss. Default behavior is not changed - not configuring these options unfocused window is minimized.
...
* Added config entry win:minimizeOnFocusLoss (default true).
2019-07-09 21:57:47 +10:00
Geoffrey McRae
4cf6dec592
[all] allow disable of backtrace support during build
2019-06-19 09:13:03 +10:00
Geoffrey McRae
d7fa0aeff9
[client] fix typo in SDL_VIDEODRIVER from prior patch, whoops :)
2019-06-19 09:03:15 +10:00
Geoffrey McRae
2def6346e6
[client] don't override SDL_VIDEODRIVER if it is already set
2019-06-19 09:01:28 +10:00
Geoffrey McRae
607539a2af
[client] improve streaming texture performance
2019-06-13 08:54:51 +10:00
Geoffrey McRae
2b4f8091f9
[client] README.md cosmetics
2019-05-31 16:45:55 +10:00
Geoffrey McRae
113da121e9
[client] updated documentation for new keybinds
2019-05-31 16:44:08 +10:00
Geoffrey McRae
dd7413f973
[client] added keybinds to send Ctrl+Alt+Fn
...
Fixes #165
2019-05-31 16:39:55 +10:00
Geoffrey McRae
97024041f3
[client] allow the screensaver to run
2019-05-30 20:54:39 +10:00
Geoffrey McRae
22238c3200
[client] fix invalid access on early termination
2019-05-30 20:24:51 +10:00
Geoffrey McRae
3d426ccef8
[all] fix missing cursor when client reconnects
2019-05-28 14:06:15 +10:00
Geoffrey McRae
b31e8e1cee
[client] egl: remove accidental commit of debug code
2019-05-27 18:46:05 +10:00
Geoffrey McRae
f0923c4ed7
[client] egl: expose a few new tuneables
2019-05-27 18:42:46 +10:00
Geoffrey McRae
aabf19e63b
[client] main: properly shutdown if renderer fails to init
2019-05-27 18:40:36 +10:00
Geoffrey McRae
f4fc1eb5f6
[client] typo in config help text
2019-05-27 18:40:36 +10:00
Geoffrey McRae
4cf2c7a350
[client] check for failure to map pbo memory
2019-05-27 01:39:01 +10:00
Geoffrey McRae
664d7dccdb
[client] fix the binary path when debugging
2019-05-27 01:38:50 +10:00
Jonathan (JJRcop) Rubenstein
d07aa4b29e
[client] Add win:maximize to maximize on startup
2019-05-26 20:47:59 +10:00
JJRcop
9f33043d17
[client] Fix typo in example of README.md
2019-05-25 10:25:57 +10:00
Geoffrey McRae
83c5df2c47
[client] main: add + sign to mouse sensitivit alerts
2019-05-24 05:35:16 +10:00
Geoffrey McRae
759b4ef811
[client] fix typo
2019-05-24 05:31:16 +10:00
Geoffrey McRae
437ebf6265
[client] main: new feature to increase/decrease mouse sensitivity
2019-05-24 05:29:38 +10:00
Geoffrey McRae
bffd02b8c7
[client] main: better UX with the escape key combinations
2019-05-23 20:31:01 +10:00
Geoffrey McRae
196b27ee9c
[doc] client: document defaults instead of my preconfigured values
2019-05-23 20:26:37 +10:00
Geoffrey McRae
ff08540fd3
[doc] fixed another formatting snafu
2019-05-23 20:20:18 +10:00
Geoffrey McRae
07be380f34
[doc] fix formatting a bit
2019-05-23 20:19:37 +10:00
Geoffrey McRae
76d58deefa
[doc] Updated project documentation in leu of Beta 1 release
2019-05-23 20:13:41 +10:00
Geoffrey McRae
dba9764c5e
[egl] alert: fix fuzzy font bug and make alerts a little more plesant
2019-05-23 19:58:12 +10:00
Geoffrey McRae
1492196bbf
[client] shutdown application on window close even if ignoreQuit is set
...
Fixes #138
2019-05-23 18:27:21 +10:00
Geoffrey McRae
d2d427b533
[client] egl: query maximum multisample support for MSAA context
...
Based on @rLink234's work in 4ac781b4516678b6c59d9ecf4a61df64a01ec8c1
Fixes #128
2019-05-23 16:56:50 +10:00
Geoffrey McRae
3585e02993
[client] egl: add options for maximum NV level and initial level
...
Adds options:
* egl:nvGain
* egl:nvGainMax
Fixes #153
2019-05-23 16:33:40 +10:00
Geoffrey McRae
86f4256b5a
[client] egl: fix streaming texture re-init crash
2019-05-22 12:19:03 +10:00
Geoffrey McRae
84b2917706
[client] app: new options to reduce CPU usage
...
This patch increases the default cursor and frame polling interval from
1us to 1000us which for most use cases should be more then fast enough.
It also adds two new configuration options to adjust these should it be
required:
* app:cursorPollInterval
* app:framePollInterval
2019-05-22 12:00:06 +10:00
Geoffrey McRae
fc66a4a19c
[client] egl: use persistant mapped texture buffers
...
While it is recommended to use memory barriers when updating a buffer
like we are, since we double buffer it is unlikely we will corrupt a
prior frame, and even if we do since it's just texture data at worst
we might see a tear.
2019-05-22 11:37:27 +10:00
Geoffrey McRae
087387087e
[client] fix race condition on initial uniform access
2019-05-22 11:36:47 +10:00
Geoffrey McRae
67595d6deb
[client] added missing semi-colon (not sure how that happened)
2019-05-21 15:51:45 +10:00
Geoffrey McRae
77f942711a
[client] fixed typo in option description
2019-05-21 15:51:14 +10:00
Geoffrey McRae
e3c98ddc35
[client] port all configuration parsing to use the new option helper
2019-05-21 15:03:59 +10:00
Geoffrey McRae
ba50fbdc3e
[client] egl: implement pixel perfect upscaling
2019-04-19 11:23:51 +10:00
Geoffrey McRae
6f77ba8aea
[client] perform proper shutdown on SIGTERM
2019-04-14 09:15:03 +10:00
Geoffrey McRae
32bd6d96e3
[common] implemented crash handler for linux (including backtrace)
2019-04-11 16:41:52 +10:00
Geoffrey McRae
d8915dbfc9
[build] make "common" a static library (part 2/2)
2019-04-11 11:12:59 +10:00
Łukasz Kostka
ccd0fd8902
Add install binary target
2019-04-05 03:18:11 +11:00
Geoffrey McRae
1fbba5cf2d
[client] egl: make nightvision enhance luminosity before gain
2019-03-31 00:08:52 +11:00
Geoffrey McRae
d6805cfa0f
[client] main: move config free into new config_free
method
2019-03-30 16:00:47 +11:00
Geoffrey McRae
4dee965fdf
[client] main: move config and option parsing into a seperate unit
2019-03-30 15:52:00 +11:00
Geoffrey McRae
35094a57cb
[client] more cleanup and added alerts for new events
2019-03-30 12:26:06 +11:00
Geoffrey McRae
5d254c7751
[client] main: don't ignore keybinds when spice is disabled
2019-03-29 02:33:09 +11:00
Geoffrey McRae
7fd4ba3aad
[client] main: added <escape>+I for spice input enable toggle
2019-03-29 02:17:06 +11:00
Geoffrey McRae
ecfcf11c05
[client] main: fix errornous double keybind registration
2019-03-29 02:08:16 +11:00
Geoffrey McRae
30ea57c644
[client] main: add full screen toggle key bind <escape>+F
...
Fixes #139
2019-03-29 02:06:37 +11:00
Geoffrey McRae
c4001c727a
[client] egl: added new super+N binding to increase image gain
...
This feture is to allow the use of the key combination <super>+N to
increase the brightness of the screen when using monitors with poor
backlighting. Can help in some games.
N = Night vision
2019-03-29 00:15:14 +11:00
Geoffrey McRae
fd4cfc2ff3
[client] main: add interface for modules to register key binds
2019-03-29 00:15:04 +11:00
Geoffrey McRae
03cb61f746
[client] main: prevent the cursor thread starting too early
...
fixes #136
2019-03-28 21:23:24 +11:00
Geoffrey McRae
8eed25b469
[client] cmake: list enabled features in configure output
2019-03-28 20:27:38 +11:00
Geoffrey McRae
ee09594190
[client] cmake: cosmetics
2019-03-28 20:15:13 +11:00
Geoffrey McRae
66c3c0115f
[client] added options to disable/enable interfaces
2019-03-28 20:12:18 +11:00
Geoffrey McRae
3e021f3a6b
[client] use cmake to generate renderers/fonts/clipboards headers/code
...
This is in preperation of cmake options to enable/disable various
functionallity.
2019-03-28 19:56:14 +11:00
Geoffrey McRae
b524c077a4
[client] egl: remove the rest of the shaders into seperate files
2019-03-28 15:53:15 +11:00
Geoffrey McRae
10f7efecb2
[client] cmake: fix inconsistent versioning
2019-03-28 15:03:35 +11:00
Geoffrey McRae
f09ee0bdb3
[client] egl: fix minor error in CMakeLists
2019-03-28 15:01:52 +11:00
Geoffrey McRae
d5a52241b0
[client] egl: move shaders into seperate files and build into objects
2019-03-28 14:59:54 +11:00
Geoffrey McRae
52c4e15c76
[client] project restructure part 2/2
2019-03-28 12:42:41 +11:00
Geoffrey McRae
fdba14691c
[client] egl: requires gl
2019-03-28 12:31:28 +11:00
Geoffrey McRae
3d136a28a0
[all] added pre-commit script and VERSION
...
This script belongs in .git/hooks/ to bump the version each commit.
2019-03-28 12:24:38 +11:00
Geoffrey McRae
db398d41a0
[client] project restructure part 1/2
2019-03-28 11:02:36 +11:00
Geoffrey McRae
7cbaf8b5be
[egl] don't assume SDL is compiled with Wayland support
2019-03-26 17:30:16 +11:00
NamoDev
d1c0d2b5f8
[CLIENT] cosmetic code changes
2019-03-18 08:32:38 +11:00
NamoDev
909606627f
[CLIENT] Fixed invalid value initialization
2019-03-18 08:32:38 +11:00
NamoDev
80f5d3a660
[CLIENT] Added option for custom window title
2019-03-18 08:32:38 +11:00
Geoffrey McRae
a57d68acd5
[client] main: fixed help text typo
2019-02-26 03:12:57 +11:00
Geoffrey McRae
a33734e2d3
[client] main: help output cosmetics
2019-02-26 03:09:59 +11:00
Geoffrey McRae
e5921b3949
[client] main: better error text for changed spice options
2019-02-26 03:08:26 +11:00
Geoffrey McRae
5de25f2b43
[client] main: add options to control spice features
2019-02-26 03:06:53 +11:00
Geoffrey McRae
41f4166aed
[client] x11: remove noise about unsupported formats
2019-02-25 05:44:31 +11:00
Geoffrey McRae
4f8fa6e7aa
[client] fixes #135 , double free crash
2019-02-25 05:43:18 +11:00
Geoffrey McRae
dbd09a431a
Revert "[client] x11: prevent race condition causing double free"
...
This reverts commit 8d48dd973a
.
2019-02-25 04:59:51 +11:00
Geoffrey McRae
8d48dd973a
[client] x11: prevent race condition causing double free
2019-02-25 04:42:58 +11:00
Geoffrey McRae
c7666b314b
[client] x11: fix bidirectional clipboard functionallity
2019-02-24 15:35:31 +11:00
Geoffrey McRae
03628505ed
[client] spice: correct sending of large va agent buffers
2019-02-24 15:35:17 +11:00
Geoffrey McRae
b368873f4d
[client] x11: ignore clipboard select events from ourself
2019-02-24 12:16:32 +11:00
Geoffrey McRae
dd38f3ce13
[client] x11: don't notify to clear if no property
2019-02-24 12:10:57 +11:00
Geoffrey McRae
d8b01c0257
[client] initial host to client clipboard sync working
2019-02-24 11:43:32 +11:00
Geoffrey McRae
0a2fbe1f7f
[client] spice: implement full clipboard guest copy support
2019-02-23 04:24:30 +11:00
Geoffrey McRae
de0b54ae70
[client] cosmetics
2019-02-22 22:40:57 +11:00
Geoffrey McRae
54e8cce33c
[client] core: added initial clipboard interface and x11 stubs
2019-02-22 22:38:52 +11:00
Geoffrey McRae
08bf01b649
[all] update copyright dates
2019-02-22 22:16:14 +11:00
Geoffrey McRae
1a66c11091
[client] spice: better align the spice api for x11 cliboard integration
2019-02-22 19:51:14 +11:00
Geoffrey McRae
689a1de69b
[client] spice: added clipboard callbacks to decouple spice from SDL
2019-02-22 18:59:45 +11:00
Geoffrey McRae
0dfa7425c1
[client] spice: fixed copying large amounts of text to the clipboard
2019-02-22 12:33:55 +11:00
Geoffrey McRae
4098db039e
[client] spice: fix read to allow for larger amounts of data
2019-02-22 09:15:29 +11:00
Geoffrey McRae
a7834611d1
[client] spice: fix memory leak
2019-02-22 09:08:53 +11:00
Geoffrey McRae
9dd4e4756b
[client] spice: implemented guest -> client clipboard sync
2019-02-22 09:02:34 +11:00
Geoffrey McRae
108369414e
[client] spice: implement channel caps and initial clipboard support
2019-02-22 07:40:43 +11:00
Geoffrey McRae
00e07c0384
[client] spice: remove extra debug output
2019-02-22 07:39:55 +11:00
Geoffrey McRae
1ebee561bc
[client] spice: fix incorrect message size for agent messages
2019-02-22 07:38:05 +11:00
Geoffrey McRae
ec0db86663
[client] spice: fix unitialized value
2019-02-22 04:13:27 +11:00
Geoffrey McRae
3df4bb3a54
[client] spice: protocol updates for performance and agent support
...
Note: agent support is not complete at this point due to lack of documentation.
2019-02-22 03:04:06 +11:00
Geoffrey McRae
5bd748680f
client: cosmetics
2019-02-22 03:04:06 +11:00
Marius Barbu
e09ff31c09
[client] update viewport size after window is created
...
Make sure glViewport gets called as soon as we know the window
dimensions, otherwise nothing gets rendered until KVMFR communication is
established (mostly the splash).
Without the fix, './looking-glass-client -s' behaves differently than
'./looking-glass-client -s -F' in that the latter triggers a
SDL_WINDOWEVENT_SIZE_CHANGED and updates the viewport immediately after
window creation while the former doesn't and all rendering is delayed
until the frameThread successfully decodes the first frame.
As all the possible ways of updating the viewport (window creation,
window size change, frame size change) are covered with
updatePositionInfo(), the 'started' state becomes redundant and is
removed.
Note: this might be the wrong way to fix it (possible driver bug?),
glViewport's specification mentions that the default viewport size
matches the window size when the GL context is first attached.
Tested on:
Debian Buster with GNOME 3.30.2 on X.Org 1.20.3
Looking Glass (a12-21-g07e4c1c20f)
Locking Method: Atomic
Using: EGL
Vendor : Intel Open Source Technology Center
Renderer: Mesa DRI Intel(R) Haswell Desktop
Version : OpenGL ES 3.1 Mesa 18.3.2
Signed-off-by: Marius Barbu <msb@avengis.com>
2019-02-21 07:56:25 +11:00
Geoffrey McRae
07e4c1c20f
[client] spice: correct issue with new channel list support
2019-02-21 05:31:51 +11:00
Geoffrey McRae
daf854c692
[client] spice: initial agent support
2019-02-21 05:06:13 +11:00
Geoffrey McRae
65c1e0391c
[client] spice: minor fixes, don't assume inputs channel exists
2019-02-21 03:43:11 +11:00
Geoffrey McRae
769edba1a5
[client] spice: remove useless mouse queue, this is not needed
...
When this was first developed the official spice client was used as an example refrence, however upon inspecting the source of spice-server it has been determined that there is no server side queueing going on, and acks are simply sent after every 4 to reduce bandwidth.
2019-02-19 14:50:30 +11:00
Frediano Ziglio
2567447b24
[client] spice: use correct enumeration for SpiceLinkReply
...
SPICEC_ERROR_CODE_xxx constants are supposed to be used by old
client (obsoleted years ago).
SpiceLinkReply error field uses SPICE_LINK_ERR_xxx enumeration
constants.
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2019-02-10 09:06:07 +11:00
Geoffrey McRae
473e4716fc
[client] spice: debug print unsigned int re #127
2019-01-25 14:17:06 +11:00
Dominik Csapak
59cac9c0cc
change spice port type to unsigned short
...
so that ports >32767 get displayed correctly,
also signed overflow is undefined behaviour
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2019-01-25 14:15:22 +11:00
Geoffrey McRae
92d87d983b
[client] spice: fix incorrect cursor button state being sent
2019-01-17 02:45:46 +11:00
Geoffrey McRae
bfc4a1bc16
[client] update client to handle new cursor move code
2019-01-12 00:00:21 +11:00
Geoffrey McRae
e4ae9134ae
[client] egl: fix graphical glitch with splash
2019-01-02 10:36:17 +11:00
Geoffrey McRae
640bc03c6b
[client] [Patch 2/2] fixes #106
2019-01-02 10:30:55 +11:00
Geoffrey McRae
667aed635d
[client] egl: added untested support for wayland
2019-01-02 00:04:40 +11:00
Alexander Olofsson
1d3a23e051
Store the initial window size in the state
...
Fixes #107
2018-12-17 16:07:21 +11:00
Geoffrey McRae
507732587e
[client] egl: fixed uninitialized variable bug
2018-12-16 12:17:12 +11:00
Geoffrey McRae
d1e3508d55
[client] fix early render issue
2018-12-16 11:02:51 +11:00
Geoffrey McRae
3a8998f1f9
[client] make EGL the default renderer
2018-12-16 11:02:40 +11:00
Geoffrey McRae
de5795e368
[client] egl: implemented alerts and some minor fixes to fps
2018-12-16 10:57:01 +11:00
Geoffrey McRae
fca71e2b95
[client] egl: slight correction to splash
2018-12-16 00:56:35 +11:00
Geoffrey McRae
0e2b371e59
[client] egl: added splash screen rendering
2018-12-16 00:54:37 +11:00
Geoffrey McRae
e1fa6b4057
[client] egl: fix cursor regression
2018-12-13 02:11:37 +11:00
Geoffrey McRae
b6c8d3fae5
[client] egl: fix mono cursor double height regression
2018-12-13 01:39:52 +11:00
Geoffrey McRae
eb1c61f335
[client] warn about poor FPS display performance
2018-12-13 01:34:23 +11:00
Geoffrey McRae
5842ce23a3
[client] pre-calculate the frame time
2018-12-13 01:34:14 +11:00
Geoffrey McRae
692d48df87
[client] don't calculate FPS if we are not showing it
2018-12-13 01:28:00 +11:00
Geoffrey McRae
49bd091359
[client] use clock_nanosleep for more accurate frame timing
2018-12-13 01:22:57 +11:00
Geoffrey McRae
5fe2db7e56
[client] rename fps variables to be more correct
2018-12-12 23:59:22 +11:00
Geoffrey McRae
b927f991d6
Revert "[client] improve fps target accuracy"
...
This reverts commit 4d7e1054bd
.
This causes FPS runaway after a time
2018-12-12 23:40:29 +11:00
Geoffrey McRae
4d7e1054bd
[client] improve fps target accuracy
2018-12-12 23:33:35 +11:00
Geoffrey McRae
42fa0e1d1f
[client] egl: corrected fps alpha blending
2018-12-12 22:38:08 +11:00
Geoffrey McRae
abfe3a9b4d
[client] egl: moved desktop rendering into seperate unit
2018-12-12 21:41:51 +11:00
Geoffrey McRae
b9f8f1a0ad
[client] egl: add and use default quad helper for models
2018-12-12 20:08:52 +11:00
Geoffrey McRae
608b67af77
[client] egl: moved fps code into seperate unit
2018-12-12 20:04:43 +11:00
Geoffrey McRae
2a65e39848
[client] egl: added missing files from last commit
2018-12-12 18:57:31 +11:00
Geoffrey McRae
c23bf6a0c4
[client] egl: migrate cursor code into seperate unit
2018-12-12 18:53:55 +11:00
Geoffrey McRae
50c460df5a
[client] define GL_GLEXT_PROTOTYPES globally
2018-12-12 16:53:30 +11:00
Geoffrey McRae
61f0577ab2
[client] egl: costmetics
2018-12-12 16:41:29 +11:00
Geoffrey McRae
a9aab3c1ee
[client] egl: moved egl sources into subdirectory
2018-12-12 16:39:04 +11:00
Geoffrey McRae
73da86ac0e
[client] egl: add checking to egl_shader_get_uniform_location
2018-12-12 16:32:16 +11:00
Geoffrey McRae
43d08df6b3
[client] egl: rename "shader" to "this" for consistancy
2018-12-12 16:31:25 +11:00
Geoffrey McRae
4654f317ca
[client] opengl: fixed incorrect colors and added 10-bit RGBA support
2018-12-12 10:55:18 +11:00
Geoffrey McRae
d2b83027b4
[client] egl: removed accidental commit of test code
2018-12-11 16:35:53 +11:00
Geoffrey McRae
7be930a69c
[client] removed use of now removed frame type, fixed #105
2018-12-11 16:34:41 +11:00
Geoffrey McRae
75ffcacfe4
[client] added support for RGBA, BGRA and 10-bit RGBA
2018-12-04 21:24:01 +11:00
Geoffrey McRae
1beeac545d
[client] added missing lg-fonts.c to the repo
2018-11-20 22:34:01 +11:00
Geoffrey McRae
ab98c87e7c
[client] egl: added FPS rendering
2018-11-20 09:50:09 +11:00
Geoffrey McRae
5b453d604e
[client] remove other render modes from font ABI
2018-11-20 05:50:22 +11:00
Geoffrey McRae
90fc2a8164
[client] move FPS calculations out of renderers
2018-11-20 05:26:51 +11:00
Geoffrey McRae
0ed9301ed9
[client] font: implemented font ABI and updated OpenGL to use it
2018-11-20 04:38:53 +11:00
Geoffrey McRae
2692ccc7b3
[client] use mouse visibility info properly
2018-10-09 18:33:18 +11:00
Geoffrey McRae
d8b4d0c1ce
[client] consume all SDL events in the filter
2018-10-04 17:18:09 +10:00
Geoffrey McRae
9613127162
[client] better usage of SDL event loops
2018-10-04 17:03:09 +10:00
Geoffrey McRae
4e7de236d3
[egl] implement window positioning
2018-10-04 02:31:37 +10:00
Geoffrey McRae
741dfd418d
[egl] improve texture upload performance
2018-10-04 00:09:47 +10:00
Geoffrey McRae
1d6dfa048e
[client] tighten timings
2018-10-04 00:09:47 +10:00
Geoffrey McRae
e70928d603
[egl] fix incorrect xor blending for monochrome cursors
2018-09-25 23:32:45 +10:00
Geoffrey McRae
e2b33348f3
[egl] added monochrome cursor rendering
2018-09-25 23:04:29 +10:00
Geoffrey McRae
3ff712fea5
[egl] fix performance issue with cursor updates and add todo message
2018-09-24 20:26:31 +10:00
Geoffrey McRae
2db26ae37e
[egl] fix incorrect mouse size and position scaling
2018-09-24 20:11:42 +10:00
Geoffrey McRae
375b97ca6f
[egl] fix incorrect mouse colors
2018-09-24 19:52:44 +10:00
Geoffrey McRae
d331a3dd5a
[egl] added intial cursor support
2018-09-24 19:48:11 +10:00
Geoffrey McRae
c0c63fd93b
[egl] simplify yuv to rgb shader
2018-09-23 20:56:18 +10:00
Geoffrey McRae
b5a47cae25
[egl] implemented YUV420 decode support in hardware
2018-09-23 20:45:20 +10:00
Geoffrey McRae
1f1c9dfa59
[egl] don't re-create the buffer each frame
2018-09-23 16:56:09 +10:00
Geoffrey McRae
0903b4a610
[egl] make new OpenGL ES renderer available
...
Note that this renderer is incomplete at this time as it doesn't
render the cursor.
2018-09-23 16:04:20 +10:00
Geoffrey McRae
884ad6557b
[egl] cleanup texture API
2018-09-23 15:56:47 +10:00
Geoffrey McRae
00658f3d64
[egl] split out texture code into it's own object
2018-09-23 15:48:44 +10:00
Geoffrey McRae
fff3ec30b8
[egl] added basic shaders and use dma to xfer buffer to the gpu
2018-09-22 18:00:52 +10:00
Geoffrey McRae
26434f7baf
[egl] initial commit of new modern OpenGL ES renderer
2018-09-22 16:26:55 +10:00
Andy Chun
f75e2fe8db
Default XDG_SESSION_TYPE to unspecified
...
Minimal systems in cases may not have XDG_SESSION_TYPE set at all, causing the program to segfault at the `strcmp`. This commit sets XDG_SESSION_TYPE to `unspecified` (according to https://www.freedesktop.org/software/systemd/man/pam_systemd.html ) if it is not defined in the environment.
2018-08-03 10:02:54 +10:00
Yvan da Silva
0674e04597
Corrects an error in a debug message
...
* This happened during the last edit.
2018-07-30 08:07:53 +10:00
Yvan da Silva
29f1d6cd42
[client] Adds back support for wayland
...
* Since LG is now using SDL2, the SDL_VIDEODRIVER must be set.
* This fixes SDL error 'Couldn't find matching GLX visual' when creating the window.
2018-07-30 08:07:53 +10:00
Geoffrey McRae
83592f7e4a
[client] cleanup of renderer API for better usage
...
* Added new on_render_start for render initialization
* Changed on_resize to execute inside the render thread
2018-07-28 14:49:37 +10:00
Geoffrey McRae
13cd50f92c
[client] disable multisample after logo is gone
...
We only use multisample to smooth out the edges of the LG logo, it is
pointless to leave it on after the logo is gone.
2018-07-28 10:36:41 +10:00
Geoffrey McRae
05bd587c74
[client] implemented initial slow yuv420 support
2018-07-28 08:41:39 +10:00
Geoffrey McRae
ef336d552c
[parser/nal] no need to check for null before free ( fixes #87 )
2018-07-26 06:09:12 +10:00
Geoffrey McRae
60070e6076
[client] implement stream paused alert
2018-07-24 01:09:53 +10:00
Geoffrey McRae
1f90010cbd
[client] add switch to disable alert messages, fixes #83
2018-07-20 01:09:51 +10:00
Geoffrey McRae
d839026ade
[opengl] added fade out to wait screen
2018-07-20 01:01:16 +10:00
Geoffrey McRae
34de213926
[opengl] render alerts and fps on wait screen
2018-07-20 00:10:29 +10:00
Geoffrey McRae
b5ec4dd305
[client] scale up the logo and put a gradient behind it
2018-07-19 23:48:35 +10:00
Geoffrey McRae
023d3f811b
[client] render the looking glass logo (almost)
2018-07-19 23:33:51 +10:00
Geoffrey McRae
53c32cc5a4
[client] enable multisampling
2018-07-19 23:33:26 +10:00
Geoffrey McRae
eb6ee8ea46
[client] allow window resize event's before startup
2018-07-19 23:32:42 +10:00
williamvds
b19518a1f8
[client] Allow keyboard capture ( #26 )
2018-06-05 12:09:19 +10:00
Geoffrey McRae
14954cc426
[client] fix too early release of OpenGL context
...
Fixes a problem where resolution changes would require a restart of
the client
2018-05-31 18:54:29 +10:00
Geoffrey McRae
32dca9ea3f
[client] only provide linker flags at link time
2018-05-31 18:54:10 +10:00
Geoffrey McRae
792200cac4
[client] use atomic locking by default
2018-05-29 18:18:22 +10:00
Geoffrey McRae
526b607e37
[client] fixed warning/error text
2018-05-29 18:10:58 +10:00
Geoffrey McRae
298885083b
[client] remove xlib shim as it is no longer needed
2018-05-29 18:09:27 +10:00
Geoffrey McRae
26c4804892
[client] replace custom Makefile with cmake build
2018-05-29 18:08:26 +10:00
Geoffrey McRae
a507dd0c51
[client] remove h264 decoder for now
2018-05-29 17:44:25 +10:00
Geoffrey McRae
c6830bab16
[client] remove useless linking against libssl
2018-05-29 17:44:07 +10:00
Geoffrey McRae
a0457a2dd9
[client] added nettle/bignum.h to rsa.c, CentOS 7 seems to need it
2018-05-29 14:55:28 +10:00
Geoffrey McRae
ce60cafa19
[client] removed invalid MS Windows specific hint
...
See: https://wiki.libsdl.org/SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4
> A hint that specifies that SDL should not to generate
> SDL_WINDOWEVENT_CLOSE events for Alt+F4 on Microsoft Windows.
2018-05-29 14:09:44 +10:00
Geoffrey McRae
9e02131525
[client] don't scale the mouse when in capture mode
2018-05-29 11:55:28 +10:00
Geoffrey McRae
6918eeca26
[client] added missing library for floor
function
2018-05-29 11:08:56 +10:00
Geoffrey McRae
fbbee1cdac
[opengl] added support for alerts
2018-05-29 11:08:25 +10:00
Geoffrey McRae
89959b48a7
[client] added linked list utility
2018-05-29 11:08:01 +10:00
Geoffrey McRae
b26a535451
[client] added support for alert text
2018-05-29 11:06:42 +10:00
Geoffrey McRae
86207993b8
[client] alert the user when capture mode is on or off
2018-05-29 09:02:34 +10:00
Geoffrey McRae
ee9213da76
[client] add alert method to renderer api
2018-05-29 08:59:07 +10:00
Geoffrey McRae
a084b2b32f
[client] added the ability to specify the capture key (-m)
2018-05-29 08:51:58 +10:00
Geoffrey McRae
afdae8efc0
[client] allow the system screensaver to operate, -S to disable
2018-05-29 08:34:52 +10:00
Geoffrey McRae
64ad862116
[client] remove noise about scaling/alignment as this is fixed
2018-05-29 08:28:55 +10:00
r4m0n
4d81aaa763
Code cleanup
2018-05-29 02:18:17 +10:00
r4m0n
8cb25792ba
Fixing scaled mouse movement
2018-05-29 02:18:17 +10:00
Geoffrey McRae
97749b335a
[client] start rendering a little earlier
2018-05-28 15:36:12 +10:00
Geoffrey McRae
a647a602bf
[opengl] render a blue screen while waiting for sync
2018-05-28 15:30:31 +10:00
Geoffrey McRae
882b31aeaa
[client] add support for masked colour cursors ( fixes #61 )
...
Also allows early SDL usage for cursor and keyboard control before
the host application starts
2018-05-28 11:40:56 +10:00
Geoffrey McRae
62e67c345c
[client] reduce weight of FPS limiter feedback
2018-05-25 08:35:52 +10:00
Geoffrey McRae
5de9a8dce6
[client] prevent usleep underflow in FPS limiter
2018-05-24 18:10:23 +10:00
Geoffrey McRae
a4600e7278
[client] added FPS limiter for when running without vsync
2018-05-24 11:56:11 +10:00
Geoffrey McRae
c42bff99e2
[client] adjustments for better sync
2018-05-24 11:26:09 +10:00
Geoffrey McRae
df7183a572
[kvmfr] decouple cursor flags from frame flags and fix timings
2018-05-24 09:01:53 +10:00
Geoffrey McRae
7a5bbb1e59
[client] add unix socket support, fixes #67
2018-05-23 12:16:44 +10:00
Geoffrey McRae
a3cd0385d0
[doc] Fix formatting
2018-05-23 08:46:03 +10:00
Geoffrey McRae
8fdc11813d
[doc] Rename DEBUGGING file for Markdown formatting
2018-05-23 08:45:07 +10:00
Geoffrey McRae
fb412e8440
[doc] Added some documentaion for how to debug the LG client
2018-05-23 08:44:11 +10:00
Geoffrey McRae
6f141fe393
[client] removed unused define in rsa.c
2018-05-22 15:40:08 +10:00
Geoffrey McRae
9b0f974648
[client] switch to nettle and gmp for RSA EME-OAEP support
...
Fixes #68
2018-05-22 15:36:36 +10:00
Geoffrey McRae
ceac6a60e6
[spice] initial GnuTLS implementation (incomplete)
2018-05-22 09:49:35 +10:00
Geoffrey McRae
cba6630aa0
[spice] relocate openssl code into seperate function
...
This is in preperation of switching to an alternative SSL library
as OpenSSL conflicts with the GNU licence.
2018-05-22 09:39:03 +10:00
Geoffrey McRae
b3aadccfc4
[client] use glFinish to prevent buffering and re-enable by default
2018-05-21 23:16:16 +10:00
Geoffrey McRae
b8a1743d8f
[client] fixed crash when specifying the shmFile as a command
2018-05-21 21:46:48 +10:00
Geoffrey McRae
d097531926
[client] allow the mouse and keyboard to operate early
2018-05-16 18:19:32 +10:00
Geoffrey McRae
d339ca3599
[client] remove dependencies on libva until h264 is ready
2018-05-16 18:14:08 +10:00
Geoffrey McRae
adb1ca58b9
[opengl-basic] removed basic renderer as it is no longer needed
2018-05-16 18:13:20 +10:00
Geoffrey McRae
70ffe1de43
[h264] disable the module until I or someone finds time to finish it
2018-05-16 18:12:29 +10:00
Geoffrey McRae
cf4d16b528
[opengl] numerous improvements to buffer transfer
2018-05-16 17:58:36 +10:00
Geoffrey McRae
d0756cf00c
[main] make it possible to manually specify the memory size
2018-05-15 20:07:48 +10:00
Geoffrey McRae
4fd59ce8c9
[opengl] fix free bug with new contiguous buffer
2018-05-15 19:25:22 +10:00
Geoffrey McRae
adca879fb9
[opengl] use a single contiguous buffer for the AMD pinned buffer
2018-05-15 19:23:57 +10:00
Geoffrey McRae
3a2d612b41
[decoders] change the API to allow more flexability in the future
2018-05-15 19:19:39 +10:00
Geoffrey McRae
332d53e016
[opengl] Add support for AMD_pinned_memory if it is available
2018-05-15 13:23:44 +10:00
Geoffrey McRae
ae1344d1a0
[spice] fix out by one error in call to strncpy
2018-05-15 09:56:42 +10:00
Geoffrey McRae
ae382949c8
[opengl] glxWaitVideoSyncSGI is not well supported in Mesa 18
...
It seems Mesa 18 has problems with the glxWaitVideoSyncSGI API so
we disable the 'preventBuffer' option by default
2018-05-15 09:54:24 +10:00
Geoffrey McRae
fd8d4d3d38
[client] enable configuration of spice via config
2018-02-05 19:08:31 +11:00
Geoffrey McRae
a2216e4b68
[client] cosmetics
2018-02-05 19:08:15 +11:00
Alam Arias
4fb9fc3b3f
[client]: ignore Alt-F4 in ignoreQuit mode ( #46 )
...
* [client]: ignore Alt-F4 in ignoreQuit mode
* [client]: turn down the SNR for SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4
* [client]: turn down the SNR for SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS
2018-02-02 10:32:46 +11:00
arcnmx
d7321d5f5f
[client] fix event loop sleep ( #45 )
2018-01-30 21:07:14 +11:00
Geoffrey McRae
35eda57cb2
[client] remoted accidential commit of experimental method from header
2018-01-29 17:30:46 +11:00
Geoffrey McRae
78a100135b
[client] fix improper spice socket shutdown
2018-01-29 17:27:12 +11:00
Geoffrey McRae
dc6932a9ba
[client] no need to supress bin directory creation command
2018-01-29 17:04:08 +11:00
Geoffrey McRae
d765674913
[client] fix concurrent make, fixes #43
2018-01-29 17:02:41 +11:00
Geoffrey McRae
2af522aea7
[client] prevent 100% CPU usage in event loop, fixes #41
2018-01-29 16:56:23 +11:00
arcnmx
9aba969296
[client] fix SDL mutex compile errors ( #42 )
2018-01-29 16:51:14 +11:00
Geoffrey McRae
2114b73c11
[client] makefile: use $(CC) instead of assuming gcc
2018-01-25 09:58:03 +11:00
Geoffrey McRae
d591e2fd36
[client] added xlib-shim to disable calls to XSync
...
The compiled xlib-shim.so can be used to intercept and prevent SDL
from calling XSync, which causes latency issues on some video
hardware.
To use specify the full path to the file in the LD_PRELOAD
environment variable, like so:
LD_PRELOAD=/full/path/xlib-shim.so ./looking-glass
2018-01-25 09:55:21 +11:00
Geoffrey McRae
c61d97b0ac
[client] spice: add channel and mouse locking
...
This fixes a race condition which causes the mouse ringbuffer to
overflow. It also corrects out of order message index IDs due to
multiple threads sending messages asyncronously.
2018-01-25 07:41:11 +11:00
Geoffrey McRae
37ea662998
[client] use SDL_SetEventFilter for better mouse performance
...
This partially resolves lag issues on hosts running the amdgpu driver.
If mouse caputure is enable the lag issue returns, this is because SDL
calls `XSync` in `X11_WarpMouse` and `X11_WarpMouseGlobal`, if these
calls are removed all input lag issues dissapear.
This issue has been reported to SDL as the calls to `XSync` are not
required per the xlib documentation.
2018-01-24 23:46:11 +11:00
Aaron
3d9d275d61
Ignore SDL_MOUSEBUTTONDOWN events incompatible with SPICE ( #38 )
...
* Ignore SDL_MOUSEBUTTONDOWN events that aren't compatible with the SPICE PS/2 mouse
2018-01-15 10:55:17 +11:00
Geoffrey McRae
a02087e5e4
[client] h264: unroll silly loop
2018-01-06 13:47:35 +11:00
Geoffrey McRae
2ccf17b9b7
[client] h264: setup slice parameters correctly (incomplete)
2018-01-06 13:43:24 +11:00
Geoffrey McRae
8ccce5666c
[client] nal: corrections to parsing logic
2018-01-06 13:40:31 +11:00
Geoffrey McRae
859e984827
[client] h264: vaapi deprecated these fields, FMO is not supported
...
fbed1dbb5b/va/va.h (L2840)
2018-01-06 09:47:49 +11:00
Geoffrey McRae
5e84cfb3f1
[client] h264: use parameters from nal (incomplete)
2018-01-06 00:11:38 +11:00
Geoffrey McRae
5a84d3bef7
[client] h264: don't treat parse failure as fatal
2018-01-05 23:18:52 +11:00
Geoffrey McRae
634be5b096
[client] nal: removed useless debug print
2018-01-05 23:13:22 +11:00
Geoffrey McRae
80c9e24604
[client] nal: added final SLICE parser features
2018-01-05 23:09:43 +11:00
Geoffrey McRae
5808089fce
[client] nal: added SLICE parser
2018-01-05 21:36:26 +11:00
Geoffrey McRae
d6f84ddd12
[client] nal: added PPS parser
2018-01-05 16:18:28 +11:00
Geoffrey McRae
c809eeb2a8
[client] fixed nal parser memory leaks
2018-01-05 15:27:36 +11:00
Geoffrey McRae
2dfb1cf1a6
[client] Makefile: stop at the first error
2018-01-05 11:45:30 +11:00
Geoffrey McRae
50ba9b4899
[client] added initial NAL unit parser
2018-01-05 11:36:45 +11:00
Geoffrey McRae
b9723adc30
[client] h264: use high profile as it's more compatible on newer cards
2018-01-04 09:27:24 +11:00
Geoffrey McRae
7648ea712c
[client] opengl: fix termination on configure failure
2018-01-04 09:25:42 +11:00
Geoffrey McRae
3f29897506
[client] fix application termination on error
2018-01-04 09:25:17 +11:00
Geoffrey McRae
bebbdc4089
[client] h264 switch to contrained decoder as baseline is deprecated
2018-01-01 12:56:26 +11:00
Geoffrey McRae
fbf08b94aa
[client] initial vaapi h264 decode support (unfinished)
2017-12-31 00:27:26 +11:00
Geoffrey McRae
e854723aa3
[client] fixed incorrect cursor dataPos validation
2017-12-30 13:48:32 +11:00
Geoffrey McRae
076a45acc5
[client] added initial decoder framework
2017-12-29 22:48:21 +11:00
Geoffrey McRae
c239306d82
[client] initial support for compressed frames
2017-12-29 21:20:51 +11:00
Geoffrey McRae
40bfdcdf8c
[client] added configuration file loading support
...
the client now will look for a configuration file in the following
locations by default.
* /etc/looking-glass.conf
* ~/.looking-glass.conf
All configuration files are loaded and may override values specified by
any prior configuration files loaded.
Sample Config:
global:
{
fullScreen=false;
showFPS=true;
x=0;
y=0;
w=800;
h=600;
}
OpenGL:
{
mipmap="false";
}
2017-12-28 19:58:19 +11:00
Geoffrey McRae
6a6e53f728
[client] removed the dependency on the ivshmem-server
...
Since we do not use IRQs anymore we can use the ivshmem-plain device
which doesn't need the ivshmem-server. The QEMU arguments now should be
as follows:
-device ivshmem-plain,memdev=ivshmem
-object memory-backend-file,id=ivshmem,share=on,mem-path=/dev/shm/looking-glass,size=32M
Obviously adjusting the memory size as required. It is suggested that
the shared memory file be created before the guest is started with the
appropriate permissions, for example:
touch /dev/shm/looking-glass
chown user:kvm /dev/shm/looking-glass
chmod 660 /dev/shm/looking-glass
2017-12-28 15:34:18 +11:00
Geoffrey McRae
db52a55b36
[client] opengl: remove deprecated glScissor, fixes FPS display
2017-12-23 17:40:50 +11:00
Geoffrey McRae
0574daca13
[client] removed unused function argument
2017-12-23 17:38:25 +11:00
Geoffrey McRae
a08aad8009
[client] opengl: don't scale the FPS readout
2017-12-21 06:50:57 +11:00
Geoffrey McRae
2b66fa6136
[client] warn about unreliable cursor scaling
...
This also logs the scaling information to assist with reports about
improper mouse alignment
2017-12-21 06:39:41 +11:00
Geoffrey McRae
e3a426f378
[client] update dimension information after the first frame
2017-12-21 06:38:34 +11:00
Geoffrey McRae
e5f86a824a
[client] switch back to atomic locking as the default
...
The prior patch to correct the mouse loop resolves the CPU load issue
with the atomic locking method. SDL mutexes are still available if
desired but full mutex locking is far slower then fast spinlocks
2017-12-21 02:12:19 +11:00
Geoffrey McRae
c0b2c8e655
[client] added missing wait to cursor update thread
2017-12-21 01:56:59 +11:00
Geoffrey McRae
c5cbb948e2
[client] report locking mode used for diagnostics
2017-12-21 01:35:36 +11:00
Geoffrey McRae
58ed978767
[client] opengl: switch to SDL_mutex locking
2017-12-21 01:23:25 +11:00
Geoffrey McRae
c098967293
[client] opengl: update FPS even when there is no updates
2017-12-21 01:17:45 +11:00
Geoffrey McRae
8fbacba82e
[client] make startup sleep nicer on the CPU
2017-12-21 01:15:16 +11:00
Geoffrey McRae
0753e63644
[client] fixed unlock define
2017-12-21 01:11:42 +11:00
Geoffrey McRae
5501d22a2d
[client] fixed missed usage of new locking semantics
2017-12-21 01:03:21 +11:00
Geoffrey McRae
2f6b7e08f8
[client] define locking types and semantics to allow for alt methods
2017-12-21 00:58:16 +11:00
Geoffrey McRae
695822bd6d
[client] redesign of the renderer archiceture for mt support
...
This is the first of two commits that completely turn the rendering code
on it's head. This change set decouples the guest's capture rate from
the host's render rate for both cursor and frame updates. This helps
prevent the host application from stalling when waiting for frame draws
when all it want's to do is send cursor updates.
* Breaks OpenGL-Basic for now
2017-12-20 00:53:45 +11:00
Geoffrey McRae
a70adb2568
[client] correct help text for new -o argument
2017-12-19 15:40:52 +11:00
Geoffrey McRae
21a4e15868
[client] cosmetics
2017-12-19 15:37:49 +11:00
Geoffrey McRae
8b25f8a344
[client] opengl: show actual FPS seperate from updates per second (UPS)
2017-12-19 12:17:50 +11:00
Geoffrey McRae
7d307c0a9c
[client] improved option parsing
2017-12-19 11:58:38 +11:00
Geoffrey McRae
133d8ec21f
[client] opengl: added preventBuffer option
2017-12-19 11:02:35 +11:00
Geoffrey McRae
f4b95eeda9
[client] fix option output counts and dynamic name padding
2017-12-19 10:56:23 +11:00
Geoffrey McRae
c38e38d43d
[client] opengl: add splitmouse option
...
This feature was previously hardcoded enabled, it is now optional as
some hardware pipelines stall with the excessive flushes resulting in a
jumpy cursor. Default is disabled and may be re-enabled with
`-o opengl:splitmouse=1` or `-o opengl-basic:splitmouse=1` depending on
the renderer selected.
2017-12-19 10:21:45 +11:00
Geoffrey McRae
0ac1992019
[client] add new OpenGL-Basic renderer
...
This is based on bf8da7fd7e4397fe9931e82e52753806f1eee7e0 by @kiljacken
Per issue #11 on some cards this method performs much better then the
persistant buffering used in the standard OpenGL renderer.
Closes #11
2017-12-17 23:32:08 +11:00
Geoffrey McRae
5305ec5dd1
[client] opengl: made vsync option function again
2017-12-17 23:24:58 +11:00
Geoffrey McRae
313a4122bc
[client] add -g option to force a specific renderer
2017-12-17 23:15:18 +11:00
Geoffrey McRae
065b8c1eab
[client] fix typo in help text
2017-12-17 22:45:26 +11:00
Geoffrey McRae
424dc8bb13
[client] add renderer option list
2017-12-17 22:33:02 +11:00
Geoffrey McRae
06e38d897d
[client] implemented renderer specific option API
...
Please note the vsync and mipmap options are now specific to OpenGL
To configure them use the following options:
-o opengl:mipmap=1
-o opengl:vsync=0
2017-12-17 22:21:59 +11:00
Geoffrey McRae
f3e19b743c
[client] added ability to pass options to renderers
2017-12-17 20:32:44 +11:00
Geoffrey McRae
deee61efa9
[client] cosmetics
2017-12-17 20:16:43 +11:00
Geoffrey McRae
71c7f30265
[client] added -Q feature to prevent accidental applicaiton closure
...
Closes #21
2017-12-17 20:11:52 +11:00
Geoffrey McRae
3784e9c06f
[client] added support for new header format
2017-12-17 05:21:02 +11:00
Geoffrey McRae
287b983d27
[client] opengl: fixed broken mipmap logic
...
mipmapping is turned off for images that are scaled up a it degrades the
output quality.
2017-12-16 11:25:01 +11:00
Geoffrey McRae
2bb8b0227c
[client] don't send renderer mouse events until it's configured
2017-12-15 19:14:02 +11:00
Geoffrey McRae
ae4156d041
[client] don't update mouse scaling values until started
2017-12-15 19:14:02 +11:00
Patrick Steinhardt
fe337cf510
[client] ivshmem: fix missing <sys/select.h> include
...
While the function `ivshmem_wait_irq` makes use of the select(3)
function, it does not include <sys/select.h>. This happens to work on
glibc based systems, which include thet file transitively via other
header files. But on musl libc based systems, this breaks compilation.
Directly include <sys/select.h> to fix the problem.
2017-12-15 18:25:21 +11:00
Geoffrey McRae
7bfed41523
[client] opengl: update mouse draw time when doing decoupled draws
2017-12-15 17:03:51 +11:00
Geoffrey McRae
9bb66b7bd6
[client] opengl: decouple mouse updates from vsync
2017-12-15 16:58:21 +11:00
Geoffrey McRae
f7420317f1
[client] opengl: mouse shape updates bypass the draw timeout
2017-12-15 16:53:26 +11:00
Geoffrey McRae
c1379a45d2
[client] opengl: increase maximum mouse draw frequency
2017-12-15 16:34:29 +11:00
Geoffrey McRae
9c03327701
[client] opengl: added back double buffering and vsync support
...
This adds back in double buffering and vsync support. This has been
carefully implemented so that the render function blocks until the video
card reports that it has advanced a frame, this ensures that the OpenGL
pipeline never buffers frames.
2017-12-15 16:21:38 +11:00
Geoffrey McRae
0d8b2449cf
[client] added back missing vsync disable option
2017-12-15 16:19:47 +11:00
Arti Zirk
d1bd5b3115
Do not minimize fullscreen window on focus loss
2017-12-15 15:59:28 +11:00
Jack Karamanian
e03621a622
[client] Add borderless fullscreen usage
2017-12-15 15:59:09 +11:00
Jack Karamanian
606da0ae47
Add borderless fullscreen option
2017-12-15 12:59:34 +11:00
Geoffrey McRae
b6c8136565
[client] initialize the local header copy for proper startup
2017-12-15 12:02:37 +11:00
Geoffrey McRae
8ae9f8464b
[client] updated client to support new KVMFR cursor dataPos field
2017-12-15 10:51:40 +11:00
Geoffrey McRae
3c61814c56
[client] windows cursors are in BGRA format
2017-12-15 10:20:20 +11:00
Geoffrey McRae
cd54cb179b
[client] make gcc happy about the ignored read result
...
Fixes #5
2017-12-15 00:57:49 +11:00
Geoffrey McRae
67bdf2ba97
[client] fix SDL_ttf.h include path.
2017-12-14 22:05:32 +11:00
Geoffrey McRae
ead48195db
[client] opengl: use the stride rather then rect width for padded widths
2017-12-14 20:35:36 +11:00
Geoffrey McRae
2ae9b479f6
[client] update window dimensions when the spice client is disabled
2017-12-14 20:09:48 +11:00
Geoffrey McRae
3fa9f371b4
[client] added license to opengl.c
2017-12-14 20:06:48 +11:00
Geoffrey McRae
8ec4abc544
[client] adjusted renderer interface to allow for APIs such as Vulkan
2017-12-14 17:42:59 +11:00
Geoffrey McRae
7b64d35cd1
[client] corrected path to SDL2_ttf header
2017-12-14 16:09:39 +11:00
Geoffrey McRae
8c2709a3f4
Revert "[client] disable hacky vsync code now we are single buffering"
...
This reverts commit d55f0bf841
.
2017-12-14 10:40:51 +11:00
Geoffrey McRae
d55f0bf841
[client] disable hacky vsync code now we are single buffering
2017-12-14 10:35:38 +11:00
Geoffrey McRae
dd0930d265
[client] our source is vairable frame rate, we can't double buffer at all
2017-12-14 10:30:55 +11:00
Geoffrey McRae
04f7800df4
[client] remove silly wait logic
2017-12-14 10:12:31 +11:00
Geoffrey McRae
d8a80a1cfc
[client] move startup later as DXGI stalls when nothing is going on
2017-12-14 10:08:47 +11:00
Geoffrey McRae
9d29b1195d
[client] treat buffers correctly
2017-12-14 10:06:22 +11:00
Geoffrey McRae
2374b1a9fb
[client] make methods static inline
2017-12-14 08:23:58 +11:00
Geoffrey McRae
a7180a5609
[client] another try at better screen sync
2017-12-14 06:54:53 +11:00
Geoffrey McRae
81f4a7fade
[client] slow down mouse updates to something reasonable
2017-12-14 04:18:30 +11:00
Geoffrey McRae
7986350cb8
[client] switch to polling mode to fix stutting issues
2017-12-14 02:24:18 +11:00
Geoffrey McRae
afff50dfde
[client] don't try to realign the mouse until we know where the mouse is
2017-12-13 22:05:47 +11:00
Geoffrey McRae
233b7755ae
[client] moved host startup sync before window creation
2017-12-13 21:57:01 +11:00
Geoffrey McRae
3bc2506d92
[client] added clean client restart mechanisim
2017-12-13 21:08:35 +11:00
Geoffrey McRae
371f7ce535
[client] cosmetics
2017-12-13 20:44:58 +11:00
Geoffrey McRae
a6b253197f
[client/opengl] removed extra calls to make the context current
2017-12-13 14:26:31 +11:00
Geoffrey McRae
b5cb796b7c
[client] changed opengl to process every frame
2017-12-13 14:10:24 +11:00
Geoffrey McRae
d0e5bd02bd
[client] use lists to draw the cursor
2017-12-13 13:10:32 +11:00
Geoffrey McRae
85c83d2417
[client] enable vsync again but draw to front for cursor updates
2017-12-13 05:55:01 +11:00
Geoffrey McRae
e7511b30bb
[client] kick the guest before waiting for updates
2017-12-13 05:28:53 +11:00
Geoffrey McRae
d2957228ef
[client] added monochrome cursor support
2017-12-13 04:49:43 +11:00
Geoffrey McRae
b5a5d4cda2
[common/client] add pitch to cursor shape structure
2017-12-13 04:42:09 +11:00
Geoffrey McRae
c36e948bdb
[client] added RGB cursor support
2017-12-13 03:51:25 +11:00
Geoffrey McRae
a950f7b187
[client] added initial code for rendering the cursor shape
2017-12-13 03:08:38 +11:00
Geoffrey McRae
5cfae05cae
[client] corrected screen resize bug and incorrect scissor
2017-12-13 02:28:41 +11:00
Geoffrey McRae
893bb7e603
[client] huge rewrite of renderer API deal with mouse updates
2017-12-13 02:22:47 +11:00
Geoffrey McRae
301d394f50
[client] updates for new protocol and vsync disable method
2017-12-12 08:08:14 +11:00
Geoffrey McRae
219179b375
[misc] added website url to sources
2017-12-12 04:30:47 +11:00
Geoffrey McRae
9f790ff51d
[client] corrected polling logic
...
Calculating the pollDelay for the next frame is impossible as the
frame rate is determined by the host application's capture API and
may wildly vary.
2017-12-12 03:59:58 +11:00
Geoffrey McRae
ce278d17a7
[client] print out video card information
2017-12-12 03:59:58 +11:00
Geoffrey McRae
3d462928a6
[client] added git version to build
2017-12-12 03:59:58 +11:00
Geoffrey McRae
5863160c69
[client] fixed incorrect usage of glXWaitVideoSyncSGI
2017-12-12 03:59:58 +11:00
Geoffrey McRae
7574e03d86
[client] fixed out by one error on frame sleep sync
2017-12-12 03:59:58 +11:00
Geoffrey McRae
38d458ac7d
[client] added dependency on X11
2017-12-12 03:59:58 +11:00
Geoffrey McRae
e2c1f1cd77
[client] set the compositor bypass hint
2017-12-12 03:59:58 +11:00
Geoffrey McRae
8adf7cbacd
[client] remove debug print
2017-12-12 03:59:58 +11:00
Geoffrey McRae
0ad1f21ffb
[client] renderer interface improvements and use gl lists for opengl
2017-12-12 03:59:58 +11:00
Geoffrey McRae
fcfea1b65d
[client] fixed basic renderer
2017-12-12 03:59:58 +11:00
Geoffrey McRae
e6a21d1049
[client] implemented SGI_video_sync for better frame sync
2017-12-12 03:59:58 +11:00
Geoffrey McRae
31c9693cbf
[client] move remaining opengl code into the opengl renderer
2017-12-12 03:59:58 +11:00
Geoffrey McRae
5e9885bec1
[client] apply fps limiter when presentation time is too low
2017-12-12 03:59:58 +11:00
Geoffrey McRae
786b9ec723
[client] altered makefile to link fontconfig
2017-12-12 03:59:58 +11:00
Geoffrey McRae
421b091448
[client] Added fontconfig for font path detection
2017-12-12 03:59:58 +11:00
Geoffrey McRae
a4d8fd2237
[client] added rate limiting to failed kicks (guest not ready)
2017-12-12 03:59:58 +11:00
Geoffrey McRae
3899556cbf
[client] added extra sanity checks to the header's data format
2017-12-12 03:59:58 +11:00
Geoffrey McRae
81f1b43581
[client] makefile, enable -O3 as the default now
2017-12-12 03:59:58 +11:00
Geoffrey McRae
79dffa047f
[client] dont mipmap when enlarging smaller screens
2017-12-12 03:59:58 +11:00
Geoffrey McRae
0ccb38940e
[client] make autoResize work again
2017-12-12 03:59:58 +11:00
Geoffrey McRae
59a894ae04
[client] switched srcRect to srcSize and type to SDL_Point
2017-12-12 03:59:57 +11:00
Geoffrey McRae
34f07ec77f
[client] minor logical order optimization of the render loop
2017-12-12 03:59:57 +11:00
Geoffrey McRae
1d5f98db32
[client] adjusted presentation time to be more accurate
2017-12-12 03:59:57 +11:00
Geoffrey McRae
032602f336
[client] reworked the polling logic yet again
2017-12-12 03:59:57 +11:00
Geoffrey McRae
eb52ee9412
[client] added retard/resync counts for debugging
2017-12-12 03:59:57 +11:00
Geoffrey McRae
d09bb1146d
[client] removed unused useBufferStorage app state variable
2017-12-12 03:59:57 +11:00
Geoffrey McRae
ea5d0ddfe0
[client] removed deprecated option to disable GL_ARB_buffer_storage
2017-12-12 03:59:57 +11:00
Geoffrey McRae
852309464f
[client] more polling improvements
2017-12-12 03:59:57 +11:00
Geoffrey McRae
32c6989654
[client] removed debugging print
2017-12-12 03:59:57 +11:00
Geoffrey McRae
7349334811
[client] reworked polling logic and added GPU magic
...
SDL_RenderPresent calls SwapBuffers which doesn't block even with vsync
enabled until the driver/gpu has buffered several frames, this is no good
for our use case where low latency is of ultimate importance. This patch
measures the swap interval, ensures the time is consumed and then calls
glFinish to ensure that there is no buffered data. The results on NVidia
hardware are exceptional, but will need verification on AMD hardware.
Polling logic has also been improved, the client will hunt for the best
delay rather then resorting to waiting on an event from the guest, avoiding
scheduler latency caused by waiting on the irq event.
2017-12-12 03:59:57 +11:00
Geoffrey McRae
01d4d52355
[client] removed useless delay functions
2017-12-12 03:59:57 +11:00
Geoffrey McRae
e1a566bcad
[client] reworked sync code to use polling for short delays
2017-12-12 03:59:57 +11:00
Geoffrey McRae
a1f574ff2f
[client] added 1ms delay loop for incoming polling support
2017-12-12 03:59:57 +11:00
Geoffrey McRae
c26842cb60
[client] fixed minor issue in the makefile
2017-12-12 03:59:57 +11:00
Geoffrey McRae
2d5b633397
[client] changed ivshmem wait timeout to avoid stalls on startup
2017-12-12 03:59:57 +11:00
Geoffrey McRae
c1a82e853d
[client] added renderer abstratction
...
This moves the bulk of the rendering code into seperate rendering
modules cleaning up much of intertwined SDL & OpenGL mess.
2017-12-12 03:59:57 +11:00
Geoffrey McRae
5c335fca67
[client] Makefile rewrite from intial lazy version
2017-12-12 03:59:57 +11:00
Geoffrey McRae
310dba3620
[client] fixed incorrect texSize calculation
2017-12-12 03:59:57 +11:00
Geoffrey McRae
10e6408022
[misc] common and client project rename to "Looking Glass"
...
See: https://forum.level1techs.com/t/headless-pci-passthrough-program-name-vote/121779/36
2017-12-12 03:59:57 +11:00
Geoffrey McRae
3156c0e0cb
[client] corrected event processing
...
SDL_WaitEvent is useless as it runs in 10ms increments, which is way
too slow for high rate of input applications.
2017-12-12 03:59:57 +11:00
Geoffrey McRae
b61ba15a9c
[client] fixed realignment when in server mode
2017-12-12 03:59:56 +11:00
Geoffrey McRae
62ab543720
[client] fixed incorrect kick timing
2017-12-12 03:59:56 +11:00
Geoffrey McRae
14efdf7314
[client] cleanup of vbo and texture allocation
2017-12-12 03:59:56 +11:00
Geoffrey McRae
7638925387
[client] code cleanup
2017-12-12 03:59:56 +11:00
Geoffrey McRae
aa191f6c90
[client] added option to show host cursor for latency testing
2017-12-12 03:59:56 +11:00
Geoffrey McRae
7ef55134ef
[client] enable support for dynamic vsync
2017-12-12 03:59:56 +11:00
Geoffrey McRae
9590b58f0f
[client] only init ttf if fps is enabled
2017-12-12 03:59:56 +11:00
Geoffrey McRae
f2216168f4
[client] make FPS counter more accurate
2017-12-12 03:59:56 +11:00
Geoffrey McRae
a7c4cdcea1
[client] add option to disable vsync
2017-12-12 03:59:56 +11:00
Geoffrey McRae
aef0328050
[client] added FPS counter
2017-12-12 03:59:56 +11:00
Geoffrey McRae
7bf35e44c5
[client] fixed missing getopt character for input scaling
2017-12-12 03:59:56 +11:00
Geoffrey McRae
695a7b183f
[client] fix output offset when aspect ratio changes
2017-12-12 03:59:56 +11:00
Geoffrey McRae
8fdb86ae28
[client] only recalculate scales on screen or guest resize
2017-12-12 03:59:56 +11:00
Geoffrey McRae
9831de92e1
[client] add mouse input scaling feature for stretched/scaled windows
2017-12-12 03:59:56 +11:00
Geoffrey McRae
2c7e7a0a0b
[client] made help for new resize option clearer
2017-12-12 03:59:56 +11:00
Geoffrey McRae
a3572b2188
[client] added option to prevent window resize
2017-12-12 03:59:56 +11:00
Geoffrey McRae
b9e3db1971
[client] enable mipmapping by default
2017-12-12 03:59:56 +11:00
Geoffrey McRae
86cf7a9cf1
[client] add the ability to maintaint the aspect ratio
2017-12-12 03:59:56 +11:00
Geoffrey McRae
f767f32a32
[client] syncronization improvements
2017-12-12 03:59:56 +11:00
Geoffrey McRae
a84480470c
[client] cosmetics
2017-12-12 03:59:56 +11:00
Geoffrey McRae
c75e7a0f2b
[client] explcit flush buffers before using them
2017-12-12 03:59:56 +11:00
Geoffrey McRae
638f836927
[client] copy the header and kick the guest early
2017-12-12 03:59:56 +11:00
Geoffrey McRae
e8ac71263b
[client] dont send up events if we didn't send a down event
2017-12-12 03:59:56 +11:00
Geoffrey McRae
3ee53dca79
[client] changed output program name
2017-12-12 03:59:56 +11:00
Geoffrey McRae
4829c0413c
[client] additional security changes
2017-12-12 03:59:56 +11:00
Geoffrey McRae
5a9688cd47
[client] added mipmapping support
2017-12-12 03:59:56 +11:00
Geoffrey McRae
f6bc62647f
[client] fixed autoResize behaviour
2017-12-12 03:59:56 +11:00
Geoffrey McRae
f8d61da618
[client] default client size to something more reasonable
2017-12-12 03:59:55 +11:00
Geoffrey McRae
cae4fa3aa6
[client] allow texture stretch when in GL buffer mode
2017-12-12 03:59:55 +11:00
Geoffrey McRae
c0507f5a15
[client] fix incorrect texture buffer index
2017-12-12 03:59:55 +11:00
Geoffrey McRae
bed2d95ccd
[client] added checks for invalid offsets by the guest
2017-12-12 03:59:55 +11:00
Geoffrey McRae
e2160a5eda
[client] Added window positional options
2017-12-12 03:59:55 +11:00
Geoffrey McRae
52ad00fb0d
[client] added client configuration options
2017-12-12 03:59:55 +11:00
Geoffrey McRae
4731b13a03
[client] initial parameter implementation
2017-12-12 03:59:55 +11:00
Geoffrey McRae
34e67b1b57
[client] added KVMGFX_HEADER_VERSION define
2017-12-12 03:59:55 +11:00
Geoffrey McRae
72b69a6659
[client] removed DrawFunc typedef
2017-12-12 03:59:55 +11:00
Geoffrey McRae
e774a0bb06
[client] removed deprectaed drawFunc and improved error handling
2017-12-12 03:59:55 +11:00
Geoffrey McRae
b221382420
[client] removed deprecated compression functions
2017-12-12 03:59:55 +11:00
Geoffrey McRae
96ae755856
[client] state struct rename
2017-12-12 03:59:55 +11:00
Geoffrey McRae
74403cce8c
[client] kick the guest early to get the first frame faster
2017-12-12 03:59:55 +11:00
Geoffrey McRae
a413362e53
[client] added changes to Makefile to include additional GL libs
2017-12-12 03:59:55 +11:00
Geoffrey McRae
249801b52b
[client] fixed RGB support
2017-12-12 03:59:55 +11:00
Geoffrey McRae
d1ef8d204a
[client] Added GL_ARB_buffer_storage support
...
This improves client performance by 4x if the video driver supports
this extension. OpenGL 4.1 is required for this feature to be used
2017-12-12 03:59:55 +11:00
Geoffrey McRae
9c90a53871
[client] Increased spice mouse ringbuffer size to avoid input overflows
...
Seems that some rare conditions will overflow the buffer on window
entry/exit, confirmed by testing performed by Clemor. This should help
with this.
2017-12-12 03:59:55 +11:00
Geoffrey McRae
f75d5b7f54
[guest] reworked mouse sync to better handle resolution changes
2017-12-12 03:59:55 +11:00
Geoffrey McRae
05d83d2311
[client] added memcpySSE
2017-12-12 03:59:55 +11:00
Geoffrey McRae
6f5eba3c01
[client] removed debug message output
2017-12-12 03:59:55 +11:00
Geoffrey McRae
b6857d94f1
[client] added support for double buffering
2017-12-12 03:59:55 +11:00
Geoffrey McRae
8140d347ff
[client] FRAME_TYPE_INVALID is never a valid type to compare
2017-12-12 03:59:54 +11:00
Geoffrey McRae
79c565f114
[client] cosmetics and removed unused defines
2017-12-12 03:59:54 +11:00
Geoffrey McRae
457b332d2a
[client] removed multi-threaded memcpy, overheads negate any gains
2017-12-12 03:59:54 +11:00
Geoffrey McRae
ea41a0e3bc
[client] added send keyboard event result checking
2017-10-31 19:11:51 +11:00
Geoffrey McRae
aa0d3d27d4
added licensing to sources
2017-10-31 19:07:16 +11:00
Geoffrey McRae
1c1d018db1
[client] removed useless/invalid define
2017-10-31 17:04:59 +11:00
Geoffrey McRae
eb4bcc8814
[client] removed useless input debugging
2017-10-31 17:04:01 +11:00
Geoffrey McRae
6e7b65023b
[client] moved common headers outside of the client project's directory
2017-10-31 16:54:09 +11:00