Ho un'applicazione WPF che è intesa per la sovrapposizione di un HUD in un flusso live. L'idea originale era di creare un plugin per xsplit (una popolare applicazione per la presentazione di live streaming) per visualizzare il contenuto dell'applicazione WPF. Il problema con questo approccio è che il rendering di una bitmap all'interfaccia COM di xsplit è di gran lunga dannoso per le prestazioni della CPU per rilasciare l'applicazione (come credo ci siano problemi nell'interfaccia COM di xsplit e sull'uso di RenderTargetBitmap che impone la CPU).Rendering da interni di WPF a un'applicazione Directx
Ho cercato di rendere direttamente la sovrapposizione nel gioco (l'applicazione DirectX di destinazione) perché offre numerosi vantaggi. Principalmente aggira i problemi di prestazioni in xsplit, ma apre anche l'applicazione a una varietà di applicazioni di streaming e acquisizione.
Non sto molto sperimentato con DirectX, ma penso che questo è il contorno della soluzione
inizializzare l'applicazione WPF e catturare dispositivo Direct3d di WPF (via this method)
Trovare e agganciare la chiamata EndScene dell'applicazione DirectX di destinazione (using EasyHook+Slimdx)
Render contenuto della superficie del dispositivo WPF ontop di applicazione DirectX agganciato
La domanda principale che ho è come eseguire passaggio 3 utilizzando SlimDX. Mi auguro che una soluzione possa in qualche modo riutilizzare la superficie e non fare affidamento sulla copia poiché l'obiettivo è di non influire sulle prestazioni dell'applicazione collegata. Mi piacerebbe anche essere in grado di limitare la regione e supportare la trasparenza. Mi sto anche chiedendo se l'utilizzo del dispositivo Direct3d di WPF nel dispositivo dell'applicazione DirectX collegata potrebbe causare instabilità.
Qualsiasi intuizione sarebbe apprezzata, grazie.
come hai fatto a farlo allora? Sono bloccato in una situazione simile. – alDiablo