Avalonia Code OnlyItaliano

Volumes

Volume 6 — Advanced 3D Graphics

Status: to be written

Volume 6 — Advanced 3D Graphics

Vulkan and Direct3D, the explicit interfaces of the graphics card, next to the OpenGL of volume 5: how they integrate with Avalonia, what they cost, when each one is worth it.

30 chapters · about 460 pages (estimate) · to be written. It opens with a review of volume 5. The first part is Vulkan, from the instance to commands, queues and synchronization; the second Direct3D 11 and 12 on Windows; the third compares the three ways with real measurements and discusses external 3D engines. The projects: particles on the graphics card, data volumes, a point cloud from millions of measurements, a small multi-API engine.

The examples of the volume

Table of contents

The table of contents is in Italian, as the volume is written in Italian; the English edition follows.

Il volume 5 ha insegnato il 3D con OpenGL, che fa molte scelte da solo. Questo volume passa alle interfacce esplicite: Vulkan, che gira su Windows, Linux, Android e (con MoltenVK) macOS, e Direct3D 11 e 12 su Windows. Si scrive molto più codice, e in cambio si decide tutto: memoria, sincronizzazione, quanti fotogrammi in volo. Il libro si legge da solo: si apre con il ripasso del volume 5.

ParteCapitoliPagine
Prima di cominciare e ripasso del volume 5—25
Prima · VulkanVI.1–VI.15200
Seconda · Direct3DVI.16–VI.2180
Terza · Confronti e scelteVI.22–VI.2670
ProgettiVI.27–VI.3055
AppendiciA–C30
Totale30 capitoli≈ 460

Prima di cominciare ○

Prefazione · la collana · che cosa serve dei volumi precedenti · la scheda video del libro, i driver, i layer di validazione · le librerie e le licenze.

Ripasso: il 3D del volume 5 ○

Quello che i capitoli usano del volume 5, con il rimando al capitolo: matrici e proiezioni (e lo spazio di ritaglio 0…1 che qui diventa la regola), mesh e normali, luce, GLSL, texture, profondità, la telecamera orbitale, glTF.

Parte prima — Vulkan

  • VI.1 Perché Vulkan ○ — il controllo esplicito: che cosa OpenGL faceva da solo e qui va scritto; quanto codice per un triangolo, e perché ne vale la pena.
  • VI.2 Istanza, estensioni, layer di validazione ○ — Silk.NET.Vulkan; i messaggi di debug come primo strumento; leggere un errore di validazione.
  • VI.3 Dispositivi fisici e logici, code ○ — scegliere la scheda; famiglie di code: grafica, calcolo, trasferimento.
  • VI.4 Vulkan dentro Avalonia ○ — due strade: disegnare in un'immagine e passarla al compositore con ICompositionGpuInterop (§IV.15), o una superficie nativa con swapchain; che cosa offre Avalonia 12 e dove.
  • VI.5 Shader SPIR-V ○ — compilare GLSL e HLSL in SPIR-V (glslang, shaderc, DXC); compilare durante la build o all'avvio; la riflessione.
  • VI.6 Render pass e rendering dinamico ○ — attachment, subpass, VK_KHR_dynamic_rendering di Vulkan 1.3: il modo nuovo, più semplice.
  • VI.7 La pipeline grafica ○ — stati fissi e dinamici, layout della pipeline, cache delle pipeline; perché si creano prima e non durante il disegno.
  • VI.8 Memoria e buffer ○ — tipi e heap di memoria; buffer di staging; un allocatore semplice scritto a mano, e quando serve uno vero.
  • VI.9 Command buffer e sincronizzazione ○ — registrare e inviare; semafori, fence, barriere di pipeline; gli errori di sincronizzazione che la validazione trova e quelli che non trova.
  • VI.10 Descrittori e uniform ○ — set, layout, pool; push constant; aggiornare i dati a ogni fotogramma.
  • VI.11 Texture, campionatori, mipmap ○ — layout delle immagini e transizioni; generare le mipmap sulla scheda.
  • VI.12 Profondità e multisampling ○ — il primo modello illuminato, come al volume 5, e il confronto del codice.
  • VI.13 Più fotogrammi in volo ○ — due o tre fotogrammi alla volta; ridimensionare la finestra e ricreare la swapchain; misure di latenza.
  • VI.14 Compute shader in Vulkan ○ — calcolo generale sulla scheda; code di calcolo asincrone; leggere i risultati.
  • VI.15 Vulkan su Windows, Linux e macOS ○ — driver diversi, MoltenVK su macOS, le estensioni che mancano; le stesse misure su tre sistemi.

Parte seconda — Direct3D

  • VI.16 Direct3D 11 con Vortice.Windows ○ — dispositivo, contesto, swapchain; il primo triangolo; il parente stretto di Direct2D (volume 4).
  • VI.17 HLSL, buffer costanti, texture ○ — gli shader di Direct3D; dalle uniform ai buffer costanti.
  • VI.18 Direct3D 11 in una finestra Avalonia ○ — la texture condivisa importata dal compositore, come per Direct2D al §IV.15; la finestra figlia; che cosa si perde fuori da Windows.
  • VI.19 Direct3D 12 ○ — liste di comandi, heap di descrittori, barriere: il fratello di Vulkan, messo a confronto riga per riga.
  • VI.20 Compute shader in Direct3D ○ — 11 e 12; scambio di dati con la CPU.
  • VI.21 Strumenti di Direct3D ○ — il livello di debug, PIX, i messaggi del driver.

Parte terza — Confronti e scelte

  • VI.22 La stessa scena in quattro modi ○ — OpenGL, Vulkan, Direct3D 11 e 12: righe di codice, tempo della CPU per fotogramma, memoria, fotogrammi al secondo.
  • VI.23 Calcolare sulla scheda video ○ — lo stesso calcolo con i compute shader dei tre modi e con la CPU (SIMD di .NET): quando conviene e quando il trasferimento si mangia il guadagno.
  • VI.24 Risorse della GPU ○ — memoria, perdite, rilascio, la scheda persa (device lost) e come ripartire.
  • VI.25 Motori 3D esterni ○ — quando conviene un motore invece delle API: che cosa c'è per .NET, le licenze, come si mette in una finestra Avalonia.
  • VI.26 Quale scegliere ○ — una tabella di scelta per tipo di programma e di sistema, con le misure del libro.

Progetti

  • VI.27 Particelle sulla scheda video ○ — un milione di particelle calcolate in un compute shader Vulkan; il confronto con le particelle in Skia del capitolo IV.29.
  • VI.28 Volumi di dati ○ — un volume 3D (tomografia, misure di campo) visto con il ray marching.
  • VI.29 Nuvola di punti da milioni di misure ○ — caricamento in streaming, livelli di dettaglio, selezione.
  • VI.30 Un piccolo motore a più API ○ — la stessa scena con tre backend dietro un'interfaccia sola; che cosa si guadagna e che cosa si perde ad astrarre.

Appendici

A. Gli inciampi di Vulkan e Direct3D ○ · B. Riferimento rapido ○ · C. Glossario ○

Chapter status: ✔ written · ✎ draft · ○ to be written.

The examples of the volume

The examples of this volume will come with its chapters.