C++ cross-platform library that provides a platform-agnostic access to low-level systems, such as windowing and input.
  • C++ 84.1%
  • CMake 13.5%
  • Shell 2%
  • Dockerfile 0.4%
Find a file
Arnor Nolen 869d96f10e
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
test: Add multi-window tests. (#24)
Add multi-window tests, reorganize existing tests.

Reviewed-on: #24
2026-06-08 16:24:10 +00:00
.woodpecker fix: Add compatibility with libcxx. (#22) 2026-06-04 23:18:48 +00:00
cmake fix: Add compatibility with libcxx. (#22) 2026-06-04 23:18:48 +00:00
examples feat: Remove noexcept to allow widening contracts in future. (#23) 2026-06-05 11:49:17 +00:00
include feat: Remove noexcept to allow widening contracts in future. (#23) 2026-06-05 11:49:17 +00:00
infra fix: Add compatibility with libcxx. (#22) 2026-06-04 23:18:48 +00:00
src feat: Remove noexcept to allow widening contracts in future. (#23) 2026-06-05 11:49:17 +00:00
tests test: Add multi-window tests. (#24) 2026-06-08 16:24:10 +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: Stop using trailing return types. (#13) 2026-04-27 13:04:53 +00:00
.clang-tidy fix: Use umbrella header for win32 includes. (#16) 2026-05-27 18:42:01 +00:00
.clangd fix: Use umbrella header for win32 includes. (#16) 2026-05-27 18:42:01 +00: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 build: Use CMake option() instead of set(CACHE BOOL). (#21) 2026-06-04 18:56:57 +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