Pregunta

Sé que no es recomendable mezclar OpenGL y DirectX, pero estoy tratando de construir un puente entre dos aplicaciones diferentes que usan API de gráficos independientes y espero que exista una técnica para compartir datos, específicamente texturas.

Tengo una textura que se crea en Direct3D así:

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

¿Hay alguna forma en que pueda usar esta textura de OpenGL sin hacer un viaje de ida y vuelta a través de la memoria del sistema?

¿Fue útil?

Solución

No.

Piense en ello como compartir una imagen en photoshop y otro visor de imágenes. Necesitaría una biblioteca de administración de memoria que esas dos aplicaciones compartieran.

Otros consejos

SI. Como se publicó anteriormente (ver más abajo) debe existir al menos una solución. Encontré dos posibles soluciones:

1) En las tarjetas nvidia se integró una nueva extensión en los 256 dirvers. consulte http://developer.download.nvidia.com/opengl/specs/WGL_NV_DX_interop. txt

2) DXGI es la fuerza impulsora para componer todas las ventanas en Vista y Windows 7. ver msdn.microsoft.com/en-us/library/ee913554.aspx

Todavía no he adquirido experiencia con ninguna de las soluciones, pero espero encontrar algo de tiempo para probar una de ellas. Pero para mí el primero parece ser el más fácil.


[Creo que debería ser posible. En la versión reciente de Windows (Vista y 7) se puede ver una vista previa de cualquier contenido de la ventana en la barra de tareas (ya sea GDI, Direct3D u OpenGL). Que yo sepa, la vista previa de OpenGL no era compatible con versiones anteriores de Windows. Así que al menos en la versión más reciente debería existir la posibilidad de acoplar o compartir contextos de render, incluso entre diferentes procesos ... Esto también es válido para otras plataformas modernas que comparten contextos de representación en todo el sistema para realizar diferentes efectos de representación.]

Creo que no es posible. Como ambos tienen diferentes modelos de una textura.

No puede acceder a la memoria de textura directamente sin directX o openGL.

De otra manera: si es posible, debería poder recuperar la dirección de la textura, su paso, ancho y otra información de diseño de memoria (dependiente del hardware) y crear una textura dummy en el otro sistema e introducir los datos recuperados en su creado objeto de textura. Esto no es posible

Obviamente, esto no funcionará en ningún hardware descendente, y si es así, no sería muy portátil.

No creo que sea posible sin descargar los datos en la memoria del host y volver a cargarlos en la memoria del dispositivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top