Domanda

So che non è consigliabile mescolare OpenGL e DirectX ma sto cercando di creare un ponte tra due diverse applicazioni che utilizzano API grafiche separate: se spero che esista una tecnica per la condivisione dei dati, in particolare le trame.

Ho una trama creata in Direct3D in questo modo:

d3_device-> CreateTexture(width, height,
  1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
  &texture, NULL);

Esiste un modo per usare questa trama da OpenGL senza fare un giro nella memoria del sistema?

È stato utile?

Soluzione

No.

Pensa a come condividere un'immagine in Photoshop e un altro visualizzatore di immagini. Avresti bisogno di una libreria di gestione della memoria condivisa da queste due applicazioni.

Altri suggerimenti

YES. Come precedentemente pubblicato (vedi sotto) dovrebbe esistere almeno una soluzione. Ho trovato due possibili soluzioni:

1) Sulle schede nvidia è stata integrata una nuova estensione nei 256 dirver. vedi http://developer.download.nvidia.com/opengl/specs/WGL_NV_DX_interop. txt

2) DXGI è la forza trainante per comporre tutte le finestre in Vista e Windows 7. consultare msdn.microsoft.com/en-us/library/ee913554.aspx

Non ho ancora fatto esperienza con nessuna delle due soluzioni, ma spero di trovare del tempo per testarne una. Ma per me il primo sembra essere il più semplice.


[Penso che dovrebbe essere possibile. Nella recente versione di Windows (Vista e 7) è possibile visualizzare un'anteprima di qualsiasi contenuto della finestra nella barra delle applicazioni (sia GDI, Direct3D o OpenGL). Per quanto ne so, l'anteprima di OpenGL non era supportata nelle versioni precedenti di Windows. Quindi almeno nella versione più recente dovrebbe esserci la possibilità di accoppiare o condividere contesti di rendering anche tra processi diversi ... Ciò vale anche per altre piattaforme moderne che condividono i contesti di rendering a livello di sistema per creare diversi effetti di rendering.]

Penso che non sia possibile. Poiché entrambi hanno diversi modelli di una trama.

Non è possibile accedere direttamente alla memoria delle trame senza directX o openGL.

In alternativa: se è possibile, dovresti essere in grado di recuperare l'indirizzo di trama, la sua tonalità, larghezza e altre informazioni sul layout della memoria (dipendente dall'hardware) e creare una trama fittizia nell'altro sistema e spingere i dati recuperati nel tuo giusto oggetto texture creato. Questo non è possibile

Ovviamente, questo non funzionerà su alcun hardware discendente, e in tal caso non sarebbe molto portatile.

Non credo sia possibile senza scaricare i dati nella memoria host e ricaricarli nella memoria del dispositivo.

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