Selection axes index

CNA snapshot 009d40f5  ·  Development › Generated References  ·  source links pinned to 009d40f5

✓

Evidence basis: source-verified at the pinned commit. Claims on this page were checked by reading the CNA source at commit 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Derived from the CMake registries; whether a given combination builds or runs on a host is not established here.

ℹ

Generated page. Produced by python3 scripts/generate_dev_reference.py from the Git objects of CNA commit 009d40f5; do not edit it by hand. It is a syntactic inventory: it locates declarations and files, and does not establish behaviour, build success or test results.

25 public renderer identities21 implementation families7 platform implementations4 audio implementations

CNA composes a build from independent axes: which platform owns the window and events, which audio platform owns the device, and which renderer identity produces pixels. This page lists each axis from the registries that define it, so the counts used across the site have one mechanical source.

Renderer identities and their families

Identities come from cmake/RendererIdentities.cmake (CNA_RENDERER_PUBLIC_IDENTITIES); the C ABI value and C++ enumerator from the canonical table in scripts/check_renderer_identities.py; the identity-to-family map from cmake/RendererRegistry.cmake. The three sources agree (checked at generation time: the generator refuses to write this page if they disagree with each other or with the site's canonical counts). A name outside this set is a configure-time error.

Identity (CNA_GRAPHICS_RENDERER)C ABI valueC++ enumeratorImplementation familyDescriptor accessor
SDL_RENDERER1SdlRenderersdl-renderer/GetDescriptor
OPENGLES22OpenGLES2easygl/ · internalsGetDescriptorOpenGLES2
OPENGLES33OpenGLES3easygl/ · internalsGetDescriptorOpenGLES3
OPENGL334OpenGL33easygl/ · internalsGetDescriptorOpenGL33
WEBGL15WebGL1easygl/ · internalsGetDescriptorWebGL1
WEBGL26WebGL2easygl/ · internalsGetDescriptorWebGL2
VULKAN8Vulkanvulkan/ · internalsGetDescriptor
WEBGPU9WebGPUwebgpu/GetDescriptor
HEADLESS11Headlessheadless/ · internalsGetDescriptor
SOFTWARE12Softwaresoftware/ · internalsGetDescriptor
STUB13Stubstub/ · internalsGetDescriptor
DIRECTX1114DirectX11directx11/GetDescriptor
DIRECTX1215DirectX12directx12/GetDescriptor
DIRECT2D16Direct2Ddirect2d/GetDescriptor
CANVAS17Canvascanvas/GetDescriptor
HTML_DOM18HtmlDomhtml-dom/GetDescriptor
FREEDIRECT21FreeDirectfreedirect/GetDescriptor
DIRECTX922DirectX9directx9/GetDescriptor
SDL_GPU31SdlGpusdl-gpu/ · internalsGetDescriptor
OPENGL433OpenGL4opengl4/ · internalsGetDescriptor
GDI40Gdigdi/GetDescriptor
METAL42Metalmetal/GetDescriptor
FNA3D43Fna3dfna3d/GetDescriptor
SVG_DOM44SvgDomsvg-dom/GetDescriptor
PORTABLEGL46PortableGLportablegl/GetDescriptor

Platform implementations (CNA_PLATFORM)

From cmake/PlatformSelection.cmake. SDL12 and EMSCRIPTEN are reserved identifiers that are refused rather than aliased. Some implementations are host-conditional (Terminal is POSIX-only, Win32 Windows-only, X11 and Wayland need their development packages) and are refused with an explanation rather than replaced by SDL3.

ValueRole
SDL3default; SDL3 windowing, events and input
SDL2SDL2 windowing, events and input (partial services)
X11native Xlib backend, no SDL; offered only where the X development environment exists
WAYLANDnative Wayland client, no SDL and no X11 library; offered only where the Wayland development environment exists
HEADLESSno window; injected events; conformance and CI role
TERMINALPOSIX terminal session (termios); CPU-frame presentation
WIN32native user32/gdi32 backend; offered when the target is Windows

Audio implementations (CNA_AUDIO_PLATFORM)

From cmake/AudioPlatformSelection.cmake. Reserved and refused: OPENAL, WASAPI. Audio selection is independent of the platform: a headless application may use SDL3 audio, and a graphical one may choose deterministic NULL audio.

ValueRole
SDL3default; SDL3 device transport with the SDL3_mixer-backed XNA playback engine (defines SOUND_ENABLED)
SDL2SDL2 device transport; no XNA mixer
NULLdeterministic paced callback transport; no XNA mixer
ALSAnative Linux backend: libasound loaded at run time, CNA's own mixer (defines SOUND_ENABLED)

How the axes combine

The axes are validated separately and then together (see cmake/RendererCombinations.cmake and cmake/RendererSelection.cmake); not every combination is valid, and a GPU renderer needs a native window handle that the Headless and Terminal platforms do not provide. Multiple renderer identities can be compiled into one binary through CNA_GRAPHICS_RENDERERS; an API choice beats the CNA_GRAPHICS_RENDERER environment variable, which beats the compiled default. See the renderer selection internals and platform backends.

The same subsystem is explained at four altitudes. These are the neighbouring pages at each one.

Maintainer workflow
Source ownership