Domanda

Sto codificando un'applicazione 3d con DirectX 10 e mi chiedo come sia il tacking di Shadermanagement.

È più efficace precaricare tutti gli shader che ci sono all'avvio dell'applicazione e quindi usarli secondo necessità o questo addestra le risorse dell'hardware se il numero aumenta.

Inoltre mi chiedo se è una considerazione veloce per ordinare il rendering tramite shader in modo da ridurre al minimo gli switch shader.

È stato utile?

Soluzione

Non ho lavorato con DX10, solo DX9, ma suppongo che queste cose siano sempre le stesse.

A seconda della tua applicazione, potresti effettivamente generare shader in fase di esecuzione (molti giochi 3D sofisticati attualmente lo fanno).

Il precaricamento degli shader non è una cattiva idea, a seconda se si generano shader, quanti ce ne sono, quali sono le considerazioni sulla memoria - dipende. Tuttavia, il precaricamento di uno shader (con il quale suppongo intenda creare l'istanza ID3DXEffect) richiede solo memoria in fase di esecuzione, nessun utilizzo della CPU.

Ordinare tramite shader è una buona idea. In generale, l'ordinamento per materiale è una buona idea, perché il cambio di shader comporta un certo sovraccarico (non eccessivamente, ma evidente a seconda della complessità della tua app).

Per ordinare i tuoi drawballs, leggi questo: http://realtimecollisiondetection.net/blog/?p = 86

Altri suggerimenti

In D3D10, tutte le risorse del dispositivo sono virtualizzate in modo da non esaurirle. Naturalmente, puoi ancora esaurire le risorse fisiche sulla carta e causare un sacco di colpi se non presti attenzione a ciò che stai facendo.

Inoltre, hanno modificato significativamente lo stato del dispositivo per ridurre il costo del cambio di stato, inclusi gli shader.

Ma quello che stai veramente chiedendo è " il metodo X è più veloce del metodo Y per la mia applicazione? " e sebbene D3D10 semplifichi la gestione dello stato per rendere più rapido lo stato di commutazione, l'unico modo per rispondere alla domanda sopra è fare una misurazione delle prestazioni con la tua applicazione e i tuoi dati .

Il post sul blog realtimecollectiondetection.net sta solo parlando dell'ordinamento delle chiamate di estrazione. Ciò comporterà un cambio di stato inferiore. Non importa quanto sia veloce il cambio di stato, fare di meno è sempre più veloce. Quindi questo è un buon consiglio generale.

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