Glossary of XNA and CNA terms
Evidence basis: source-verified at the pinned commit. Claims on this page were checked by reading the CNA source at commit c1c316b9; unless a sentence says otherwise, nothing here was built or executed. sharp-runtime entries were checked at its commit 41b918c9 and xna4-spec at fedc17aa; they describe those revisions.
Short, checked definitions of the XNA and CNA terms used across libcna.com, as they apply to CNA snapshot c1c316b9. Each entry says what the term means now, corrects a common older reading where one exists, and links to the page that carries the detail. Terms are grouped by subject; within a group they are alphabetical.
Project, versions and ecosystem
alpha.1(v0.1.0-alpha.1)- The only tagged CNA release (tag date 2026-08-20). This snapshot is 3,687 commits later but still reports the product version string
0.1.0-alpha.1; the string alone cannot tell the two apart. See Releases and versioning. - C ABI version
- The version of CNA's experimental native C interface: 0.46.0 at this snapshot. It moves independently of the product version and is not a statement that the C library builds (no CI job builds it). See Experimental C API.
- CNA
- A native C++ library, compiled as C++23, that reimplements the XNA 4.0 programming model (
Microsoft::Xna::Framework) for C++ programs: a framework and runtime, not a game and not an editor. SDL3 is its default platform and audio implementation, not a requirement, and rendering goes through one of 14 selectable renderer identities. See CNA and XNA 4.0. - cna-samples, cna-examples
- Consumer repositories. cna-samples (Ms-PL) ports Microsoft's XNA Game Studio 4.0 samples and asks whether CNA runs historical XNA code; cna-examples (MIT) is one application cataloguing live demos of every CNA area. Both are evidence for their own pinned CNA revision. See the ecosystem.
- easy-gl, meta-gl
- Sibling libraries: easy-gl is a toolkit-independent C++ wrapper over OpenGL and OpenGL ES (its README says C++20; its CMake requires C++23) that creates no window or context; meta-gl is the typed function-loading layer under it. CNA needs them only for the three GL identities. Not to be confused with EasyGL, CNA's internal implementation family.
- FNA
- An independent open-source C# reimplementation of XNA 4.0 (Ms-PL), binary-compatible with XNA assemblies. CNA's day-to-day behavioural reference and, through an executed
FNA.dllharness, one of its oracles, but not its authority on API surface (FNA omits some XNA members) and not the tie-breaker when measured XNA behaves differently. The local reference tree selects SDL3 by default; "FNA on SDL2" is historical shorthand. - sharp-runtime (
SharpRuntime) - The sibling C++23 library that implements a practical subset of .NET
System.*:System::Object,System::EventHandler<T>,TimeSpan, exceptions, collections, streams and the primitive aliases (bytecs,intcs,Single,String, in namespaceSharpRuntime). Required by every CNA build, on itsapple/m4-stabilizationbranch. It is not a CLR: no JIT, no garbage collector, no runtime reflection. - snapshot (
c1c316b9) - The CNA commit
c1c316b9c7a846ce8002809c151fcd1af14942c9on branchapple/m4-stabilization(2026-10-09) that this site documents. It is a development snapshot, not a release. - XNA 4.0
- Microsoft's managed game framework (XNA Game Studio 4.0) for Windows, Xbox 360 and Windows Phone, the API CNA reimplements. Its reference assemblies (XML documentation plus DLL metadata) are the authority for what the API surface is; its runtime, executed under Wine and DXVK, is the authority for the pixels in the oracle corpus.
- xna4-spec
- A sibling repository of 544 XML type files in 19 namespace directories, transcribed from Microsoft's XNA 4.0 web documentation (checked at
fedc17aa). A searchable offline inventory for audits; CNA's code, CMake and workflows do not use it, and its census reads Microsoft's own XML and DLL metadata instead. Verify a row independently before relying on it.
The name "CNA"
CNA's repository gives no expansion of its name. The title of README.md is just "CNA". A search of the README, AGENTS.md, CLAUDE.md and the docs/, misc/ and plans/ trees at c1c316b9 finds no statement of what the letters stand for. Treat "CNA" as a proper name, not an acronym. Any spelled-out form is an interpretation, not project terminology.
Build and selection
- audio implementation (
CNA_AUDIO_PLATFORM) - Which audio-device layer a build uses:
SDL3(default),NULLorALSA. OnlySDL3andALSAcarry the mixer that XNA playback,MediaPlayerand XACT need. See Platforms: audio. - CNA_CNAEXT, CNA::CnaExt
CNA_CNAEXTis the CMake option (default OFF) that compiles the standalone CNAEXT graphics extensions inCNA::Graphics(the ASCII, CRT and colour-depth effects,DebugDrawand the portable shader-package types);CNA::CnaExtis an interface link target composingcna_graphics_extwithcna_devices_ext. Neither is the CNAEXT marker. See What CNAEXT is.- CNA_STRICT_XNA_API
- A preprocessor definition, not a CMake option, that turns every
CNAEXT-marked declaration into a[[deprecated]]one in the translation units that define it; with-Werror=deprecated-declarationsa use becomes an error. See the strict check. - EasyGL profiles
OPENGLES3,OPENGL33andWEBGL2: three public identities served by CNA's one internal EasyGL implementation family (built on easy-gl) and distinguished by a GL profile. They are not cosmetic variants: WebGL 2 has no indexed colour masks, texture swizzle, compute or indirect draw, and onlyOPENGL33draws base-vertex ranges natively.EASYGLis not an accepted selector.- implementation family
- The code that implements one or more renderer identities: 12 families serve the 14 identities, because EasyGL serves three. Evidence is usually gathered per family and qualified per identity.
- multi-renderer build
- A build configured with
CNA_GRAPHICS_RENDERERSthat links a compatible set of renderers and chooses one at run time before the first graphics device exists; the choice latches on the first successful renderer creation and fallback is off unless requested. The default build contains one renderer. See Runtime renderer selection. - platform implementation (
CNA_PLATFORM) - Who owns windows, events, input, timing and host services:
SDL3(the default; Windows, X11, Wayland, macOS, iOS, Android and the browser are reached through SDL’s own video drivers),HEADLESSorTERMINAL. Independent of the renderer and of audio, within named exclusion rules. - renderer identity
- One of the 14 public names that
CNA_GRAPHICS_RENDERERaccepts, listed incmake/RendererIdentities.cmake, each with a fixed C ABI value that is never reassigned. A name outside the list given toCNA_GRAPHICS_RENDERERor as a member ofCNA_GRAPHICS_RENDERERSis a configure-time error, never a silent fallback, and so is a reserved name (one whose C ABI value CNA keeps unassigned) given as aCNA_RENDERER_<NAME>=ONswitch; aCNA_RENDERER_<X>=ONswitch for a name that is neither public nor reserved (an oldD3D9orEASYGLspelling, a typo) is not read by anything and the platform default renderer is configured (CNA-BUG-269). Defaults:WEBGL2under Emscripten,OPENGLES3on Linux,SDL_RENDERERelsewhere. - SDL3
- The cross-platform windowing, input and audio library CNA vendors as submodules and uses by default for its platform and audio layers. It is not itself a renderer:
SDL_RENDERERis built on SDL3's 2D renderer API andSDL_GPUon its GPU API, and aHEADLESSorTERMINALplatform withNULLorALSAaudio and a renderer that needs no SDL lets a build avoid SDL entirely.
Renderers and graphics back ends
DIRECTX9(formerlyD3D9)- The Windows-only Direct3D 9 renderer, built with MinGW-w64 and exercised under Wine and DXVK. It compiles Microsoft's Stock Effects HLSL (vendored verbatim through FNA) and is the one renderer held to XNA's own pixels at tolerance 0 by the oracle corpus.
D3D9is an old spelling that now stops the configure step. DIRECTX11- The Direct3D 11 renderer. Its Direct3D helpers (stock shaders, format and state tables) live in
modules/renderers/common/d3dand generates render-target mip chains with the nativeID3D11DeviceContext::GenerateMipscall. FNA3D- The renderer that links FNA's own 3D library. It runs compiled XNA effects unconditionally (through MojoShader) and uses FNA3D's internal driver choice, which is not a CNA identity; it cannot execute
ShaderEffectsource. HEADLESS- A renderer that never rasterises. It counts calls in one of three modes chosen by
CNA_HEADLESS_MODE: Fast (counters only; argument checks are skipped), Validation (the default, which also throwsHeadlessValidationExceptionon misuse a real renderer would reject) or Trace (Validation plus a call log and resource creation sites). Back-buffer readback throwsNotSupportedExceptioninstead of fabricating a frame; older descriptions of it returning the lastClear()colour no longer apply. METAL- The macOS-only native renderer and the most conservative 3D one.
- MojoShader
- The translator of Direct3D 9 Effect Framework bytecode from the FNA stack. CNA fetches it with FNA3D and uses it for the
FNA3Drenderer and for everyCNA_*_COMPILED_EFFECTSoption. It is not a loader for HLSL.fxsource, DXBC or MGFX. See Effects: compiled effects. SDL_GPU- The renderer on SDL3's GPU API. SDL's GPU API mandates a fixed descriptor-set layout, so CNA remaps each portable SPIR-V payload into it and turns push-constant blocks into uniform buffers (
SdlGpuSpirvBindings.hpp). CustomShaderEffectsource compiles GLSL to SPIR-V through libshaderc, only in builds that find it and never on Windows, Apple or Emscripten targets. SDL_RENDERER- A 2D-only renderer on SDL3's 2D renderer API, and the default everywhere except Linux and Emscripten.
SOFTWARE- A real CPU triangle rasteriser (edge functions, perspective-correct interpolation, per-pixel depth test) that needs no GPU and no display, so it can produce deterministic pixels on a headless machine. It renders off-screen (the Terminal platform displays it) and accepts
ShaderEffectsource for compatibility without executing it. STUB- A no-op renderer that reports every capability false; it proves that the framework survives without rendering.
VULKAN- The Vulkan renderer. Its
ShaderEffectroute takes SPIR-V words rather than GLSL text. WEBGPU- An experimental renderer with two routes: native through wgpu-native, and in the browser through Emscripten's WebGPU port. Custom shaders are WGSL.
"Backend" in CNA's own identifiers
The selectable graphics implementation is a renderer: the option is CNA_GRAPHICS_RENDERER, the enum is GraphicsRendererType and the implementations live under modules/renderers. In CNA's own identifiers, "backend" usually names something else: an internal service implementation behind a device or network interface. Examples are ICompassBackend and IMotionBackend for the sensors (implemented on Android by AndroidCompassBackend and AndroidMotionBackend), IVibrateBackend for vibration, and ENetBackend for SystemLink networking (ENetBackend.hpp).
Two graphics enums in the core module keep the older word. GraphicsBackendCategory (GraphicsBackendCategory.hpp: Native, TranslationLayer, Software, Web, Diagnostic) and GraphicsBackendMaturity (Production, Supported, Experimental, Historical, Deprecated) classify a renderer. For example, getGraphicsBackendCategory(GraphicsRendererType) returns the category of the given renderer. They are descriptors, not a second selection axis; see the renderer internals. A source search for "backend" therefore finds both meanings. A search for "renderer" finds only the graphics one.
Graphics API
Effect- The XNA base class for a shader program bound to a
GraphicsDevice. CNA has three routes behind it: renderer-owned stock effects; compiled XNA/FNA Direct3D 9 Effect Framework bytecode throughEffect(GraphicsDevice&, bytes)and the XNBEffectReaderon 11 of the 14 identities (FNA3D always; the other 10 only in a build that turns on their default-OFFCNA_*_COMPILED_EFFECTSoption); and the CNAEXTShaderEffect. See Effects: effect paths. - golden-image test
- A captured frame compared with a retained reference image under a stated tolerance and environment. CNA's glTF goldens are renderer-owned (each renderer compared with its own past output), which proves determinism and regression detection, not agreement with a reference renderer; the reference's provenance is part of the claim.
GraphicsCapability- A CNA enum (19 members) that
GraphicsDevice::SupportsCapabilityanswers for the active renderer. The answer is a hint: the base renderer default is still permissive for the original members unless a renderer narrows them, and a Boolean cannot express device-dependent limits. See Capability reporting. GraphicsDevice- The central XNA class every draw, state change and resource operation passes through on its way to the selected renderer. See Graphics state and How renderers work.
GraphicsProfile(Reach,HiDef)- XNA's two feature profiles.
Reachis the default and is enforced on every renderer, so multiple render targets, occlusion queries, 32-bit indices, float targets and large cubes throw unlessHiDefis requested. - oracle corpus (XNA oracle)
- 39 scenes with reference images captured from the genuine XNA 4.0 runtime under Wine and DXVK on Linux, diffed pixel for pixel at tolerance 0. CNA's records report
DIRECTX9matching all 39; other renderers are measured, not held to it, and no workflow runs it. See the XNA 4.0 oracle corpus. - parity fixture
- One of 32 renderer-neutral programs that state their expected result in their own assertions and are registered for four renderer families; the oracle is the assertions, not XNA.
PbrEffect,SkinnedPbrEffect- CNAEXT glTF 2.0 metallic-roughness material effects with no XNA counterpart; always compiled. Support is qualified per renderer family (FNA3D refuses PBR draws). See Effects: CNA-only effects.
RendererCapabilityProfile- The finer CNAEXT capability answer: 32 features, 22 limits, per-format usage masks and a text report, read through
GetRendererCapabilityProfileEXT()and related queries. See the capability profile. ShaderEffect- The CNAEXT route for renderer-native custom shader source or binaries. The dialect is renderer-specific, some renderers accept it without executing it, and it does not make a renderer support compiled XNA effects. Ask
ExecutesShaderEffectSourceEXT(). See Shader effects. SkinnedModelEXT- A CNAEXT GPU-skinnable mesh, skeleton and animation-clip set with keyframed bone tracks, for games that bring their own skinned characters. It is unrelated to the XNA avatar API (avatars are drawn by XNA's own
AvatarRenderer, with its own 71-bone rig) and separate from the sample-derivedSkinningDataandAnimationPlayer. SpriteBatch- The primary 2D drawing API in XNA and CNA, available on every pixel-producing renderer. See SpriteBatch.
- stock effects
- The five built-in XNA effects:
BasicEffect,AlphaTestEffect,DualTextureEffect,EnvironmentMapEffectandSkinnedEffect(plus the internalSpriteEffectthatSpriteBatchuses). VertexDeclaration- A renderer-independent vertex layout: a stride plus
VertexElementrecords naming offsets, formats and usages. It is pure data and can be constructed on a 2D-only renderer; the 3D draw that would use it is where such a renderer refuses.
Content
.cnb- CNA's checksummed binary content container and the default output of the build-time
cna-contenttool; tried after.xnb. See CNB format. .cnj- CNA's JSON content descriptor: a typed envelope whose payload rules belong to the loader for each type, not one universal schema. A registered loose-file reader can prefer a same-named
.cnjbefore its native formats. ContentManager- The XNA class that resolves an asset name to loaded content.
Load<T>("name")returnsTby value and tries.xnb, then.cnb, then loose files. See ContentManager. MemoryStream- sharp-runtime's in-memory stream, which CNA uses wherever content bytes are already in memory (for example the XNB decompressor in
XnbDecompression.cpp). AfterClose()its I/O throwsObjectDisposedExceptionbutGetBuffer()andToArray()keep working, as in .NET. Its raw-buffer constructor is writable by default, matching .NET'sMemoryStream(byte[])(checked at sharp-runtime41b918c9); descriptions of a read-only default are out of date. ReflectiveReader<T>- XNA's implicit reader for types serialised without a dedicated writer, driven by .NET reflection at load time. CNA has no runtime reflection, but it is not a dead end: the CNAEXT
ReflectiveTypeReaderBuilder<T>lets a game declare the field list once, in wire order (serialised properties first, then public fields), and registers the reader and any enum readers it needs (ReflectiveTypeReader.hpp). See Tutorial 148. .xnb- XNA's compiled content container. CNA reads it with 61 built-in type readers (60 without native 128-bit integers), which a
Gameregisters in its constructor; a stand-aloneContentManagermust register them itself. Reader coverage is finite, and unsupported reader names or versions fail explicitly.cna-contentcan also write.xnbat build time. See XNB loading.
Services
- ENet
- The UDP networking library vendored in CNA and wrapped by an internal back end (
CNA/Internal/Net/ENetBackend.hpp) behind theNetnamespace's SystemLink sessions. GamerServices- The XNA namespace for Xbox LIVE-era profiles, achievements, leaderboards and system UI. CNA implements it itself and is not Xbox LIVE compatible: by default gamers are local offline profiles created through
Guidesign-in, achievements and leaderboards persist to local disk, and theGuideis a CNA-drawn system UI whose standard pages are real, where FNA keeps permanent no-op stubs. An optional CNA gamer-services server, configured outside game code, adds accounts, social features and relayed online sessions. See GamerServices. Storage- The XNA namespace for user-data persistence (
StorageDevice,StorageContainer). CNA implements it overstd::filesystemwith path containment, keeps XNA's fake-asynchronousBegin*/End*shape (the callback runs beforeBegin*returns), and takes its root from an environment-variable chain; in a browser build the root is an IndexedDB-backed mount, so saves persist across reloads (not in a threaded build that keeps WasmFS). See Storage. - XACT
- Microsoft's Cross-platform Audio Creation Tool format and engine. CNA parses the
.xgs,.xsband.xwbfiles and plays them through the selected mixer: SDL3_mixer with the SDL3 audio implementation, CNA's own mixer with ALSA. WithNULLaudio the classes compile but produce no sound. See Audio.
Conventions and evidence
CNAEXT- An empty marker macro, defined in
CNAHelper.hpp, placed on a declaration inside an XNA-shaped namespace that is not part of XNA 4.0. It compiles to nothing unlessCNA_STRICT_XNA_APIis defined. It is not theCNA_CNAEXToption, and it never removes anything from a build. See the CNAEXT catalogue. EXTsuffix- A naming convention for many non-XNA members and types, such as
GameWindow::MinimizeEXT()andRestoreEXT(). It is independent of the marker: some marked members have no suffix, and a few suffixed public members carry no marker, so neither spelling decides what is an extension. getXProperty()/setXProperty()- How every C# property of the XNA API is spelled in C++; the
CNA::Graphicsextension classes usegetX()/setX()instead because they have no XNA name to preserve. See translation conventions. - representation
- A declaration with the documented shape exists. The census finds 331/331 XNA 4.0 runtime types and 3,627/3,627 documented members represented; representation is not behaviour. See compatibility levels.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- User guide
- XNA 4.0 compatibility · The 14 renderers at a glance
- Architecture
- Architecture overview
- Internals
- Internals index
- Reference
- Module index · Selection axes
- Deep dives
- CNA and XNA 4.0 · The CNA ecosystem · CNAEXT catalogue