是否可以通过OpenGL呈现场景的一半,而通过DirectX呈现另一半场景

时间:2013-08-26 07:14:15

标签: opengl directx

我的直接回答是否定的。但我很好奇他们是如何创建这个视频的http://www.youtube.com/watch?v=HC3JGG6xHN8

3 个答案:

答案 0 :(得分:1)

他们使用了视频编辑软件。他们记录了两个几乎确定的引擎运行并将它们拼接在一起。

关于你的标题提出的问题,不在同一个窗口内。在两个窗口的同一个应用程序中可能是这样,但是你最好选择两个独立的应用程序。

答案 1 :(得分:1)

是的,有可能。我这样做是为了研究生课程的实验;我在OpenGL中实现了一半的延迟着色图形引擎,在D3D10中实现了另一半。您可以使用适当的供应商扩展在OpenGL和D3D上下文之间共享表面。

它有任何实际应用吗?我能想到的并不多。我只是想证明它可以做到:)

然而,我离题了。该视频只是在两个不同的API中运行的两个单独录制的Haven基准测试视频的并排。

答案 2 :(得分:1)

  

我的直接回答是否定的。

我的直接答案是“可能是的,但你肯定不想这样做。”

  

但我很好奇他们是如何创建这个视频http://www.youtube.com/watch?v=HC3JGG6xHN8

他们预呈现了视频,并通过视频编辑器将其组合在一起。由于相机具有固定路径,因此可以轻松完成。

无论如何,你可以将两个(DirectX / OpenGL)场景渲染到屏幕外缓冲区,然后使用api将它们组合起来渲染最终结果。您将在一个api中从渲染缓冲区中读取数据并将其传输到另一个api中使用的可渲染缓冲区。最愚蠢的方法是通过系统内存(这将非常慢),但有些供应商(特别是nvidia)可能为这种情况提供扩展。

在Windows平台上,您还可以在主窗口上并排放置两个子窗口/面板(这样您将获得与YouTube视频相同的效果),并为其中一个创建OpenGL上下文,并且另一个是DirectX设备。除非有一些限制我不知道,这应该有效,因为为了渲染3D图形,你需要一个带句柄的窗口(HWND)。但是,两个窗口将完全相互独立,不会共享资源,因此单独运行纹理需要2倍以上的内存。