Vulkan Demo
Description
This example demonstrates how to integrate Vulkan into the Aurora OS, which uses Wayland and Lipstick as its windowing system and compositor.
The example is based on an adaptation of one of the projects from the Sascha Willems Vulkan Examples repository and shows
how to implement a full rendering cycle on devices running Aurora OS.
The application uses the VK_KHR_wayland_surface extension
to create a Vulkan surface that is displayed directly on the Wayland compositor. This allows for high-performance rendering without intermediate graphics layers,
which is especially relevant for embedded and mobile systems.
Workflow:
- Connecting to the Wayland server
The program establishes a connection with the local Wayland compositor, which manages windows and surfaces.
Wayland provides low-level interaction with the screen, buffer management, and user input.
Wayland documentation. - Creating a Wayland surface After connecting, a wl_surface is created, which serves as a container for visualizing content. A Vulkan swapchain will later be attached to this surface to provide frame updates.
- Initializing Vulkan The application initializes Vulkan, a low-level API for rendering. The following are created here:
- Vulkan instance
- Physical and logical device (GPU)
- Command queue
- Frame chain (swapchain) associated with Wayland surface
Vulkan specification.
- Integration with Lipstick
Lipstick is a compositor used in Aurora OS, based on Wayland.
It is responsible for rendering the user interface and windows, as well as managing their layers and transparency.
Lipstick documentation. - Rendering and image output After successful initialization of Vulkan and Wayland, the main rendering loop is created. Each frame is formed in Vulkan and output directly to the screen via the Wayland compositor. This approach ensures minimal latency and maximum performance.
Dependencies:
- Vulkan - provided as a compiled library that is installed along with the application.
Table of Contents
- Compatibility
- Branch info
- Install and launch
- Screenshots
- Project Structure
- Terms of Use and Participation in Development
Compatibility
Attention. The example can only be run on physical devices.
The application works correctly starting with Aurora OS 5.2 and above.
Branch info
Application versions conform to the branch naming convention.
Install and launch
Installation
The Vulkan dependency is provided as a git submodule. Before building the example, make sure it has been downloaded correctly.
Launch
Currently, there is no correct way to stop an application launched via firejail. To terminate it, you need to kill the ru.auroraos.VulkanDemo process.
You can find this process using the command:
ps aux | grep VulkanDemo
after connecting to the device via ssh. Output:
4671 defaultu /usr/bin/ru.auroraos.VulkanDemo...
Kill the process:
devel-su kill -9 4671
Screenshots
Project Structure
The project has an application structure based on C++ and QML for Aurora OS.
- 3rdparty the directory contains examples and libraries in C++ Sascha Willems Vulkan Examples.
-
application the directory contains application files for the Aurora OS.
- assets the directory contains additional application resources.
- cmake the directory contains additional CMake files.
- data the directory contains data for configuring the application.
- icons the directory contains application icons.
- shaders the directory contains source files for example shaders.
- src the directory contains the C++ source files for the application.
- CMakeLists.txt the file describes the project structure for the cmake build system.
- ru.auroraos.VulkanDemo.desktop the file defines the display and launch parameters for the application.
- patches the directory contains patches for the correct operation of the Vulkan examples.
-
rpm the directory contains the rpm package build settings.
- ru.auroraos.VulkanDemo.spec the file is used by the rpmbuild tool.
Terms of Use and Participation in Development
The source code of the project is provided under license, which allows to use it in third-party applications.
To participate in the development of the project, please read the member agreement. If you plan to submit your own source code for inclusion in the project, you will need to accept the CLA terms and conditions.
Participant information is listed in the AUTHORS file.
The Code of Conduct is the current set of rules of the Open Mobile Platform Company, which informs about the expectations for interaction between community members when communicating and working on projects.

