C++ cross-platform library that provides a platform-agnostic access to low-level systems, such as windowing and input.
Find a file
Arnor Nolen 1fda631c4a
All checks were successful
ci/woodpecker/pr/ci Pipeline was successful
ci/woodpecker/push/ci Pipeline was successful
feat: Make Window class polymorphic.
2026-02-24 21:12:00 +02:00
.woodpecker ci: Fix multiline commit messages. 2026-01-07 00:39:23 +02:00
cmake feat(cmake): Combine Cmut scripts into a single file. 2025-12-10 22:57:38 +02:00
deps/wayland-protocols Drop dependency on wayland-protocols. 2025-06-28 03:11:22 +03:00
example feat: Make Window class polymorphic. 2026-02-24 21:12:00 +02:00
include feat: Make Window class polymorphic. 2026-02-24 21:12:00 +02:00
infra/container/linux-buildtools ci: Add linux docker image. 2025-12-19 16:24:05 +02:00
packaging feat(cmake): New preset system. 2025-12-03 23:41:23 +02:00
src feat: Make Window class polymorphic. 2026-02-24 21:12:00 +02:00
test fix(cmake): Remove presets. 2025-12-10 14:29:12 +02: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
.cmake-format Add tests for preset generator. 2025-11-15 16:27:08 +02:00
.gitignore chore(misc): Add clangd cache and CLion directory to .gitignore. 2025-12-17 15:26:58 +02:00
CMakeLists.txt build: Disable LTO by default. 2025-12-19 16:24:05 +02: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