-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathshowcase.html
More file actions
424 lines (374 loc) · 27.3 KB
/
Copy pathshowcase.html
File metadata and controls
424 lines (374 loc) · 27.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Showcase - CNA Demos & Real-World Usage</title>
<meta name="description" content="CNA showcase - browser-playable demos, real-world game ports, XNA sample ports, and platform validation status.">
<meta property="og:type" content="website">
<meta property="og:site_name" content="CNA">
<meta property="og:url" content="https://libcna.com/showcase.html">
<meta property="og:title" content="Showcase - CNA Demos & Real-World Usage">
<meta property="og:description" content="CNA showcase - browser-playable demos, real-world game ports, XNA sample ports, and platform validation status.">
<link rel="stylesheet" href="css/style.css">
<link rel="icon" href="favicon.svg" type="image/svg+xml">
<link rel="canonical" href="https://libcna.com/showcase.html">
<link rel="stylesheet" href="css/prism-tomorrow.min.css">
<script>(function(){try{var t=localStorage.getItem("cna-theme");if(t==="light"||t==="dark")document.documentElement.setAttribute("data-theme",t);}catch(e){}})();</script>
</head>
<body>
<a class="skip-link" href="#main-content">Skip to content</a>
<nav class="nav">
<div class="nav-container">
<a href="index.html" class="nav-brand">CNA</a>
<button class="nav-toggle" aria-label="Toggle navigation" aria-expanded="false">
<span></span><span></span><span></span>
</button>
<div class="nav-menu">
<a href="index.html" class="nav-link">Home</a>
<a href="about.html" class="nav-link">About</a>
<a href="features.html" class="nav-link">Features</a>
<a href="architecture.html" class="nav-link">Architecture</a>
<a href="documentation.html" class="nav-link">Documentation</a>
<a href="tutorials.html" class="nav-link">Tutorials</a>
<a href="demos.html" class="nav-link">Demos</a>
<a href="showcase.html" class="nav-link">Showcase</a>
<a href="videos.html" class="nav-link">Videos</a>
<a href="roadmap.html" class="nav-link">Roadmap</a>
<a href="contact.html" class="nav-link">Contact</a>
<a href="search.html" class="nav-link">Search</a>
<a href="https://github.com/openeggbert/cna" class="nav-link nav-link--github" target="_blank" rel="noopener">GitHub</a>
<a href="https://discord.gg/vrnc4n6DaE" class="nav-link nav-link--discord" target="_blank" rel="noopener">Discord</a>
</div>
<button class="theme-toggle" type="button" aria-label="Switch to light theme" title="Switch to light theme">
<svg class="theme-icon-light" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M12 17a5 5 0 1 1 0-10 5 5 0 0 1 0 10zm0-2a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.5 4.9l1.4-1.4 2.1 2.1-1.4 1.4L3.5 4.9zm13.5 13.5l1.4-1.4 2.1 2.1-1.4 1.4-2.1-2.1zM19.1 3.5l1.4 1.4-2.1 2.1-1.4-1.4 2.1-2.1zM5.6 17l1.4 1.4-2.1 2.1-1.4-1.4L5.6 17zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></svg>
<svg class="theme-icon-dark" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M12.3 22a10 10 0 0 1-1.6-19.9c.6-.1 1 .5.8 1a7.9 7.9 0 0 0 9.7 10.6c.5-.2 1 .3.9.8A10 10 0 0 1 12.3 22z"/></svg>
</button>
</div>
</nav>
<main id="main-content">
<div class="page-header">
<div class="container">
<span class="section-label">Showcase</span>
<h1>Showcase</h1>
<p>Browser-playable demos, real-world game ports, XNA sample ports, and platform validation — CNA in action across multiple targets.</p>
</div>
</div>
<!-- ================================================================
Section 1: Browser Demos
================================================================ -->
<section class="section">
<div class="container">
<h2>🌐 Browser Demos</h2>
<p>CNA's EasyGL (OpenGL ES 3.0) renderer compiles to WebAssembly via Emscripten and renders via WebGL 2. The demos below run directly in a modern browser — no installation required. They also double as manual smoke tests for the Emscripten/WebGL 2 target: if they load and respond to input, that target is healthy.</p>
<div class="cards cards--2" style="margin-top:1.75rem;">
<div class="card">
<span class="card-icon">🏠</span>
<div style="display:flex; align-items:center; gap:0.75rem; margin-bottom:0.5rem;">
<h3 style="margin:0;">House 3D Demo</h3>
<span class="status-badge status-done">Live</span>
</div>
<p>A 3D procedural house scene built entirely from CNA primitives: exterior walls, a pitched roof, windows, a door, interior floors, and surrounding ground. The player can walk and jump with full gravity. Rendered via <code>BasicEffect</code> and the EasyGL renderer, compiled to WebAssembly with Emscripten.</p>
<p>Validates 3D matrix transforms, camera projection, per-vertex lighting, player physics, and the game loop — all running in-browser at interactive frame rates.</p>
<div style="margin-top:auto; padding-top:1rem;">
<a href="demos/house3ddemo/cna_house3d_demo.html" class="btn btn-primary btn-sm" target="_blank" rel="noopener">▶ Play in Browser</a>
</div>
</div>
<div class="card">
<span class="card-icon">🎨</span>
<div style="display:flex; align-items:center; gap:0.75rem; margin-bottom:0.5rem;">
<h3 style="margin:0;">CNA 2D Demo</h3>
<span class="status-badge status-done">Live</span>
</div>
<p>A 2D sprite demo exercising the <code>SpriteBatch</code> API: texture loading, draw calls with position/rotation/scale, tinted sprites, and layered rendering. Runs in the browser via the same Emscripten/WebGL 2 pipeline as the 3D demo.</p>
<p>Acts as a manual regression check for 2D rendering correctness on the Emscripten target. Also validates the content loading pipeline for PNG textures under WebAssembly.</p>
<div style="margin-top:auto; padding-top:1rem;">
<a href="demos/cnademo/CNADEMO.html" class="btn btn-primary btn-sm" target="_blank" rel="noopener">▶ Play in Browser</a>
</div>
</div>
</div>
<div class="callout callout--info" style="margin-top:2rem;">
<span class="callout-icon">📌</span>
<p><strong>Note:</strong> alpha.1 contains 21 workflow files, including focused Emscripten, multi-renderer, platform, Apple/Metal, declared C API and subsystem gates; the C API final target is compile-blocked and the Windows D3D/GDI lanes remain manual. Those workflows do not continuously launch these hosted demo files or cover every browser, renderer and driver combination. Treat a successful local browser run as separate visual evidence, not as an implication from the repository CI matrix.</p>
</div>
</div>
</section>
<!-- ================================================================
Section 2: Real-World Validation
================================================================ -->
<section class="section section--alt">
<div class="container">
<h2>🎯 Verification against the real XNA runtime</h2>
<p>Unit tests verify individual types in isolation. What they cannot verify is whether CNA behaves the way the real XNA runtime behaved, or whether the full programming model hangs together when actual game code drives it. Three things address that, and all three are checked mechanically rather than by eye.</p>
<div class="cards" style="margin-top:1.75rem;">
<div class="card">
<span class="card-icon">🎯</span>
<h3>Pixel-exact against real XNA</h3>
<p>CNA maintains an <strong>XNA oracle corpus</strong>: 39 scenes under <code>tools/xna-oracle/</code>, rendered by a real C#/XNA reference renderer and diffed against CNA's DIRECTX9 output at <code>--tolerance 0</code>.</p>
<p>This is the strongest correctness claim on the site: not "looks right", but byte-identical to what the original runtime produced. The DIRECTX9 renderer exists largely to make this comparison possible — it uniquely targets pixel-exact XNA 4.0 authenticity.</p>
</div>
<div class="card">
<span class="card-icon">🔄</span>
<h3>Differential testing against FNA</h3>
<p>A real running FNA build lives under <code>tools/fna-reference/</code> and dumps its observable behaviour as JSON. <code>tools/cna-reference/</code> produces the C++ counterpart dump, and <code>scripts/compare-fna-reference.py</code> diffs the two.</p>
<p>Where XNA's documented behaviour is ambiguous, this settles it empirically instead of by interpretation. A separate compile-time <code>CNAEXT</code> purity check turns every non-XNA declaration into a <code>[[deprecated]]</code> warning under <code>-Werror</code>, keeping the XNA surface honest.</p>
</div>
<div class="card">
<span class="card-icon">💾</span>
<h3>Real ported games</h3>
<p>Two genuinely separate projects drive CNA with real game code rather than test harnesses:</p>
<ul style="margin-top:0.5rem;">
<li><strong><a href="https://github.com/openeggbert/cna-craft" target="_blank" rel="noopener">cna-craft</a></strong> — a 13,766-line port of fogleman/Craft, a voxel game, onto CNA.</li>
<li><strong><a href="https://github.com/openeggbert/cna-extended" target="_blank" rel="noopener">cna-extended</a></strong> — 101,461 lines: a C++23 port of MonoGame.Extended plus a non-upstream <code>World3DEXT</code> 3D scene layer.</li>
</ul>
<p style="margin-top:0.75rem;">Alongside them, CNA itself ships 28 demo programs under <code>examples/</code> — 2D, audio, XACT, input, devices, avatar, GamerServices and networking demos, plus <code>house3d_demo</code>.</p>
</div>
</div>
<h3>What the oracle corpus actually looks like</h3>
<p>Four of the 39 scenes. Every one of these frames was drawn by the real Microsoft XNA 4.0 runtime — they are the reference images, not CNA screenshots. CNA's DIRECTX9 renderer must reproduce each of them byte for byte. The full set is described on the <a href="docs/verification.html#oracle">verification page</a>.</p>
<div class="cards">
<figure class="card">
<img src="img/oracle/colored3d.png" alt="A triangle on a cornflower-blue background with red, green and blue vertex colours blended smoothly across its face." width="256" height="256" loading="lazy">
<p>Vertex-coloured triangle.</p>
</figure>
<figure class="card">
<img src="img/oracle/alphatest_quad.png" alt="A quad with only its left half drawn — a red block above a white block — the right half discarded by the alpha test." width="256" height="256" loading="lazy">
<p>Alpha test discarding half a quad.</p>
</figure>
<figure class="card">
<img src="img/oracle/envmap_fresnel_quad.png" alt="A square shading from bright orange-brown at the top to near-black at the bottom, on cornflower blue." width="256" height="256" loading="lazy">
<p>Fresnel-weighted environment reflection.</p>
</figure>
<figure class="card">
<img src="img/oracle/sprite_sortmode_backtofront_quad.png" alt="A brown square on a black background, the topmost sprite after back-to-front depth sorting." width="256" height="256" loading="lazy">
<p>Back-to-front sprite sorting.</p>
</figure>
</div>
<div class="callout callout--info" style="margin-top:2rem;">
<span class="callout-icon">📌</span>
<p><strong>The honest framing:</strong> CNA is a research-grade porting-experiment framework, not yet a ship-a-commercial-game framework. What the evidence on this page supports is that the XNA programming model works, that rendering matches the original runtime where it has been measured, and that the test suite is large and real. It does not yet support a claim that any commercial title has shipped on it.</p>
</div>
</div>
</section>
<!-- ================================================================
Section 2: Real-World Validation
================================================================ -->
<section class="section">
<div class="container">
<h2>🏃 Real-World Validation — Speedy Blupi</h2>
<p>Unit tests verify individual types and subsystems in isolation. What they cannot verify is whether the full XNA programming model hangs together when real game code drives it. The Speedy Blupi port answers that question.</p>
<div class="cards" style="margin-top:1.75rem;">
<div class="card">
<span class="card-icon">🎮</span>
<h3>What Speedy Blupi validates</h3>
<p>Speedy Blupi is a classic open-source action game. Porting it to CNA exercises the full stack simultaneously:</p>
<ul style="margin-top:0.5rem;">
<li><strong>SpriteBatch</strong> — layered sprite rendering with correct depth ordering</li>
<li><strong>Input handling</strong> — keyboard and gamepad state each frame</li>
<li><strong>Audio</strong> — <code>SoundEffect</code> and <code>SoundEffectInstance</code> for per-event sounds</li>
<li><strong>Content loading</strong> — texture and audio asset pipeline</li>
<li><strong>Game loop semantics</strong> — fixed-timestep <code>Update</code> / variable-timestep <code>Draw</code></li>
</ul>
</div>
<div class="card">
<span class="card-icon">✅</span>
<h3>What it proves</h3>
<p>Real-world XNA-style game code works on CNA. The port did not require changes to the game's core logic — only the platform-facing layer was adapted. This demonstrates that:</p>
<ul style="margin-top:0.5rem;">
<li>CNA's API shape is close enough to XNA 4.0 that porting is mechanical, not a rewrite.</li>
<li>The framework is stable enough to run a multi-system game loop without crashing or producing rendering artifacts under sustained play.</li>
<li>Audio, input, and rendering subsystems interoperate correctly when driven by real game state.</li>
</ul>
</div>
<div class="card">
<span class="card-icon">📱</span>
<h3>Platform targets</h3>
<p>The Speedy Blupi port records these project targets:</p>
<ul style="margin-top:0.5rem;">
<li><strong>Linux x86_64</strong> — primary desktop target, EasyGL renderer</li>
<li><strong>Android</strong> — SDL_RENDERER/NDK project path; revalidate against the exact CNA release used to package it</li>
<li><strong>WebAssembly</strong> — Emscripten/WebGL 2 build in progress</li>
</ul>
<p style="margin-top:0.75rem;">Consumer-project results are useful evidence for that project's pinned revision, not a continuous alpha.1 platform gate. CNA itself has no Android workflow at this tag.</p>
</div>
</div>
</div>
</section>
<!-- ================================================================
Section 3: cna-samples
================================================================ -->
<section class="section section--alt">
<div class="container">
<h2>📚 Sample Applications — cna-samples</h2>
<p>The <a href="https://github.com/openeggbert/cna-samples" target="_blank" rel="noopener">cna-samples</a> repository contains direct ports of the original XNA Game Studio 4.0 sample suite. Each one follows the original C# source as closely as possible — the point is to test CNA's API against what real XNA code actually demanded, not to write flattering new demos.</p>
<p><strong>63 of the 86 addressable samples build today</strong>, including Platformer, MarbleMaze, RolePlayingGame, CatapultWars, HoneycombRush, NinjAcademy, GameStateManagement, Audio3D and the peer-to-peer networking samples — spanning 2D primitives, collision, AI and pathfinding, particles, complete 2D games, 3D audio, touch gestures and LAN multiplayer.</p>
<p>The 23 that don't build are the most informative number on this page, because they nearly all fail for <em>the same reason</em>: they ship custom <code>.fx</code> shaders, and CNA cannot compile HLSL bytecode. BloomSample, ShadowMapping, NormalMapping, SkinningSample, PerPixelLighting, DistortionSample and the rest are blocked on that one gap rather than on anything scattered across the API. Close it and most of them come along.</p>
<div class="cards cards--2" style="margin-top:1.75rem;">
<div class="card">
<span class="card-icon">▪</span>
<div style="display:flex; align-items:center; gap:0.75rem; margin-bottom:0.5rem;">
<h3 style="margin:0;">PrimitivesSample</h3>
<span class="status-badge status-done">Ported</span>
</div>
<p>Port of the original XNA Game Studio 4.0 <strong>Primitives Sample</strong> demonstrating 2D primitive rendering: lines, triangles, rectangles, and circles drawn using <code>SpriteBatch</code> and procedurally generated textures.</p>
<p>Validates: <code>SpriteBatch.Begin</code>/<code>End</code>, pixel-texture creation, 2D coordinate mapping, and the basic game loop with variable-size window support.</p>
</div>
<div class="card">
<span class="card-icon">⌖</span>
<div style="display:flex; align-items:center; gap:0.75rem; margin-bottom:0.5rem;">
<h3 style="margin:0;">Primitives3D</h3>
<span class="status-badge status-done">Ported</span>
</div>
<p>Port of the original XNA Game Studio 4.0 <strong>3D Primitives Sample</strong> demonstrating 3D shape rendering: box, sphere, cylinder, torus, and teapot primitives rendered with <code>BasicEffect</code> lighting and per-object transform matrices.</p>
<p>Validates: <code>BasicEffect</code> with ambient/diffuse/specular lighting, <code>VertexBuffer</code>/<code>IndexBuffer</code> management, view/projection matrix setup, and the 3D rendering pipeline end-to-end.</p>
</div>
<div class="card">
<span class="card-icon">🏆</span>
<div style="display:flex; align-items:center; gap:0.75rem; margin-bottom:0.5rem;">
<h3 style="margin:0;">CatapultWars</h3>
<span class="status-badge status-done">Ported</span>
</div>
<p>Port of the original XNA Game Studio 4.0 <strong>Catapult Wars</strong> — a complete two-player turn-based artillery game with scoring, animated sprites, and game-state screens.</p>
<p>Validates: a full game loop end-to-end, not just an isolated API — sprite animation, input handling, scoring, and screen transitions working together.</p>
</div>
<div class="card">
<span class="card-icon">📌</span>
<div style="display:flex; align-items:center; gap:0.75rem; margin-bottom:0.5rem;">
<h3 style="margin:0;">GameStateManagement</h3>
<span class="status-badge status-done">Ported</span>
</div>
<p>Port of Microsoft's <strong>Game State Management</strong> sample: a reusable screen-stack framework (menus, gameplay, pause, transitions) used as the foundation for many of the other official XNA sample games.</p>
<p>Validates: a layered <code>GameComponent</code>/screen architecture on top of CNA's <code>Game</code> base class.</p>
</div>
<div class="card">
<span class="card-icon">🧩</span>
<div style="display:flex; align-items:center; gap:0.75rem; margin-bottom:0.5rem;">
<h3 style="margin:0;">Pathfinding & FlockingSample</h3>
<span class="status-badge status-done">Ported</span>
</div>
<p>Ports of the XNA AI sample pair covering grid-based pathfinding and boid-style flocking/steering behavior, alongside related ports (<code>ChaseAndEvade</code>, <code>WaypointSample</code>, <code>AimingSample</code>, <code>FuzzyLogic</code>).</p>
<p>Validates: math-heavy gameplay code (vectors, steering forces, grid search) ported faithfully from C# to C++23.</p>
</div>
<div class="card">
<span class="card-icon">🔊</span>
<div style="display:flex; align-items:center; gap:0.75rem; margin-bottom:0.5rem;">
<h3 style="margin:0;">Audio3D & GesturesSample</h3>
<span class="status-badge status-done">Ported</span>
</div>
<p>Ports covering positional 3D audio playback and touch gesture recognition (tap, drag, pinch, flick) — the two least-graphics-focused corners of the XNA API surface.</p>
<p>Validates: <code>SoundEffect3D</code>-style positional audio and <code>Microsoft::Xna::Framework::Input::Touch</code> gesture handling outside of pure rendering code.</p>
</div>
</div>
<div class="callout callout--note" style="margin-top:2rem;">
<span class="callout-icon">🔗</span>
<p><strong>Repository:</strong> All sample ports live at <a href="https://github.com/openeggbert/cna-samples" target="_blank" rel="noopener">github.com/openeggbert/cna-samples</a>. Each sample includes build instructions and mirrors the structure of the original XNA sample project. Additional XNA 4.0 sample ports are added as API coverage expands.</p>
</div>
</div>
</section>
<!-- ================================================================
Section 4: Platform Validation
================================================================ -->
<section class="section">
<div class="container">
<h2>🖥 Platform Validation</h2>
<p>CNA is built on SDL3, which provides the portability layer. The table below reflects current validated state — "validated" means demos or game code has been built and run on real hardware or a real browser, not merely that the code compiles.</p>
<div class="table-wrap" style="margin-top:1.75rem;">
<table>
<thead>
<tr>
<th>Platform</th>
<th>Renderer</th>
<th>Status</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Linux x86_64</strong></td>
<td><code>EasyGL</code> + <code>SDL_RENDERER</code></td>
<td><span class="status-badge status-done">Validated</span></td>
<td>Primary source and CI platform. The tag's Linux workflows exercise several configured slices, not every renderer or every test definition. EasyGL's <code>OPENGLES3</code> identity is the Linux default.</td>
</tr>
<tr>
<td><strong>Android</strong></td>
<td><code>SDL_RENDERER</code></td>
<td><span class="status-badge status-partial">Partial</span></td>
<td>Source and CMake/NDK integration exist, including Android sensor paths. Alpha.1 has no Android workflow lane, so do not promote configure/cross-build support into a runtime-observed device claim.</td>
</tr>
<tr>
<td><strong>WebAssembly / Browser</strong></td>
<td><code>EasyGL</code> (WebGL 2)</td>
<td><span class="status-badge status-done">Validated</span></td>
<td>House 3D Demo and CNA 2D Demo are hosted WebGL 2 examples. The tag also has focused Emscripten multi-renderer and HTML DOM workflow evidence; neither substitutes for testing every browser renderer in target browsers.</td>
</tr>
<tr>
<td><strong>Windows</strong></td>
<td><code>SDL_RENDERER</code>, <code>DIRECTX9</code>, <code>DIRECTX11</code>, <code>DIRECTX12</code></td>
<td><span class="status-badge status-partial">Partial</span></td>
<td>Native MSVC and MinGW-w64 cross-build paths exist. Direct3D/GDI workflow lanes in alpha.1 are manually dispatched, and there is no automatic MinGW/Wine lane at the tag. Report a concrete configured build or runtime run rather than treating source support as continuous Windows validation.</td>
</tr>
</tbody>
</table>
</div>
<div class="callout callout--warn" style="margin-top:1rem;">
<span class="callout-icon">⚠</span>
<p><strong>Renderer note:</strong> CNA 0.1.0-alpha.1 exposes 50 identities across 46 implementation families. A default build contains one selected with <code>CNA_GRAPHICS_RENDERER</code>; an opt-in <code>CNA_GRAPHICS_RENDERERS</code> build can contain several compatible families and select one before device creation. This page demonstrates only a tiny subset, so do not generalize its output or capabilities to the full inventory. See <a href="docs/rendering-backends.html">Renderers</a> for the source-audited matrix and <a href="docs/runtime-renderer-selection.html">Runtime Renderer Selection</a> for the multi-renderer boundary.</p>
</div>
</div>
</section>
</main>
<footer>
<div class="footer-inner">
<div class="footer-top">
<div class="footer-brand">
<div class="footer-brand-name">CNA</div>
<p>Documentation snapshot for CNA 0.1.0-alpha.1, the first tagged pre-release. CNA exposes 50 renderer identities across 46 implementation families; APIs may change before 1.0.</p>
</div>
<div class="footer-col">
<h4>Project</h4>
<ul>
<li><a href="about.html">About</a></li>
<li><a href="features.html">Features</a></li>
<li><a href="architecture.html">Architecture</a></li>
<li><a href="roadmap.html">Roadmap</a></li>
</ul>
</div>
<div class="footer-col">
<h4>Docs</h4>
<ul>
<li><a href="docs/getting-started.html">Getting Started</a></li>
<li><a href="docs/building.html">Building</a></li>
<li><a href="docs/platforms.html">Platforms</a></li>
<li><a href="docs/rendering-backends.html">Renderers</a></li>
<li><a href="docs/faq.html">FAQ</a></li>
</ul>
</div>
<div class="footer-col">
<h4>Community</h4>
<ul>
<li><a href="https://github.com/openeggbert/cna" target="_blank" rel="noopener">GitHub</a></li>
<li><a href="https://discord.gg/vrnc4n6DaE" target="_blank" rel="noopener">Discord</a></li>
<li><a href="demos.html">Demos</a></li>
<li><a href="videos.html">Videos</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</div>
</div>
<div class="footer-bottom">
<p>CNA is not affiliated with or endorsed by Microsoft Corporation. XNA is a trademark of Microsoft. Licensed under the Microsoft Public License (Ms-PL).</p>
<div class="footer-links">
<a href="https://github.com/openeggbert/cna/blob/master/LICENSE" target="_blank" rel="noopener">License</a>
<a href="contact.html">Contact</a>
</div>
</div>
</div>
</footer>
<script src="js/main.js"></script>
<script src="js/prism/prism.min.js" defer></script>
<script src="js/prism/prism-cpp.min.js" defer></script>
<script src="js/prism/prism-glsl.min.js" defer></script>
<script src="js/prism/prism-json.min.js" defer></script>
<script src="js/prism/prism-bash.min.js" defer></script>
<script src="js/prism/prism-cmake.min.js" defer></script>
</body>
</html>