Condividi tramite


API grafiche in Windows

Windows Vista include il supporto per un modello di driver di visualizzazione completamente nuovo che rappresenta una revisione importante nella progettazione dei driver video dall'introduzione di Windows Driver Model (WDM) per Windows 98. Questo modello riprogettato riflette l'evoluzione dell'hardware video dal mondo delle operazioni raster 2D e delle applicazioni GDI a quello dei giochi 3D con hardware grafico a funzione fissa, e infine a quello dell'unità di elaborazione grafica programmabile moderna (GPU) che supporta un'ampia gamma di applicazioni grafiche ad alte prestazioni. Windows 7 e Windows 8 si basano sull'infrastruttura grafica di Windows Vista fornendo funzionalità grafiche e API aggiuntive. Questo articolo illustra le funzionalità grafiche e le API di Windows.

Background

L'API principale per la programmazione grafica fin dai primi tempi di Windows è stata l'interfaccia GDI (Graphics Device Interface). Questa API è stata progettata per gestire numerosi dispositivi di output 2D e ha formato la base per l'esperienza dell'interfaccia utente di Windows. DirectDraw e Direct3D sono state introdotte come API alternative per supportare giochi a schermo intero e rendering 3D come estensioni per l'hardware esistente del tempo. Le interazioni con GDI erano complicate. L'efficace combinazione di elementi GDI tradizionali con elementi Direct3D è stata limitata da questa progettazione. La versione windows XP di WDM, nota come XPDM, riflette la natura side-by-side di GDI e Direct3D (vedere la figura 1).

Figura 1. API grafiche in Windows XP

xpdm

Nel corso degli anni, la potenza delle schede video 3D è cresciuta notevolmente fino al punto in cui la maggior parte dell'hardware è dedicata a questa funzione. Un nuovo modello di driver, Windows Display Driver Model (WDDM), porta la GPU e Direct3D in primo piano, consentendo la creazione di un'esperienza completamente nuova, il desktop 3D, che combina perfettamente il mondo 2D di GDI con la potenza delle MODERNE GPU programmabili. Con WDDM, l'hardware video è guidato interamente da Direct3D e tutte le altre interfacce grafiche comunicano con l'hardware video tramite il nuovo modello di driver incentrato su Direct3D (vedere la figura 2).

Figura 2. API grafiche in Windows Vista

wddm

Per altre informazioni su WDDM, vedere Guida alla progettazione di Windows Vista Display Driver Model (WDDM) su MSDN.

Direct3D 9

La versione 9 di DirectX è stata rilasciata per la prima volta per Windows nel 2002, con gli aggiornamenti successivi nel 2003 e nel 2004. Questa API rappresenta un decennio di evoluzione delle tecnologie DirectX, l'introduzione di modelli di programmazione shader più potenti per Direct3D e una maturità supportata da migliaia di titoli di spedizione. Direct3D 9 è l'interfaccia grafica principale in Windows Vista. Rimane l'API ideale da usare per la scrittura di giochi e applicazioni 3D che devono essere eseguite nell'ampia gamma di versioni hardware e Windows esistenti. I dettagli del nuovo modello di driver sono nascosti dalle applicazioni che usano le interfacce Direct3D 9, ma dietro le quinte il sistema operativo sfrutta appieno le nuove funzionalità per offrire un vero multitasking della GPU, una gestione delle risorse più efficiente e prestazioni affidabili.

Per garantire la compatibilità completa con le versioni precedenti di Windows, alcune stranezza del modello di driver precedente devono essere emulate anche con il nuovo modello di driver di visualizzazione di Windows Vista. Ad esempio, quando un'applicazione a schermo intero perde lo stato attivo, deve presumere che abbia perso tutte le risorse nella memoria video (VRAM) e ricaricarle come risorse non gestite anche se il nuovo modello di driver gestisce le risorse in modo trasparente senza rimuoverle dal contesto del dispositivo. Anche il concetto di tipo di risorsa gestito e predefinito è specifico del modello di driver precedente. Un altro esempio è l'aspettativa di errore quando si allocano risorse non gestite (pool predefinite) oltre la quantità di VRAM disponibile, anche se il nuovo modello di driver può fornire una quantità quasi illimitata di memoria video virtuale. A causa di questi requisiti, le applicazioni Direct3D in esecuzione in Windows Vista riceveranno comunque queste condizioni di errore. Pertanto, sono limitati nella loro capacità di usare le interfacce Direct3D 9 di base per usare completamente alcune funzionalità del nuovo modello di driver.

Mentre i nuovi sistemi con Windows Vista includeranno schede video con driver WDDM e nuovi driver per una serie di schede video popolari sono inclusi nella casella, Windows Vista continua a supportare la possibilità di usare driver XPDM meno recenti per gli aggiornamenti e le edizioni aziendali. Nei sistemi che usano il vecchio modello di driver, è necessario usare le interfacce Direct3D 9 e precedenti e il funzionamento del sistema grafico è molto simile a quello di Windows XP (Figura 1). WDDM è necessario per le applicazioni per usare Direct3D 9Ex, Direct3D 10 e versioni successive.

Direct3D 9Ex

L'interfaccia Direct3D 9Ex consente di accedere a un'estensione leggera dell'API Direct3D 9 standard che espone l'allocazione di risorse virtualizzate, la semantica dei nuovi dispositivi persi e altre nuove funzionalità disponibili durante l'esecuzione in Windows Vista. Creando questo oggetto esteso, l'API Direct3D 9 usa la nuova semantica e pertanto richiede all'applicazione di usare logica diversa (e quindi percorsi di codice diversi) per la creazione, la gestione e la gestione degli errori delle risorse per nuovi tipi di condizioni. Questa API è disponibile solo in Windows Vista e richiede driver WDDM. Poiché Direct3D 9Ex usa un percorso di codice di API e driver separato rispetto a Direct3D 9, il supporto di questa API richiede test case aggiuntivi per l'applicazione.

Il motivo principale per la creazione della nuova API Direct3D 9Ex era consentire l'accesso completo alle nuove funzionalità di WDDM mantenendo la compatibilità per le applicazioni Direct3D esistenti. Le nuove applicazioni desktop 3D e molte applicazioni specifiche di Windows Vista usano questa versione di Direct3D 9, ma non sono funzionali quando vengono eseguiti su driver XPDM meno recenti. Poiché l'API Direct3D 9Ex non verrà mai visualizzata nelle versioni precedenti di Windows a causa di una mancanza di supporto per WDDM, le interfacce Direct3D 9 standard coprono un set di sistemi molto più ampio. Per applicazioni ad alte prestazioni che possono sfruttare la nuova generazione di hardware video, la nuova versione 10 di Direct3D offre molte nuove funzionalità non esposte da Direct3D 9Ex. Di conseguenza, per i giochi e la maggior parte delle altre applicazioni, Direct3D 9 o Direct3D 10 è l'API consigliata.

Nota

DirectX SDK non fornisce esempi, intestazioni o librerie per l'interfaccia Direct3D 9Ex. MSDN Library e Windows SDK (in precedenza noto come Platform SDK) contengono la documentazione, le intestazioni e le librerie disponibili.

 

Per altre informazioni su Direct3D 9Ex, vedere DirectX per Windows Vista su MDSN.

Direct3D 10

Per realizzare appieno il potenziale del nuovo modello di driver di Windows Vista e dell'hardware di nuova generazione, è stata creata una versione completamente nuova dell'API Direct3D. Mentre WDDM elimina alcune delle limitazioni sulle prestazioni nel sistema grafico esistente, Direct3D 10 va ulteriormente rimuovendo i colli di bottiglia di progettazione nell'API Direct3D esistente e semplifica notevolmente l'attività di programmazione della GPU.

La nuova API elimina completamente tutti gli aspetti a funzione fissa, sostituendoli con costrutti programmabili e semplificando notevolmente l'implementazione interna. Le centinaia di bit di funzionalità nelle versioni precedenti di Direct3D sono state completamente eliminate e sostituite con un set ben definito e inclusivo di funzionalità che ha solo alcuni scenari di utilizzo facoltativi per formati di risorse specifici. La creazione e la convalida delle risorse a elevato utilizzo di CPU ora hanno una semantica esplicita nella nuova API. Ciò consente un comportamento delle prestazioni molto più prevedibile e un sovraccarico notevolmente ridotto per disegno. Le risorse possono essere riconfigurate in più moduli per consentire un uso efficiente in varie fasi e il set di funzionalità impone un minor numero di restrizioni per gli scenari di utilizzo per i formati. Sono disponibili anche nuovi formati di trama della mappa normale compressi a blocchi.

Nella nuova API, le costanti shader e lo stato del dispositivo sono risorse esplicite, consentendo la memorizzazione nella cache molto più efficiente sull'hardware e la convalida del driver notevolmente semplificata. Il modello di shader programmabile è stato unificato sia tra vertex che pixel shader e reso più espressivo con un modello di calcolo e un set di operatori ben definiti. Inoltre, è stata aggiunta una nuova fase geometry shader per operare sulle primitive dopo la fase del vertex shader. I risultati del lavoro della GPU nelle fasi vertex e geometry shader della pipeline possono essere trasmessi alla RAM video per il riutilizzo, consentendo la possibilità di operazioni GPU multipasso estremamente complesse con un'interazione minima della CPU.

Tutti questi miglioramenti consentono la tecnologia grafica di nuova generazione ed espandono la capacità delle applicazioni di eseguire il lavoro fuori carico nella GPU. L'offload consente l'interfaccia dei caratteri basata su GPU più complessa, tecniche di morfiatura accelerata, generazione di volumi di ombreggiature ed estrusione, sistemi di particella ed estrusione completamente basati su GPU, materiali più complessi combinati in batch di disegno di grandi dimensioni efficienti, dettagli procedurali, mapping di spostamento a raggi in tempo reale, generazione di mappe a cubo a passaggio singolo e molte altre tecniche, liberando al tempo stesso risorse CPU per applicazioni più complesse.

Per fornire questo livello di innovazione in Direct3D 10, l'hardware meno recente non può essere espresso come implementazione parziale di una nuova interfaccia. Una scheda video è in grado di supportare tutte le nuove funzionalità o non è una scheda con supporto per Direct3D 10. Pertanto, mentre Direct3D 9 potrebbe guidare l'hardware dell'era DirectX7 con molti bit di funzionalità mancanti e limitazioni di utilizzo, Direct3D 10 funziona solo su una nuova generazione di schede video. Affinché un'applicazione supporti hardware video meno recente, deve supportare anche le interfacce Direct3D 9. Le versioni future di Direct3D si baseranno sulla versione 10, estendendola alle nuove versioni dell'API garantendo al tempo stesso un superset rigoroso di funzionalità direct3D 10.

Per altre informazioni su Direct3D 10, vedere Direct3D 10.

Direct3D 10.1

Windows Vista Service Pack 1 estende l'API Direct3D 10 con Direct3D 10.1, che aggiunge interfacce facoltative e un modello di shader aggiuntivo per supportare nuove funzionalità hardware delle schede video che supportano Direct3D 10.1. Tutti gli hardware in grado di supportare Direct3D 10.1 supportano completamente tutte le funzionalità di Direct3D 10 e gli sviluppatori di giochi possono usare le funzionalità aggiuntive di Direct3D 10.1, se disponibili.

Nota

Direct3D 10.1 è l'API grafica usata dal desktop di Windows 7.

 

Nota

Windows 7 e l'aggiornamento di Windows Vista aggiungono il supporto per i livelli di funzionalità DXGI 1.1, 10level9 e il dispositivo WARP10 all'API Direct3D 10.1 esistente.

 

Direct3D 11

Windows 7 supporta una nuova revisione di Direct3D, Direct3D 11, basata sulla progettazione dell'API Direct3D 10.1. Le nuove funzionalità dell'API includono il rendering multithreading e la creazione di risorse, compute shader, il supporto per i livelli di funzionalità 10level9 e il dispositivo di rendering software WARP10 e le nuove funzionalità hardware della classe Direct3D 11, ad esempio la tassellatura usando hull & domain shader, BC6H e BC7 formati di compressione delle trame, Shader Model 5.0 e Dynamic Shader Linkage. La nuova API può usare schede video di classe Direct3D 10 e 10.1 esistenti, alcune schede Direct3D 9 attraverso i livelli di funzionalità 10level9 esistenti con supporto limitato delle funzionalità e le schede video di classe Direct3D 11 di ultima generazione.

Oltre all'API Direct3D 11, Windows 7 include DXGI 1.1, Direct2D, DirectWrite e supporto per i driver WDDM 1.1.

Nota

Le API Direct3D 11 e correlate sono disponibili anche come aggiornamento a Windows Vista (vedere Come installare la versione più recente di DirectX).

 

Direct3D 11.1

Windows 8 estende l'API Direct3D 11 con Direct3D 11.1. Direct3D 11.1 supporta tutti gli hardware esistenti con livelli di funzionalità 11, 10_x e supporto 9_x, nonché un nuovo livello di funzionalità 11_1.

Oltre all'API Direct3D 11.1, Windows 8 include DXGI 1.2, contesti di dispositivo Direct2D e supporto per i driver WDDM 1.2.

Nota

Se vuoi che le tue app di Windows Store programmino grafica 3D con DirectX, puoi usare l'API Direct3D 11.1. Per altre info sulla programmazione della grafica 3D con DirectX, vedi Introduzione alla grafica 3D con DirectX.

 

Aggiornamento della piattaforma per Windows 7: il supporto parziale è disponibile per l'API Direct3D 11.1 in Windows 7 o Windows Server 2008 R2 con l'aggiornamento della piattaforma per Windows 7 installato. Per altre info sull'aggiornamento della piattaforma per Windows 7, vedi Aggiornamento della piattaforma per Windows 7.

Opengl

Windows Vista, Windows 7 e Windows 8 offrono lo stesso supporto di Windows XP per OpenGL, che consente ai produttori di schede video di fornire un driver client installabile (ICD) per OpenGL che fornisce supporto accelerato hardware. Si noti che sono necessarie versioni più recenti di tali ID per supportare completamente Windows Vista, Windows 7 o Windows 8. Se non è installata alcuna progettazione immagine e configurazione, il sistema eseguirà il fallback al livello software OpenGL v1.1 nella maggior parte dei casi.

Compatibilità delle applicazioni, GDI e versioni precedenti di Direct3D

I sistemi grafici Windows Vista, Windows 7 e Windows 8 sono progettati per supportare un'ampia gamma di scenari di utilizzo e hardware per abilitare una nuova tecnologia, continuando a supportare i sistemi esistenti. Le interfacce grafiche esistenti, ad esempio GDI, GDI+, e le versioni precedenti di Direct3D, continuano a funzionare in Windows Vista e Windows 7, ma vengono internamente mappate dove possibile. Ciò significa che la maggior parte delle applicazioni Windows esistenti continuerà a funzionare.

Windows Vista, Windows 7 e Windows 8 continuano a supportare le stesse interfacce Direct3D e DirectDraw di Windows XP, alla versione 3 di DirectX (ad eccezione della modalità mantenuta di Direct3D, che è stata rimossa). Come per Windows XP Professional x64 Edition, le applicazioni native a 64 bit nelle versioni più recenti di Windows sono limitate alle interfacce Direct3D9, DirectDraw7 o più recenti. Le applicazioni ad alte prestazioni devono usare Direct3D 9 o versione successiva per assicurarsi che abbiano la corrispondenza più vicina alle funzionalità hardware.

Consigli

Quando si seleziona un'API per l'applicazione grafica, prendere in considerazione i suggerimenti seguenti:

  • Usa Direct3D 9 se l'applicazione deve supportare Windows XP o una versione precedente di Windows.
  • Usa Direct3D 9 se vuoi supportare Windows Vista o Windows 7 in esecuzione con driver XPDM. Per i sistemi Windows Vista o Windows 7 che non dispongono di hardware video Direct3D 10 o superiore, è possibile scegliere di usare il percorso di codice Direct3D 9 esistente o usare i livelli di funzionalità 10level9 tramite l'API Direct3D 10.1 o Direct3D 11.
  • Usa Direct3D 11 per sfruttare la nuova generazione di hardware video in Windows Vista, Windows 7 e Windows 8. Le app di Windows Store devono usare Direct3D 11 o versione successiva.