Ivan Molodetskikh’s Webpage
Identity v0.5 and Synchronized Scrolled Windows
Apr 5, 2023
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.
GSoC 2021: Overview
Aug 21, 2021
An overview of my summer work to implement a new screenshot UI into GNOME Shell, and demo of the screencast functionality.
GSoC 2021: Screenshots with Pointer
Aug 6, 2021
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.
Fast Half-Life Video Recording with Vulkan
Jul 27, 2021
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.
GSoC 2021: Selection Editing and Window Selection
Jul 15, 2021
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.
GSoC 2021: GNOME Shell Screenshot UI
Jun 29, 2021
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.
GSoC 2018: Overview
Aug 10, 2018
An overview of my summer work porting the librsvg filter effects from C to Rust and improving their performance.
GSoC 2018: Parallelizing Filters with Rayon
Aug 10, 2018
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.
GSoC 2018: Filter Infrastructure
Jun 8, 2018
I explain my proposed Rust infrastructure for SVG filter effects, verify its performance with benchmarks, and show an implementation of a filter primitive.