Half-Life and Counter-Strike movement communities frequently record their videos with motion blur. However, doing that fast is not a trivial task.
I talk about what goes into good motion blur and let you play with the blur parameters. I then describe my GPU-accelerated solution for fast recording of these videos, and the technical issues I’ve faced implementing it. I also analyse the performance and overhead of this code on a slow and a fast laptop.
In the new Identity update I added side-by-side comparison for images and videos. To do it, I synchronize together multiple GtkScrolledWindows. However, that’s tricky to implement correctly. This post describes the problems and how to solve them.
An overview of my summer work to implement a new screenshot UI into GNOME Shell, and demo of the screencast functionality.
I show my progress implementing HiDPI and mixed DPI support in the new GNOME Shell screenshot UI. Then I describe my implementation of pointer capture and preview and the various edge cases entailed within.
I describe the inner workings of my new video recording tool in bxt-rs. It can record in-game footage from Half-Life at 1920×1080@60 at up to 3 times faster than real-time on a reasonably powerful PC.
I explain the general principles of specialized video recording tools, show how the bxt-rs video recording integrates into the game loop, and how to share frame buffers between OpenGL and Vulkan. I then talk about how I implemented the color conversion, the video encoding step, and how I optimized the performance by using two threads and correct GPU memory types.
I show my progress on the GNOME Shell screenshot UI: the new area selection draggable corner handles, an improved opening animation, window selection, X11 support.
Wherein we meet again, for a new GSoC project to add a screenshot UI to GNOME Shell. I show a mock-up of the UI and a video demo of what I have already implemented.
An overview of my summer work porting the librsvg filter effects from C to Rust and improving their performance.
I analyze the librsvg performance on a complex SVG and parallelize two of the heaviest filters with Rayon, introducing an abstraction for parallel access to pixel data.
I describe my abstraction for safe shared access to Cairo image surfaces. I then optimize the performance of heavy filter effects by caching whether an image surface is alpha-only to skip unneeded processing. I verify the performance improvement with perf benchmarks.