Passare da DirectX 10 a DirectX 11


10

Ho fatto un numero ragionevole di piccoli progetti di hobby usando DirectX 9, ma è ora di passare a DirectX 11 ora.

Ho un libro di Frank Luna sulla programmazione 3D con DirectX 10 ma nulla su DirectX 11. Credo che siano abbastanza simili, ma mi chiedevo se qualcuno potesse elencare le principali differenze a livello di codice di cui dovrò essere a conoscenza ( o indicare una fonte esistente).



Ho sentito che DX10 era davvero diverso e non compatibile con DX9, mentre DX11 era compatibile con DX9.
jokoon

DX10 è abbastanza diverso da DX9 ma DX11 è abbastanza simile a DX10, volevo solo sapere quali fossero le differenze. Stranamente, DX11 funzionerà con hardware DX9 ma DX10 no;)
JohnB

Risposte:


15

La documentazione dell'SDK contiene una sezione sulla migrazione a 11 che copre sia le versioni 9 che 10. C'è anche la pagina delle funzionalità di D3D11 .

Uno dei maggiori cambiamenti in termini di forma dell'API tra 10 e 11 è che 11 sposta un sacco di metodi dal dispositivo stesso a una nuova interfaccia chiamata contesto del dispositivo (in ID3D11DeviceContextparticolare), al fine di supportare le nuove funzionalità multi-thread.

Una volta a conoscenza del cambiamento, tuttavia, è abbastanza facile adattarsi a: dove in 10 avresti chiamato " someDevice->Draw()" otterrai invece il contesto immediato per il dispositivo e chiamerai " immediateContext->Draw()."

L'altro grande cambiamento è che l'API di effetti è estratta dal core e ha creato una distribuzione di fonte indipendente che devi compilare e collegare te stesso. Potresti anche notare alcune interfacce e funzioni D3DX che sono state deprecate o rimosse.

Oltre a ciò, ci sono una manciata di nuovi parametri per alcune funzioni e una manciata di campi extra in strutture, eccetera. Ad esempio, l' oggetto descrizione buffer in 11 ha un StructureByteStridecampo aggiuntivo che non è in 10 e la creazione del dispositivo comporta il passaggio di informazioni a livello di funzionalità . Inoltre ci sono le ovvie e sopra menzionate modifiche nei nomi delle interfacce (10 sostituiti con 11 secondi).


Grazie, proprio quello di cui avevo bisogno. Ho cercato una guida ufficiale a ciò che era cambiato, ma in qualche modo non sono riuscito a trovarlo. Grazie per questa risposta e per le altre persone che hanno avuto il tempo di aiutare anche con buone risposte :)
JohnB

È divertente come si dimentichino rapidamente quelle cose. Ho odiato soprattutto la compilazione degli effetti e mi ci sono voluti alcuni giorni per farlo funzionare. Ma non l'ho incluso nella mia risposta ...
Notabene,

Avevo intenzione di postare questo come una domanda, ma mi sono reso conto che la tua risposta copre già la maggior parte delle mie preoccupazioni, anche se vorrei una conferma. Per qualcuno che ha lavorato solo con DX9 ma sta cercando di aggiornare le sue conoscenze, prendere un libro DX11 non solo mi insegnerà il DX11 (ovviamente) ma mi darà anche abbastanza conoscenze per lavorare con DX10 se necessario?
David Gouveia,

Sì, praticamente.

1

Penso che la differenza principale sia che, in DX11, DXFont è sparito, a parte questo è praticamente come diceva Notabene. Dovresti stare bene con quel libro DX10. L'ho usato quando mi sono trasferito su DX11 e non ho avuto problemi. Dovrai andare a guardare il msdn di volta in volta, tuttavia ci sono alcune differenze minori nell'API in alcuni punti IIRC.


1

Non sarà necessario cambiare. Directx11 aggiunge solo nuove funzionalità. Stai solo cambiando i numeri da ID3D10 a ID3D11 ecc.


DirectX11 aggiunge (se non parliamo di tessalation HW ipnotizzata) Direct Compute: API per la GPGPU, con eccellente connessione alla linea grafica (non posso dire questo su CUDA o openCL). E possibilità di più trame RW e buffer su un pixel shader, che apre molte nuove possibilità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.