在direct3d和opengl之间共享纹理?

问题描述:

我知道混合OpenGL和DirectX不推荐,但我试图在两个不同的应用程序之间建立一个桥梁,使用单独的图形API:我希望有一种技术用于共享数据,特别是纹理。在direct3d和opengl之间共享纹理?

我有一个在Direct3D创建这样的质地:

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

有什么办法,我可以使用的OpenGL从这个纹理没有考虑往返通过系统内存?

+1

我看到发生这种情况的唯一方法是如果有人创建了一个OpenGL实现ON directX – Toad 2009-10-21 14:26:48

它这样想分享在Photoshop图像和其它图像浏览器。您需要一个内存管理库来共享这两个应用程序。

+0

这是不正确的。共享资源是DXGI的一部分,而不是D3D。 – Krumelur 2017-05-03 19:21:50

我认为这是不可能的。因为两者都具有不同的纹理模型。

如果没有directX或openGL,您无法直接访问纹理内存。如果可能,您应该能够检索纹理地址,其间距,宽度和其他(依赖于硬件的)内存布局信息,并在其他系统中创建一个虚拟纹理,并将检索到的数据推送到您的刚创建的纹理对象。这是不可能的

显然,这不会在任何下降的硬件上工作,如果是这样,它不会很便携。

我不认为没有将数据下载到主机内存并将其重新上传到设备内存中是不可能的。

是的。正如之前发布的(见下文),至少应该存在一个解决方案。 我发现了两种可能的解决方案:

1)在nvidia卡上,一个新的扩展集成在256个dirvers中。看到http://developer.download.nvidia.com/opengl/specs/WGL_NV_DX_interop.txt

2)DXGI是动力复合在Vista和Windows 7的所有窗口看到msdn.microsoft.com/en-us/library/ee913554.aspx

我还没有作出与经验无论是解决方案,但我希望我会找到一些时间来测试其中之一。但对我来说,第一个似乎更容易。


[我认为应该有可能。在最近的Windows版本(Vista和7)中,可以看到任务栏中任何窗口内容的预览(无论是GDI,Direct3D还是OpenGL)。 据我所知在以前的Windows版本中不支持OpenGL预览。因此,至少在新版本中,应该有可能在不同进程之间耦合或共享渲染上下文... 对于其他现代平台而言,这对于共享渲染上下文系统范围以产生不同渲染效果也是如此。]

+0

您是否能够实施这些解决方案(特别是第二个解决方案)? – 2011-05-03 10:38:54

+0

不,我没有执行第二个由于时间不足... – Goeffrey 2011-12-07 15:36:46