C++ cross-platform library that provides a platform-agnostic access to low-level systems, such as windowing and input.
  • C++ 86%
  • CMake 12.1%
  • Shell 1.7%
  • Dockerfile 0.2%
Find a file
Arnor Nolen e6ba299639
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
chore: Fix clang-tidy warnings given by new tool version. (#10)
New warnings have been detected locally using a newer clang-tidy version. CI still uses an older clang-tidy version and does not detect these warnings.

Reviewed-on: #10
2026-04-15 19:12:27 +00:00
.woodpecker ci: Upgrade gersemi version. (#9) 2026-04-14 21:14:21 +00:00
cmake build: Add a CMake message about default build type. (#8) 2026-04-14 17:43:21 +00:00
examples chore: Fix clang-tidy warnings given by new tool version. (#10) 2026-04-15 19:12:27 +00:00
include feat: Make Window class polymorphic. 2026-02-24 21:12:00 +02:00
infra ci: Upgrade gersemi version. (#9) 2026-04-14 21:14:21 +00:00
src chore: Change project folders to use more widely accepted structure. (#7) 2026-03-16 14:31:54 +00:00
tests chore: Change project folders to use more widely accepted structure. (#7) 2026-03-16 14:31:54 +00:00
thirdparty/wayland-protocols chore: Change project folders to use more widely accepted structure. (#7) 2026-03-16 14:31:54 +00:00
.clang-format chore(misc): Specify clang-format version. 2025-12-17 15:31:32 +02:00
.clang-tidy feat: Make Window class polymorphic. 2026-02-24 21:12:00 +02:00
.clangd chore(misc): Remove unused profiles, remove .clangd CompilationDatabase. 2025-12-10 22:48:46 +02:00
.gersemirc ci: Add CMake formatter (gersemi). (#5) 2026-03-12 21:03:29 +00:00
.gitignore chore(misc): Add clangd cache and CLion directory to .gitignore. 2025-12-17 15:26:58 +02:00
CMakeLists.txt chore: Change project folders to use more widely accepted structure. (#7) 2026-03-16 14:31:54 +00:00
LICENSE chore(misc): Update the license year. 2025-12-10 23:09:41 +02:00
README.md chore(misc): Add info to README about testing and packaing the project. 2025-12-10 23:22:19 +02:00
suppressions.txt Add reset function. 2025-03-30 21:44:33 +03:00

NDL (Nolen's DirectMedia Library)

C++ cross-platform library that provides a platform-agnostic access to low-level systems, such as windowing and input.

Currently supported platforms:

  • Wayland;
  • Windows.

Features:

  • Supports creating and managing multiple windows;
  • Input events are received per each window.

Future plans

In future, this library may provide access to other low-level platform-dependent abstractions.

Plans:

  • Audio support;
  • Touch input support;
  • Controller input support;
  • GPU-accelerated rendering using Vulkan.

There are no plans to provide GPU-accelerated rendering using OpenGL, DirectX or Metal. GPU-accelerated rendering using Vulkan should be sufficient to cover all GPU-accelerated needs.

Dependencies

This library makes use of native platform APIs and has NO dependencies.

Obviously, it still depends on platform-specific libraries/tools (e.g. libwayland and wayland-scanner on Wayland).

Building

Use the usual cmake workflow to build the project.

With multi-config generators (e.g. MSVC):

cmake . -Bbuild
cmake --build build --config Release -j0

With single-config generators (e.g. Make/Ninja):

cmake . -Bbuild/Release -DCMAKE_BUILD_TYPE=Release
cmake --build build/Release -j0

Testing

To run tests, use ctest after building:

# Adjust according to build directory.
ctest --test-dir=build/Release --output-on-failure --schedule-random -j0

Packaging

To create a package, use cpack after building:

# Adjust according to build directory.
cpack --config build/Release/CPackConfig.cmake