2011-10-07 111 views
5

我希望能够使用DirectX渲染到OpenGL渲染窗口。这是因为我以后的功能只支持DirectX。混合DirectX和OpenGL

我听说几年前可以做到这一点,我希望它仍然有可能。

我想可能会涉及将DirectX指向VRAM的正确部分和正确的深度缓冲区。

另外一个教程或简单的解释将是非常有用的。

+0

为什么你需要输出到OpenGL?如果DirectX可用,为什么不只是坚持使用DX渲染器? – glenatron

+0

主要是因为我需要Windows OpenGL命令才能在Windows子窗口中正确渲染OpenGL渲染曲面。 – ceorron

+8

“这是因为我以后的功能只支持Direct X.”那些功能是什么?我知道很少的D3D功能在OpenGL下不可用。 –

回答

2

混合OpenGL和Direct3D将无法正常工作,并且它从未习惯使用AFAIK。请问,OpenGL不提供哪些Direct3D的功能?

3

至少NVIDIA有NV_DX_interop extension,让我们直接使用Direct3D 9缓冲区/纹理/表面作为OpenGL缓冲区/纹理/渲染缓冲区(因此反过来)。但我对此没有任何经验,我不知道它是否得到广泛支持或实际上有什么好处。

这将是更多interresting你认为哪些功能只在Direct3D中可用。也许我们可以向你展示如何用OpenGL实现它,因为Direct3D中没有许多功能(如果有),而不是OpenGL中。虽然如果你有ATI卡,可用并且实际上正常工作有时可能是两个独立的事情。

+0

请注意,即使该互操作也不允许您将这两个API渲染到_same_窗口。如果你有不同的窗口或离屏渲染上下文,那么你可以使用它。但不是相同的表面。 –

+0

您可以通过OpenGL在一个屏幕外表面进行渲染,并将DirectX渲染到另一个屏幕表面,然后复制并合并它们的纹理。 –

0

你可以。至少对于nVIDIA来说!检查NV_DX_interop。但是,OpenGL支持每个DirectX功能,因为OpenGL比DirectX更具RAW/Low级别!它的实施方式可能会有所不同。再说一遍,告诉我们你想要的DirectX的特性,我可以告诉你如何重新实现它。

0

OpenGL和Direct3D之间的区别,我正在研究自己的一个具体示例是,在DirectShow(Direct3D的子集)中,有用于我的Panasonic DVCPRO-HD相机的视频捕获过滤器。因此,通过该API收集的实时流,我想用作OpenGL库的输入。一个这样的库是基于OpenGL的OpenFrameWorks。我期待看到我可以如何有效地进行传输。现有的OpenFrameWorks Video API使用稍旧的和不赞成使用的DirectShow API,并使用暴力策略将DirectShow中的像素转移到OpenFrameWorks。