Releases: gnif/LookingGlass
B3-rc1
With 364 commits since Beta 2 I am very excited to announce the Beta 3 release Candidate 1.
If you are still using Beta 2 please be sure to read through the changelog below before upgrading.
A big thank you to the contributors that have helped to get Looking Glass to where it is today! Your support is greatly valued!
If you like this project and find it useful and would like to help out you can support me directly using the following platforms.
Changelog:
- OBS: Added full cursor support
- All: Added HDR RGB16 support
- Client: show system strerrr for failure to open shmem file
- All: added frame format version field and format change events to avoid checking on every frame.
- Client: new option
win:dontUpscale
to prevent upscaling. - Client: new shortcut, ScrLck+V to toggle the video feed when using a dedicated monitor.
- Client: reworked event logic fixing several stutter issues
- Host: service won't start if there is no IVSHMEM devices available.
- Client: Direct DMA Upload from IVSHMEM for VM-VM configurations using the KVMFR module. (Removes a CPU memory copy). Note: Will not work with NVidia Linux GPU binary drivers due to lack of DMABUF support.
- Host: increased the cursor shape buffer size for large cursors (you may need to increase your ivshmem memory size!)
- Client: EGL only - Added Color Blind support for Protanope, Deuteranope and Tritanope (option
egl:cbMode
) as per http://www.daltonize.org/search/label/Daltonize - Client: added large clipboard transfer support
- Client: now defaults to grabbing the keyboard when focused (shortcuts are now passed to the VM), can be disabled with
input:grabKeyboardOnFocus=n
- Client: Spice input handling has been re-designed and is far improved.
- Cilent: Fixed bug with EGL initialization which prevented front-buffer rendering when doubleBuffering is disabled (default).
- Host: Installer much prettier thanks to @JJRcop
- Host: Fixed issue with launching on pre-windows 10 systems (note: I am not testing on anything older then Windows 10, YMMV)
- VM-VM Module: fixed building on 5.10 (note,
/dev/uio0
is now gone, use/dev/kvmfr0
instead) - Client: New option
input:ignoreWindowsKeys
to work around WMs that bind the key - Client: New keybind ScrLck+Windows to passthrough the key to the guest for WMs that bind this key.
- Client: Now processes mouse input via XInput, giving access to raw mouse input while in capture mode (enable with
input:rawMouse
). - Client: New
autoCapture
mode (disabled by default, enable withinput:autoCapture
), tries to keep the mouse captured without entering full capture mode when a game/application in the guest also has captured the mouse. Note this is NOT full capture mode and as such will not benefit frominput:mouseSens
orinput:rawMouse
. (please no bug reports for failure to hold onto the mouse, this is best effort only). - Client: New
input:mouseSmoothing
option (enabled by default) which applies basic integration on the mouse movements when not in raw mode (capture enabled andinput:rawMouse
on). This helps to reduce aliasing artifacts in movements on the guest. - Client: New
input:captureOnly
feature (default disabled) to only enable input via SPICE while in capture mode. - Client: New
win:rotate
feature to rotate the display output (EGL only at this time). - Client: New hotkey ScrLck+R to rotate the display on demand.
- Host: Now properly supports rotated display outputs.
- Client: Thanks to xyene and quantum on the VFIO discord, Wayland is mouse support is greatly improved and clipboard sync is now working. (NOTE: this is not an announcement of general Wayland support, Xorg is still the preferred platform due to Wayland limitations).
- Host: when installed as a service it is now able to capture the windows login screen.
- Host: Numerous QOL NvFBC fixes.
- Host: The service will now terminate if the application reports a fatal error, or the application is closed by the user via the tray icon.
B2
Beta 2 Final Release
Changes since Beta 1
- Don't hide the cursor when SPICE is disabled
- The host application can now install and run as a service removing
the need for PsExec or a scheduled task to start the application. - There is now a NSIS installer for the host application which
installs the service and will handle seamless upgrades without the
need to uninstall prior versions. - The host application now runs with
High
scheduler priority - The host application will now stop capture and go to sleep if there
are no subscribers (clients). - The host application no longer opens the log file but instead shows
it's location. This is to prevent the elevated process from being
abused to run processes as theSYSTEM
user account. - The client framebuffer copy spinlock is less agressive preventing
CPU stalls on some systems due to starving the system scheduler. - Installing the spice guest tools no longer breaks mouse support.
- Fixed EGL frame ordering bug.
- Fixed frame limiter issues.
- Better cursor icon support on initial connect.
- The LG client can no longer be run as root.
- Host now reports it's version to the client for logging and debug.
- Client now reports host and client versions on mismatch.
- Performance improvments to EGL.
- New client option to capture input by default at startup.
- Timers implemented for the linux host (now builds again).
- SIMD implemented to improve framebuffer copy.
- Don't stop the host LGMP timer when restarting capture.
- Boost GPU kernel thread priority so vsync/frame limits are not.
needed anymore. - OBS plugin now always fetches the most recent frame on the frame
tick. - Improved frame sync logic in the client
- Always use spice mouse host mode to fix issue with spice guest tools
breaking mouse support. - LGMP submodule updated to incorporate fix that was causing random
invalid timeouts. - [misc] minor readme update
- [client] drop the default FPS target to 60 now that the fps is
dynamic
I (Geoffrey McRae) am the primary developer behind this project and I
have invested thousands of hours of development time into it.
If you like this project and find it useful and would like to help out
you can support me directly using the following platforms.
Beta 1
Beta 1
Support
Please be aware that this project consists of literally thousands of hours of my personal time, if you like what you see here it would be greatly appreciated if you would be so kind as to donate towards the cost in development using one of the following methods:
Download
All downloads are now available at https://looking-glass.hostfission.com/downloads.
Important changes to the host application
Please be aware that the host application now requires Administrator access and as such launching via the Run
registry entry no longer works. To have the host application launch at startup you now need to setup a Scheduled Task in Windows. Documentation on how to perform this will be provided in the coming days on the Looking Glass website.
Documentation
As of writing this, the LG website documentation is out of date and will be updated over the next few days, please be patient. In the meantime please see the various README.md files in this project as they are currently the most up to date.
Known Issues & Workarounds (Please do not report these issues)
- The host application doesn't show any information on a standard windows command prompt.
- This is due to how windows handles terminals and will be fixed at a later time. In the meantime please use a posix compatible terminal such as GitBash if you wish to see CLI output from the host executable.
- NvFBC doesn't work on GeForce cards
- This is not a bug! You must have a Quadro or better as NVIDIA have decided that this feature is for "Pro" users only, write them and complain.
- 4K is still slow
- Some titles at 4K will still be slow due to hardware/driver limitations, there is nothing we can do about this, things that may help are:
- Enable vsync in the title
- Run in windowed mode
- Use rivatuner statistics server (RTSS) to limit the frame rate
- If you are using a Vega/Navi in Windows, set the card to "Performance" mode.
- Some titles at 4K will still be slow due to hardware/driver limitations, there is nothing we can do about this, things that may help are:
Changes of note since A12
- Complete rewrite of the host application in C supporting cross platform compilation (Linux and Windows only currently)
- Massive improvement to DXGI capture performance, using windowed mode in applications is no longer required and 4K resolutions are now possible if your hardware is up to the task.
- If supported, HDR (ARGB10) capture is now supported and used when appropriate.
- NvFBC support has been updated and is now included in the pre-built host executable (You still need a Quadro or better).
- SPICE: full bi-directional clipboard support
- NightVision/Brightness hotkey ScrLck+N (EGL only)
- Disable input hotkey ScrLck+I
- FullScreen hotkey ScrLck+F
- Command line arguments and settings file parser has been rewritten
- The host application now has an icon
- The host application now has a tray icon and logs to a file
- Mouse sensitivity hotkeys ScrLck+Ins/ScrLck+Del
- Switch term hotkeys ScrLck+F1..F12 to send Ctrl+Alt+F1...F12
- Client FPS limiter is now auto set based on your refresh rate for optimal performance.
- Client debug back-trace support (this can be disabled, but if you have a crash no support can be rendered without this feature, or a full backtrace from GDB).
- KVMFR module for VM->VM and Linux Guests now has a DKMS config.
a12
Code Cleanup:
- [client] egl: move cursor code into a separate unit
- [client] egl: move fps code into a separate unit
- [client] egl: move desktop code into a separate unit
Features
- [host] Continual build integration
- [client] add switch to disable alert messages
- [client] Add OpenGL ES support (EGL)
- [client] Add YUV420 support to EGL
- [client] Add cursor rendering to EGL
- [client] Move SDL text rendering into a separate ABI
- [client] Update OpenGL renderer to use new font ABI
- [client] move FPS calculations out of OpenGL
- [client] Add FPS rendering to EGL
- [client] Add text rendering to EGL
- [client] Add splash rendering to EGL
- [client] Add alert rendering to EGL
- [client] Replicate mipmaping from OpenGL into EGL
- [client] Make EGL the default renderer
Bugs fixed:
- [client] don’t scale the mouse when in capture mode
- [client] Add support for wayland
- [host] Remove accidental usage of AVX instructions
- [host] Fix random host re-initialization crash
- [host] Fix rare cursor invisible bugs
- [client] fix early pre-connect rendering
Tuning:
- [client] Decouple host/client mouse sync
- [host] Profile DXGI
- [client] Schedule frame updates instead of using timeouts
a11
Alpha 11 Release
Changes of note since A10:
- preventBuffer was altered to be more compatible. This may cause high CPU usage on NVidia cards due to poor driver implementation by NVidia. If you are affected turn off this feature with
-o OpenGL:preventBuffer=0
- a FPS limiter was added which defaults to 200FPS for those running without vsync.
- New client option
-K
to specify the FPS limit - Unix socket support for spice was added, specify port
0
to use. - Added AMD Pinned Memory support for AMD cards, improves performance with later AMD cards.
- Added kernel module (KVMFR) for inter-vm communications (Linux VM guest -> Windows VM guest), see README in the module directory for more information.
- Fixed numerous cursor bugs
- Decoupled cursor data stream from video stream, this helps (but doesn't solve) with performance and micro stutter issues.
- Implemented
memcpySSE
in pure assembler to squeeze every possible bit of performance out of it. - OpenSSL has been replaced with
nettle
andhogweed
due to GPL license incompatibility reasons.
a10
Alpha 10 Release
This release changes how the guest VM needs to be configured, please refer to the quickstart guide for how to configure libvirt as ivshmem-server is no longer used
a9
Alpha Version 9 Release
- Adds multi threaded memory copy which helps with high resolution (4K) performance.
- Performance improvements to DXGI DD
- Improved client CPU utilization, doesn't cause Xorg to hang randomly anymore.
Windows application needs to be updated, see attached build
a8
Alpha Version 8 Release
This update is quite large as it completely changes the way that rendering is performed so as to prevent holding up the capture API on the host. It decouples the capture rate from the client's frame rate.
Note: Due to time constraints I have not yet updated the OpenGL-Basic renderer for the new API and as such it is disabled for the moment. I plan to integrate the basic renderer into the standard one and have an option to enable the basic mode when I get some more time.
Windows application needs to be updated, see attached build
a7
Alpha Version 7 Release
Fixes of note:
- The host application now waits for the Secure Desktop(UAC, LockScreen, etc...) rather then terminating.
- The host application now waits around to restart after switching users
- The KVMFR header format was optimized, old fields removed and restructure to use a "Frame" for cursor shapes.
Windows application needs to be updated, see attached build
a6
Alpha Version 6 Release
Fixes of note:
- DXGI DD capture no longer stalls waiting for frames, this fixes an issue where the client would appear hang at startup while waiting for the first frame.
- Don't update mouse scaling factors until the cursor position is known, this stops the cursor jumping around like mad before the first frame.
- Postpone mouse events till the renderer is setup, this fixes a bug which would cause the client to crash when trying to set the cursor shape.
- OpenGL now uses double buffering and disable vsync option now works.
Windows application needs to be updated, see attached build