Domanda

Ho una domanda da niubbo per qualsiasi programmatore di grafica.

Sono confuso su come alcuni giochi (come Crysis) possano supportare sia DirectX 9 (in XP) che 10 (in Vista)?

Quello che ho capito finora è che se scrivi un'app DX10, può essere eseguita solo in Vista.

Forse hanno 2 basi di codice: una scritta in DX9 e un'altra in DX10?Ma non è eccessivo?

È stato utile?

Soluzione

Hanno due pipeline di rendering, una che utilizza le chiamate DX9 e l'altra che utilizza le chiamate DX10.Le API non sono compatibili, sebbene la maggior parte dei motori di gioco possa essere riutilizzata per entrambi.Se desideri alcuni esempi Open Source di come vengono eseguite le diverse pipeline di rendering, guarda qualcosa come Ogre3d, che supporta il rendering OpenGL, DX9 e (presto) DX10.

Altri suggerimenti

Il livello di rendering dei giochi è solitamente una parte abbastanza ben isolata/astratta dell'intera applicazione.Per quanto riguarda il motore di gioco, in ogni frame si costruisce semplicemente un elenco di oggetti concettuali (alberi, personaggi, ecc.).Se il motore di gioco sceglie di eseguire il rendering di un particolare oggetto, spetta al livello di rendering come tradurre effettivamente tale intento in chiamate di disegno DX.Un rendering DX10 genererà un insieme diverso di chiamate di disegno a un livello DX9, ma concettualmente stanno ancora eseguendo la stessa azione: "renderizza questo albero".

Il rendering è ben astratto perché è raro che tu voglia ottenere informazioni dal livello di rendering, una volta eseguita l'azione "renderizza questo albero", il motore di gioco presumerà semplicemente che il rendering sia corretto.Non c'è bisogno di gestire risultati potenziali diversi dalle chiamate di rendering DX9/DX10 perché il 99,9% delle informazioni passa dal motore al sistema grafico e lo 0,1% che ritorna probabilmente assume la stessa forma tra le due API.

La configurazione dell'applicazione è un po' più complicata, perché devi chiedere al sistema se DX10 è supportato o meno e altrimenti ripiegare su DX9, ma questa è la tariffa standard per la configurazione dell'applicazione (nello stesso modo in cui il gioco deve scegliere una risoluzione, una frequenza di aggiornamento, un dispositivo di input, ecc.).

È probabile che abbiano uno strato di astrazione e si sviluppino in base ad esso.In fase di esecuzione creano un'istanza dei motori di avvolgimento del calcestruzzo DX9 o DX10.

Immagino che la loro astrazione sia posizionata molto vicino al livello DirectX e fornisca semplicemente a DX9 implementazioni manuali sensate delle funzioni DX10 o migliori la logica DX9 quando viene eseguito su DX10.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top