C++ cross-platform library that provides a platform-agnostic access to low-level systems, such as windowing and input.
Find a file
2025-12-03 23:49:57 +02:00
cmake fix(cmake): Fix toolchain presets missing Ninja inheritance. 2025-12-03 23:49:57 +02:00
deps/wayland-protocols Drop dependency on wayland-protocols. 2025-06-28 03:11:22 +03:00
example Store string in std::string instead of std::string_view. 2025-11-04 22:11:51 +02:00
include Propagate DPI awareness to the user. 2025-11-26 16:51:17 +02:00
packaging feat(cmake): New preset system. 2025-12-03 23:41:23 +02:00
profiles Initial commit 2025-02-24 22:31:42 +02:00
src Fix scaling on Windows. 2025-11-26 17:49:03 +02:00
test Rename preset generator script. 2025-11-26 21:47:00 +02:00
.clang-format Formatting rules, exporting headers. 2025-10-08 00:07:47 +03:00
.clang-tidy Disable lambda return types and compiler option. 2025-10-27 01:01:53 +02:00
.clangd Disable lambda return types and compiler option. 2025-10-27 01:01:53 +02:00
.cmake-format Add tests for preset generator. 2025-11-15 16:27:08 +02:00
.gitignore Ignore all folders starting from build. 2025-07-02 13:24:27 +03:00
CMakeLists.txt Disable colored diagnostics. 2025-12-01 23:18:38 +02:00
CMakePresets.json feat(cmake): New preset system. 2025-12-03 23:41:23 +02:00
LICENSE Initial commit 2025-02-24 22:31:42 +02:00
README.md Update readme on presets. 2025-11-15 14:56:20 +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.

Features:

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

Limitations:

  • Currently only provides access to windowing and input on Windows and Wayland.

See Future plans for more information.

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).

How to build

Using CMake presets is the easiest way to build the project:

# Check which presets are available.
cmake --list-presets # To see configure presets.
cmake --build --list-presets # To see build presets.
ctest --list-presets # To see test presets.
cpack --list-presets # To see packaging presets.
cmake --workflow --list-presets # To see workflow presets.

Keep in mind, different platforms may have a different list of available presets. Here's an example of how to build the project using "release" preset:

# Use "release" preset to build.
cmake --preset release
cmake --build --preset release

If presets do not cover your use cases, you can use usual cmake workflow to build the project.

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

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

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

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

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.