2011-10-07 27 views
5

Quiero ser capaz de procesar en una ventana de renderizado OpenGL con DirectX. Esto se debe a que las características que busco solo son compatibles con DirectX.Mezclar DirectX y OpenGL

He oído que es posible hacer esto hace unos años y espero que todavía sea posible.

Imagino que implicará apuntar DirectX a la parte correcta de VRAM y al búfer de profundidad correcto.

También un tutorial o simplemente una explicación sería extremadamente útil.

+0

¿Por qué necesita generarlo en OpenGL? Si DirectX está disponible, ¿por qué no quedarse con el renderizador DX? – glenatron

+0

Principalmente porque necesito los comandos OpenGL de Windows para representar correctamente la superficie de renderizado OpenGL en una ventana secundaria de Windows. – ceorron

+8

"Esto se debe a que las características que busco solo se admiten en Direct X". ¿Y qué características son esas? Conozco muy pocas características D3D que no están disponibles también en OpenGL. –

Respuesta

2

Mezclando OpenGL y Direct3D no funcionará, y nunca antes lo había hecho. ¿Puedo preguntar qué funciones de Direct3D necesita y que OpenGL no ofrece?

3

Al menos NVIDIA tiene el NV_DX_interop extension, que permite usar los búferes/texturas/superficies Direct3D 9 directamente como búfers/texturas/renderbuffers de OpenGL (por lo tanto, es al revés). Pero no tengo ninguna experiencia con esto y no sé si es ampliamente compatible o realmente funciona bien.

Sería más interesante qué funciones crees que solo están disponibles en Direct3D. Tal vez podamos mostrarle cómo lograrlo con OpenGL, ya que no hay muchas características (si las hay) disponibles en Direct3D y no en OpenGL. Aunque si obtuviste una tarjeta ATI, estar disponible y realmente trabajando correctamente puede ser a veces dos cosas separadas.

+0

Tenga en cuenta que incluso esa interoperabilidad no le permite representar con ambas API en la _ajuste_ventana. Si tiene diferentes ventanas o contextos de representación fuera de pantalla, puede usar esto. Pero no a la misma superficie. –

+0

Puede renderizar a través de OpenGL en una superficie fuera de pantalla, con DirectX en otra, luego copiar y combinar sus texturas. –

0

Puedes. ¡Al menos para nVIDIA! Verifique NV_DX_interop. Pero, sin embargo, TODAS las funciones de DirectX son compatibles con OpenGL, ¡ya que OpenGL tiene más nivel RAW/bajo que DirectX! La forma en que se implementa puede ser diferente. Una vez más, díganos qué función de DirectX desea y le puedo decir sugerencias sobre cómo volver a implementarla.

0

Un ejemplo específico de una diferencia entre OpenGL y Direct3D, que es algo que estoy investigando, es que en DirectShow (un subconjunto de Direct3D), hay filtros de captura de video para mis cámaras Panasonic DVCPRO-HD. Entonces, las transmisiones en vivo recopiladas a través de esa API, me gustaría utilizarlas como entradas en las bibliotecas de OpenGL. Una de esas bibliotecas es OpenFrameWorks, que está basada en OpenGL. Estoy buscando ver cuán eficiente puedo hacer esta transferencia. La API de video OpenFrameWorks existente usa una API de DirectShow ligeramente obsoleta y obsoleta, y utiliza una estrategia de fuerza bruta para obtener píxeles de DirectShow a OpenFrameWorks.

Cuestiones relacionadas