Commit graph

2309 commits

Author SHA1 Message Date
Quantum
a213ee960a [client] wayland: implement signalNextFrame with frame callbacks 2021-07-31 19:05:21 +10:00
Quantum
3043296e52 [client] ds: add optional method signalNextFrame(LGEvent)
This method takes an LGEvent and signals it when the next frame should be
rendered in time for the next vblank.

We will be using this to render imgui at screen refresh rate, but this could
potentially be used later to implement a better form of vsync for supported
display servers.

This must be invoked before swapping buffers.
2021-07-31 19:05:21 +10:00
Geoffrey McRae
be9a16e8a2 [git] add libxcursor-dev to the git workflow 2021-07-31 18:26:29 +10:00
Geoffrey McRae
5e2dd589a1 [client] x11: implement cursor support for the imgui overlay
This commit adds libxcursor to the dependencies for X11.
2021-07-31 18:23:05 +10:00
Geoffrey McRae
9959578cbe [client] app: prevent buttons/keys from being held when focus is lost 2021-07-31 16:40:14 +10:00
Geoffrey McRae
971e91238a [client] main: bump the minimum fps to 60fps when showing the overlay 2021-07-31 16:19:55 +10:00
Geoffrey McRae
3143dc1e84 [client] x11: call app_handleWheelMotion for imgui scroll interaction 2021-07-31 16:12:52 +10:00
Geoffrey McRae
8898496eba [client] imgui: respect WantCaptureKeyboard
If the overlay is active and imgui has set WantCaptureKeyboard we should
ignore the escape key sequences.
2021-07-31 15:55:58 +10:00
Geoffrey McRae
7eb00bd24c [client] app: update imgui key release when guest input is disabled 2021-07-31 15:41:21 +10:00
Geoffrey McRae
a098bab114 [client] overlay: allow the fps and graph windows to be moved 2021-07-31 15:35:53 +10:00
Geoffrey McRae
7f6fd02d06 [client] x11: Add event handling for ungrabed mouse press/release
The imgui overlay requires input even if the display is not captured and
operating in raw mode. XInput2 correctly only sends
XI_Press/ReleaseButton events if the device has not been captured, as
such it's safe to handle both raw and non raw buttons events at the same
time.
2021-07-31 15:23:31 +10:00
Quantum
75e57baf6c [client] config: optionally load config from XDG_CONFIG_HOME
We look for the client config in $XDG_CONFIG_HOME/looking-glass/client.ini.
This is done because it's more conventional, and also allows us to add
additional configuration files, e.g. for the host.

We fallback to $HOME/.config as is standard, and then as a last resort use
getpwuid(getuid())->pw_dir. This is also recommended by the getpwuid manpage:

> An application that wants to determine its user's home directory should
> inspect the value of HOME (rather than the value getpwuid(getuid())->pw_dir)
> since this allows the user to modify their notion of "the home directory"
> during a login session.
2021-07-31 15:06:59 +10:00
Quantum
68d8d95266 [client] config: do not attempt to load non-files as config
Currently, we load /etc/looking-glass-client.ini and/or
~/.config/looking-glass-client.ini as long as they exist, even if they are
not files. We should only load them if they are files.
2021-07-31 15:06:37 +10:00
Quantum
7d78cba38c [client] client: release escape key on focus loss
This prevents the escape key from being treated as held down indefinitely when
losing focus while holding the escape key.
2021-07-31 15:02:57 +10:00
Quantum
7801575d99 [host] nvfbc: log error codes for various errors
This makes troubleshooting easier.

We also switch to use %d instead of 0x%x because all error codes in nvfbc.h
are negative decimal numbers.
2021-07-31 15:02:39 +10:00
Quantum
1104bd821b [common] option: make options case insensitive
It is not obvious that [DXGI] and [dxgi] are different sections in the ini file,
and only the latter works. We should just eliminate the difference.
2021-07-31 15:00:49 +10:00
Quantum
b8b70e772e [client] config: print error when app:configFile is not a valid file
This makes it clear to the user that app:configFile is at fault.
2021-07-31 14:59:00 +10:00
Quantum
64c906b801 [client] main: prevent the user from launching looking glass as setuid
We don't want to encourage craziness of people making the client suid to
bypass permission issues on the shm file.

Note: I see no evidence of this happening in the wild, but let's be
proactive.
2021-07-31 14:58:48 +10:00
Quantum
72ccd44681 [client] wayland: pass mouse wheel motion events to imgui 2021-07-31 14:58:35 +10:00
Quantum
7ca5e14938 [client] imgui: implement mouse wheel motion support
The display server should call app_handleWheelMotion as necessary.
2021-07-31 14:58:35 +10:00
Quantum
6b6b3b724a [client] wayland: reject horizontal scroll events
Currently, we handle horizontal scroll events as if they are vertical scrolls.
This is not correct and we should instead reject them.
2021-07-31 14:57:56 +10:00
Quantum
86b50cc8ab [client] imgui: initialize keymap
This allows ImGui to understand some of the basic key presses.

Also moved the include guard from kb.c to kb.h where it actually makes sense.
2021-07-31 14:57:41 +10:00
Quantum
10a27e7a27 [client] config: automatically update embedded copyright string
The refresh-copyright script now automatically updates the copyright string
embedded in config.c. In order to achieve this, refresh-copyright gained the
ability to reflow text as the situation needs.
2021-07-31 14:57:24 +10:00
Quantum
edabd1bae7 [client] imgui: remove no longer used overlay_utils.cpp 2021-07-31 14:56:49 +10:00
Quantum
f1b1da60ea [client] imgui: improve method for high DPI
We now give ImGui the true logical size of the window and tell it to scale
the framebuffer. To fix the blurry fonts, we continue to load fonts at the
scale necessary for the DPI and use FontGlobalScale to shrink the fonts back
to the logical size. The font rectangle is then expanded by the framebuffer
scaling, resulting in good text rendering.

This method has the advantage of not messing up the sizes of resizable
overlays when moving across monitors.
2021-07-31 14:56:49 +10:00
Quantum
0402dd521a [client] imgui: ask display server to display cursors 2021-07-31 14:56:04 +10:00
Quantum
11a5864969 [client] wayland: implement support for other cursors 2021-07-31 14:56:04 +10:00
Quantum
da28db2ca4 [client] ds: change showPointer to setPointer for more cursors
Currently everything only supports LG_POINTER_NONE and LG_POINTER_SQUARE.
2021-07-31 14:56:04 +10:00
Quantum
c991de7ccd [client] imgui: improved overlay input handling
1. Overlay always releases confines.
2. Overlay turns off mouse sync with guest.
2021-07-31 14:54:53 +10:00
Netboy3
d9a3b6523c [doc] install: Update client keybindings and command line options 2021-07-31 14:54:40 +10:00
Quantum
ea2651e39b [client] imgui: darken background when rendering overlays
This replaces the alert that says whether the overlay is enabled or not.

Also, we now always display the help menu in overlay mode.
2021-07-29 19:10:15 +10:00
Quantum
a980cd9406 [client] egl: log when EGL_EXT_image_dma_buf_import is unavailable 2021-07-29 17:03:44 +10:00
Quantum
1c58b3a087 [client] imgui: implement keyboard input forwarding and capture 2021-07-29 17:02:59 +10:00
Quantum
065d90c3f7 [client] imgui: add mode to forward mouse input to imgui 2021-07-29 17:02:59 +10:00
Quantum
6c64965703 [client] egl: make functions that do not need linking static 2021-07-29 16:54:56 +10:00
Quantum
134829cbf2 [client] imgui: make graph y-axis configurable
The default of [0, 50] makes sense for FPS/UPS graphs, but does not for
things like the import graph. The latter should not take more than 5 ms
for sure.

This commit allows the min/max y-axis value to be specified when registering
the graph.
2021-07-29 15:54:15 +10:00
Quantum
aff3bff8b0 [common] framebuffer: fix copy when source and dest pitch differs
We used to increment the source buffer index by width * bpp, not by pitch.
This is incorrect and the root cause behind #670.

This is a regression that appeared in 196050bd23.
2021-07-29 10:18:35 +10:00
Quantum
2ea84cd07e [common] ivshmem: use consistent device numbering on Windows
We now enumerate all IVSHMEM devices, sort them based on PCI bus, slot,
and function numbers, then index from the resulting order. This should
be consistent across boots.

To help the user identify the correct IVSHMEM device, we also print the
list of IVSHMEM devices on startup.
2021-07-29 10:17:33 +10:00
Quantum
996b9e7e7b [common] time: fully implement all functionality for windows
We implement nanotime by converting QueryPerformanceTimer output with
floating point arithmetic. This is necessary to preserve precision on
platforms where each tick is not an integer number of nanoseconds.

Furthermore, struct timespec is included C11 and appears to be supported
on Windows, so we no longer need to #ifdef it out.
2021-07-29 10:16:52 +10:00
Quantum
009ae02e32 [client] egl: add graph tracking time taken to import frame
This tracks the time taken to load the frame buffer into an OpenGL texture.
2021-07-29 10:08:52 +10:00
arcnmx
552a37122a [host] app: add throttleFPS option 2021-07-28 02:47:24 +10:00
Quantum
6ed1f4662d [client] imgui: report failed font atlas building
Also removed the inefficient code to build the default atlas.
2021-07-26 17:08:02 +10:00
Geoffrey McRae
5f5f497cbd [host/common] windows: provide delayExecution via nsleep
This change moves this platform specific sleep to `common` as the OS
agnostic `nsleep` function.

Ref PR #661
2021-07-26 16:36:56 +10:00
Quantum
120fe63c0f [client] egl: keep x/y coordinates of cursor rectangle non-negative
This shifts the rectangles upwards instead of cutting off the rectangles,
but it keeps the code simple.
2021-07-26 07:56:46 +10:00
Quantum
181b165a4b [client] egl: generate correct cursor damage with cursor rotation 2021-07-25 17:35:29 +10:00
Geoffrey McRae
dafd7e7b42 [host] app: when running in sync mode send frame repeats as needed 2021-07-25 17:10:51 +10:00
Quantum
d9cdc8d26c [client] egl: rotate damage rectangles according to client side rotation 2021-07-25 16:56:48 +10:00
Quantum
d0722349e6 [client] egl: make damage overlay support rendering rotated rectangles 2021-07-25 16:56:48 +10:00
Geoffrey McRae
2ef80a5d34 [client] overlay: cosmetic changes to the overlay display 2021-07-25 16:49:25 +10:00
Quantum
e7761abf3c [client] wayland: invalidate window on configure
This avoids sending potentially meaningless damage values after a surface
configuration event.
2021-07-25 15:36:44 +10:00