Functional gaps
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.
Functionality is intentionally or currently incomplete or unsupported; nothing violates a contract, the contract is narrower than one might expect. Every entry below exists at CNA 009d40f5; open an entry for its expected and actual behaviour, source locations, evidence and blast radius.
70 entries
| ID | Title | Subsystem | Status | Severity | Evidence basis |
|---|---|---|---|---|---|
CNA-GAP-001 | ContentLoadException derives from std::runtime_error, not System::Exception, so no Sharp Runtime catch clause spans CNA's XNA exceptions | Core & runtime | narrowed | n/a | source-verified |
CNA-GAP-002 | CNA::Logger serialises writes but not level changes, and a sink must not call back into the logger | Core & runtime | open | n/a | source-verified |
CNA-GAP-003 | CNA::Runtime and CNA::RuntimeOptions are declared in CNA/Misc.hpp but not implemented | Core & runtime | open | n/a | source-verified |
CNA-GAP-004 | Game::ShowMissingRequirementMessage is a virtual hook that nothing in CNA calls | Core & runtime | open | n/a | source-verified |
CNA-GAP-005 | DrawableGameComponent loads content once in Initialize and never follows the graphics device service | Core & runtime | open | n/a | source-verified |
CNA-GAP-006 | GraphicsDeviceManager never calls its FindBestDevice, RankDevices or CanResetDevice virtuals | Core & runtime | open | n/a | source-verified |
CNA-GAP-007 | CNA public headers export Sharp Runtime's unprefixed property macros (YES, NO, nothing, ref1, getter1, CONTAINS, INTERNAL and others) | Core & runtime | open | n/a | source-verified |
CNA-GAP-008 | SDL_GPU ShaderEffect draws bind only the first vertex stream, and the limitation report misstates ShaderEffect instancing | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-009 | Sub-pixel SpriteBatch destinations reach only EasyGL, OPENGL4 and SOFTWARE; every other renderer truncates them to whole pixels | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-010 | SpriteSortMode::Immediate does not submit each sprite as it is drawn on VULKAN, SDL_GPU, the Direct3D families and WEBGPU, which still batch below the renderer seam | Graphics & renderers | narrowed | n/a | source-verified |
CNA-GAP-011 | PresentationParameters.RenderTargetUsage is stored, cloned and exposed but never consulted by GraphicsDevice | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-012 | On HEADLESS, TextureCube::SetData throws NotSupportedException because the headless cube renderer stores no pixels, so cube-map content cannot be loaded | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-013 | METAL refuses a large part of the graphics API until it has macOS evidence: MRT, custom effects, occlusion queries, instancing, multi-stream input, back-buffer readback and several sampler/blend states | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-014 | CANVAS and FREEDIRECT ignore GraphicsDevice.Viewport and ScissorRectangle, and SDL_RENDERER ignores Viewport | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-015 | Only BasicEffect exposes XNA's parameter graph and technique name; the other stock effects publish partial, hand-built parameter tables | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-016 | Several live GraphicsDevices share process-wide window and input slots with last-writer semantics | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-017 | PresentationMode is stored but not honoured by FREEDIRECT (always letterbox), CANVAS (only FixedHeightDynamicWidth changes output) and DIRECTX9 (never read) | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-018 | EasyGL does not register Texture3D with its context-loss recovery, so volume texture contents are lost after a real WebGL/GLES context loss | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-019 | A VULKAN occlusion query counts only the first contiguous run of its tagged draws per frame | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-020 | SDL_GPU accepts ShaderEffect GLSL only in Vulkan-rule form (#version 450, explicit locations and SDL_gpu sets), so the shared GLSL ES 3.00 .cnj effect fixture does not load there | Graphics & renderers | open | n/a | recorded by CNA |
CNA-GAP-021 | DIRECTX9 BasicEffect reaches only 12 of its 32 shader variants; other combinations throw 'no matching CNA vertex layout' | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-022 | DIRECTX9 ignores mipMap for RenderTarget2D (single level, GetData above level 0 throws) and ignores the MSAA request for RenderTargetCube | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-023 | On DIRECTX9 a Texture2D can only be created with SurfaceFormat::Color | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-024 | DIRECTX11 and DIRECTX12 never use DXGI exclusive full screen: SetFullscreenState is not called and exclusiveFullscreen_ is dead state | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-025 | DIRECT2D refuses additive blending (SourceAlpha/One and One/One) and other asymmetric or non-Add blend states, and reports AdditiveBlending false | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-026 | SDL_RENDERER cannot honour TextureAddressMode.Wrap or Mirror for SpriteBatch; a Wrap draw silently shows clamped pixels | Graphics & renderers | open | n/a | recorded by CNA |
CNA-GAP-027 | HTML_DOM and SVG_DOM refuse back-buffer readback | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-028 | The METAL renderer applies KHR_materials_specular factors only and samples neither specular texture | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-029 | EasyGL GPU timers read 32-bit nanosecond results and cannot detect GL disjoint events | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-030 | FREEDIRECT keeps presenting at the old physical scale after a virtual-resolution change once the first Present has happened | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-031 | ClusteredForwardEffect binds no material textures: many punctual lights cannot be combined with a texture set | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-032 | Engine-layer PBR limits: one punctual light per PbrEffect draw, 8-bit environment cubes, no back-face normal flip for double-sided materials, no alpha-tested shadow casters | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-033 | CNA has no counterpart of XNA's MissingVertexShaderInput draw check, and renderers resolve a stock-effect draw that lacks an input differently | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-034 | The XNB DateTime reader discards the two DateTimeKind bits, so Utc and Local values load as plain tick counts | Content & XNB/CNB/CNJ | open | n/a | source-verified |
CNA-GAP-035 | Only the direct glTF route fills Model::CamerasEXT; models loaded from .cnj or .cnb carry no cameras | Models & glTF | open | n/a | source-verified |
CNA-GAP-036 | Runtime glTF import has no unit-scale option; only the offline converters can rescale a model | Models & glTF | open | n/a | source-verified |
CNA-GAP-037 | EXT_mesh_gpu_instancing is not imported: each node keeps one placement and its per-instance transforms are dropped | Models & glTF | open | n/a | source-verified |
CNA-GAP-038 | Mirrored glTF placements keep the shared winding, so under the default cull mode they render back-facing | Models & glTF | open | n/a | source-verified |
CNA-GAP-039 | The glTF vertex ABI carries two UV channels, one joint-influence set and one colour set; further sets are dropped and reported | Models & glTF | open | n/a | source-verified |
CNA-GAP-040 | A skinned glTF model cannot also carry rigid scene-node animation: tracks not driven by its skins are dropped | Models & glTF | open | n/a | source-verified |
CNA-GAP-041 | A glTF mesh placed by several nodes takes its morph-weight animation from the first of them only | Models & glTF | open | n/a | source-verified |
CNA-GAP-042 | CUBICSPLINE bone and node channels are sampled at key times and played back linearly between them | Models & glTF | open | n/a | source-verified |
CNA-GAP-043 | glTF skins with more than 72 joints are refused at import | Models & glTF | open | n/a | source-verified |
CNA-GAP-044 | glTF punctual lights are approximated as at most three directional lights; point and spot lights have no native support | Models & glTF | open | n/a | source-verified |
CNA-GAP-045 | XACT features FAudio never finished are unimplemented: QUEUE and REPLACE_QUIETEST limits, band-pass track filters, reverb sends and DSP-preset RPCs | Audio & media | open | n/a | source-verified |
CNA-GAP-046 | CNA has no sound-instance limit: InstancePlayLimitException is declared but never thrown | Audio & media | open | n/a | source-verified |
CNA-GAP-047 | XACT wave-bank entries compressed as XMA/XMA2 or WMA produce no sound | Audio & media | open | n/a | source-verified |
CNA-GAP-048 | StorageContainer::OpenFile(file, mode, access, share) ignores its FileShare argument | Storage | narrowed | n/a | source-verified |
CNA-GAP-049 | StorageDevice::DeviceChanged is declared but never raised | Storage | open | n/a | source-verified |
CNA-GAP-051 | Guide's fourteen Show* shell entry points and DelayNotifications are empty no-ops | Networking & gamer services | open | n/a | source-verified |
CNA-GAP-052 | Local gamer services have no catalogue, presence or profile data: achievement metadata is empty, Achievement::GetPicture throws, presence is never published and privileges are a fixed permissive constant | Networking & gamer services | open | n/a | source-verified |
CNA-GAP-053 | Voice chat, party invites, NetworkMachine::RemoveFromSession, arbitration/TrueSkill events and QualityOfService bandwidth are not implemented | Networking & gamer services | open | n/a | source-verified |
CNA-GAP-054 | The terminal window title is stored but never emitted, so SetTitle has no visible effect | Platforms | open | n/a | source-verified |
CNA-GAP-055 | TerminalSession does not restore or re-establish the terminal on job-control stop and continue (SIGTSTP/SIGCONT) | Platforms | open | n/a | source-verified |
CNA-GAP-056 | A foreign HWND adopted by handle is not subclassed and is absent from windows_, so the Win32 GL, Vulkan, relative-mouse and text-input services refuse it | Platforms | open | n/a | source-verified |
CNA-GAP-057 | CNA::Devices host dialogs are minimal: message boxes are unparented with no default or cancel button, tray icons have no image API, and UrlLauncher passes any string to the OS | Platforms | open | n/a | source-verified |
CNA-GAP-058 | The native Win32 platform backend has no gamepad support, no IME composition events and no file drop | Platforms | open | n/a | source-verified |
CNA-GAP-059 | In a MinGW-w64 cross tree CnaTests gets a Wine CROSSCOMPILING_EMULATOR only when the default renderer is DIRECTX9/11/12 or DIRECT2D is compiled in | Build & CI | open | n/a | source-verified |
CNA-GAP-060 | No renderer or subsystem registers an IDiagnosticsSource, and nothing registers ResourceKind::AudioVoice resources | Diagnostics & Inspector | open | n/a | source-verified |
CNA-GAP-061 | No renderer implements IResourcePreviewProvider, and the seam cannot cancel a preview ticket the agent abandons | Diagnostics & Inspector | open | n/a | source-verified |
CNA-GAP-062 | The C ABI has no route for 468 public C++ declarations that the coverage inventory records as planned | C API & bindings | open | n/a | source-verified |
CNA-GAP-063 | A fixed-step TargetElapsedTime above 500 ms never produces an Update from Game::Tick, essentially the same ceiling XNA 4.0 has | Core & runtime | open | n/a | source-verified |
CNA-GAP-064 | WEBGPU does not propagate a real device loss: OnDeviceLost only logs, so DeviceLost, the device status and the draw gate react only to the debug hooks | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-065 | The renderer capability profile has no feature for pre-compiled SPIR-V payloads, so SDL_GPU and VULKAN report every source-dialect feature Unsupported | Graphics & renderers | open | n/a | source-verified |
CNA-GAP-066 | A runtime .cnj Texture2D colorKey leaves keyed texels as straight-alpha (key RGB, alpha 0), so they are invisible only under a non-premultiplied blend state | Content & XNB/CNB/CNJ | open | n/a | source-verified |
CNA-GAP-067 | ScrollWheelValue granularity depends on the platform backend: SDL3 drops sub-notch wheel motion, Win32 and Wayland keep it | Input | open | n/a | source-verified |
CNA-GAP-068 | Video playback is unavailable on Windows, MinGW, Emscripten, Android and iOS: CNA has no FFmpeg integration for those targets yet | Audio & media | open | n/a | source-verified |
CNA-GAP-069 | Windows builds leave out Sharp Runtime's Xml.Serialization, so the XmlSerializationEXT surface of the math and input types is unavailable there | Platforms | open | n/a | source-verified |
CNA-GAP-070 | NetworkSession's Begin/End pairs are synchronous: the result is complete and the callback has run when Begin returns, and End does the work on the caller's thread | Networking & gamer services | open | n/a | source-verified |
CNA-GAP-071 | GraphicsDevice is single-threaded: its resource registry has no lock and only EasyGL and OpenGL4 lease a context, so resource creation from a loading thread is supported only for ContentManager loads on those two | Graphics & renderers | open | n/a | source-verified |