Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile ospitare contenuto Direct3D9 usando la D3DImage classe . L'hosting di contenuto Direct3D9 può influire sulle prestazioni della tua applicazione. Questo argomento descrive le procedure consigliate per ottimizzare le prestazioni quando si ospita contenuto Direct3D9 in un'applicazione Windows Presentation Foundation (WPF). Queste migliori pratiche includono come usare D3DImage e pratiche consigliate quando si utilizzano Windows Vista, Windows XP e configurazioni multi-monitor.
Annotazioni
Per esempi di codice che illustrano queste procedure consigliate, vedere Interoperabilità WPF e Direct3D9.
Usare D3DImage con parsimonia
Il contenuto Direct3D9 ospitato in un'istanza D3DImage non viene renderizzato velocemente come in un'applicazione Direct3D pura. La copia della superficie e lo scaricamento del buffer dei comandi possono essere operazioni costose. Man mano che aumenta il numero di D3DImage istanze, si verifica un maggiore scaricamento e le prestazioni diminuiscono. Pertanto, è consigliabile usare D3DImage con moderazione.
Procedure consigliate in Windows Vista
Per ottenere prestazioni ottimali in Windows Vista con uno schermo configurato per l'uso del modello WDDM (Windows Display Driver Model), creare la superficie Direct3D9 in un IDirect3DDevice9Ex dispositivo. Ciò consente la condivisione della superficie. La scheda video deve supportare le capacità dei driver D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES e D3DCAPS2_CANSHARERESOURCE su Windows Vista. Tutte le altre impostazioni causano la copia della superficie tramite software, riducendo in modo significativo le prestazioni.
Annotazioni
Se Windows Vista ha uno schermo configurato per l'uso del modello XDDM (Display Driver Model), la superficie viene sempre copiata tramite software, indipendentemente dalle impostazioni. Con le impostazioni appropriate e la scheda video, si noteranno prestazioni migliori in Windows Vista quando si usa WDDM perché le copie di superficie vengono eseguite nell'hardware.
Procedure consigliate in Windows XP
Per ottenere prestazioni ottimali con Windows XP, che utilizza il modello di driver video di Windows XP (XDDM), crea una superficie bloccabile che si comporta correttamente quando viene chiamato il metodo IDirect3DSurface9::GetDC. Internamente, il BitBlt metodo trasferisce la superficie tra i dispositivi nell'hardware. Il GetDC metodo funziona sempre sulle superfici XRGB. Tuttavia, se il computer client esegue Windows XP con SP3 o SP2 e se il client dispone anche dell'hotfix per la funzionalità finestra a più livelli, questo metodo funziona solo sulle superfici ARGB. La scheda video deve supportare la D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES funzionalità del driver.
Una profondità di visualizzazione desktop a 16 bit può ridurre significativamente le prestazioni. È consigliabile usare un desktop a 32 bit.
Se si sviluppa per Windows Vista e Windows XP, testare le prestazioni in Windows XP. L'esaurimento della memoria video in Windows XP è un problema. Inoltre, D3DImage in Windows XP usa più memoria video e larghezza di banda rispetto a Windows Vista WDDM, a causa di una copia di memoria video aggiuntiva necessaria. Pertanto, è possibile prevedere prestazioni peggiori in Windows XP rispetto a Windows Vista per lo stesso hardware video.
Annotazioni
XDDM è disponibile sia in Windows XP che in Windows Vista; Tuttavia, WDDM è disponibile solo in Windows Vista.
Procedure consigliate generali
Quando si crea il dispositivo, usare il D3DCREATE_MULTITHREADED flag di creazione. Ciò riduce le prestazioni, ma il sistema di rendering WPF chiama metodi su questo dispositivo da un altro thread. Assicurarsi di seguire correttamente il protocollo di blocco, in modo che nessun thread accachi contemporaneamente al dispositivo.
Se il rendering viene eseguito su un thread gestito WPF, è fortemente consigliato creare il dispositivo con il flag di creazione D3DCREATE_FPU_PRESERVE. Senza questa impostazione, il rendering D3D può ridurre l'accuratezza delle operazioni a precisione doppia WPF e introdurre problemi di rendering.
L'affiancamento di un oggetto D3DImage è veloce, a meno che non si riquadri una superficie non pow2 senza supporto hardware o se si riquadri un DrawingBrush oggetto o VisualBrush che contiene un oggetto D3DImage.
Procedure consigliate per la visualizzazione a più monitor
Se si usa un computer con più monitor, è necessario seguire le procedure consigliate descritte in precedenza. Esistono anche alcune considerazioni aggiuntive sulle prestazioni per una configurazione con più monitor.
Quando si crea il buffer nascosto, viene creato su un determinato dispositivo e adattatore, ma WPF può visualizzare il buffer frontale su qualsiasi adattatore. La copia tra adattatori per aggiornare il buffer anteriore può essere molto costosa. Su Windows Vista configurato per l'utilizzo del WDDM con più schede video e con un dispositivo IDirect3DDevice9Ex, se il buffer frontale si trova su un adattatore diverso ma ancora sulla stessa scheda video, non c'è alcuna penalità sulle prestazioni. Tuttavia, in Windows XP e XDDM con più schede video, si verifica una riduzione significativa delle prestazioni quando il buffer frontale viene visualizzato su una scheda diversa rispetto al buffer posteriore. Per altre informazioni, vedere Interoperabilità di WPF e Direct3D9.
Riepilogo delle prestazioni
La tabella seguente illustra le prestazioni dell'aggiornamento del buffer anteriore come funzione del sistema operativo, del formato pixel e della bloccabilità della superficie. Si presuppone che il buffer anteriore e il buffer nascosto si trovino nello stesso adattatore. A seconda della configurazione della scheda, gli aggiornamenti hardware sono in genere molto più veloci rispetto agli aggiornamenti software.
| Formato pixel della superficie | Windows Vista, WDDM e 9Ex | Altre configurazioni di Windows Vista | Windows XP SP3 o SP2 con hotfix | Windows XP SP2 |
|---|---|---|---|---|
| D3DFMT_X8R8G8B8 (non bloccabile) | Aggiornamento hardware | Aggiornamento software | Aggiornamento software | Aggiornamento software |
| D3DFMT_X8R8G8B8 (bloccabile) | Aggiornamento hardware | Aggiornamento software | Aggiornamento hardware | Aggiornamento hardware |
| D3DFMT_A8R8G8B8 (non bloccabile) | Aggiornamento hardware | Aggiornamento software | Aggiornamento software | Aggiornamento software |
| D3DFMT_A8R8G8B8 (bloccabile) | Aggiornamento hardware | Aggiornamento software | Aggiornamento hardware | Aggiornamento software |
Vedere anche
.NET Desktop feedback