2011-10-07 11 views
5

Desidero essere in grado di eseguire il rendering in una finestra di rendering OpenGL utilizzando DirectX. Questo perché le funzionalità che sto cercando sono supportate solo in DirectX.Mixaggio di DirectX e OpenGL

Ho sentito che è possibile farlo alcuni anni fa e spero che dovrebbe essere ancora possibile.

Immagino che comporterà il puntamento di DirectX alla parte corretta di VRAM e al buffer di profondità corretto.

Anche un tutorial o semplicemente una spiegazione sarebbe estremamente utile.

+0

Perché è necessario inviarlo in OpenGL? Se DirectX è disponibile, perché non limitarti a utilizzare il renderer DX? – glenatron

+0

Principalmente perché richiedo i comandi OpenGL di Windows per il rendering corretto della superficie di rendering OpenGL in una finestra secondaria di Windows. – ceorron

+8

"Questo perché le funzionalità che sto cercando sono supportate solo in Direct X." E quali caratteristiche sono quelle? Conosco pochissime funzionalità D3D che non sono disponibili anche con OpenGL. –

risposta

2

Il mixaggio di OpenGL e Direct3D non funziona e AFAIK non è mai stato utilizzato. Posso chiederti quali caratteristiche di Direct3D richiedi, che OpenGL non offre?

3

Almeno NVIDIA ha il NV_DX_interop extension, che consente di utilizzare Direct3D 9 buffer/texture/superfici direttamente come buffer OpenGL/texture/renderbuffer (quindi è il contrario). Ma non ho alcuna esperienza con questo e non so se è ampiamente supportato o effettivamente funziona bene.

Sarebbe più interessante stabilire quali funzionalità pensi siano disponibili solo in Direct3D. Forse possiamo mostrarti come ottenerlo con OpenGL, poiché non ci sono molte funzionalità (se ce ne sono) disponibili in Direct3D e non in OpenGL. Anche se hai una scheda ATI, essere disponibile e funzionare correttamente potrebbe a volte essere due cose separate.

+0

Si noti che anche quell'interop non consente di eseguire il rendering con entrambe le API nella finestra _same_. Se hai finestre diverse o contesti di rendering fuori schermo, puoi usare questo. Ma non per la stessa superficie. –

+0

È possibile eseguire il rendering tramite OpenGL in una superficie esterna, con DirectX in un'altra, quindi copiare e combinare le trame. –

0

È possibile. Almeno per nVIDIA! Controllare NV_DX_interop. Tuttavia, OGNI caratteristica DirectX è supportata in OpenGL poiché OpenGL è più RAW/Basso rispetto a DirectX! Il modo in cui è implementato può essere diverso. Ancora una volta, dicci quale caratteristica di DirectX vuoi e posso dirti suggerimenti su come reimplementarla.

0

Un esempio specifico di differenza tra OpenGL e Direct3D, che è una cosa che sto cercando, è che in DirectShow (un sottoinsieme di Direct3D), ci sono filtri di acquisizione video per le mie fotocamere Panasonic basate su DVCPRO-HD. Quindi gli stream live raccolti tramite quell'API, vorrei usare come input nelle librerie OpenGL. Una di queste librerie è OpenFrameWorks, che è basata su OpenGL. Sto cercando di vedere quanto sia efficiente il trasferimento. L'API video OpenFrameWorks esistente utilizza un'API DirectShow leggermente più vecchia e deprecata e utilizza una strategia di forza bruta per ottenere pixel da DirectShow a OpenFrameWorks.