我的直接答案是否定的。但我很好奇他们是如何制作这个视频的http://www.youtube.com/watch?v=HC3JGG6xHN8
3 回答
我的直接答案是否定的。
我的直接回答是“可能是的,但你绝对不想那样做”。
但我很好奇他们是如何制作这个视频的http://www.youtube.com/watch?v=HC3JGG6xHN8
他们预渲染了视频,然后通过视频编辑器简单地组合了它。因为相机有固定的路径,所以很容易做到。
无论如何,您可以将两个(DirectX/OpenGL)场景渲染到屏幕外缓冲区,然后使用任一 api 将它们组合以呈现最终结果。您将从一个 api 中的渲染缓冲区读取数据并将其传输到另一个 api 中使用的可渲染缓冲区。最愚蠢的方法是通过系统内存(这将非常慢),但某些供应商(尤其是 nvidia)可能会为这种情况提供扩展。
在 Windows 平台上,您还可以在主窗口上并排放置两个子窗口/面板(这样您将获得与该 youtube 视频中相同的效果),并为其中一个创建 OpenGL 上下文,并为其中一个创建 DirectX 设备其他。除非有一些我不知道的限制,否则应该可以,因为为了渲染 3d 图形,您需要带有句柄 (HWND) 的窗口。但是,两个窗口将完全相互独立并且不会共享资源,因此您将需要 2 倍以上的内存来单独运行它们的纹理。
他们使用视频编辑软件。他们记录了发动机的两次几乎确定性的运行并将它们拼接在一起。
至于你的标题提出的问题,不在同一个窗口内。在两个窗口的同一个应用程序中可能是可能的,但最好使用两个单独的应用程序。
对的,这是可能的。我这样做是作为研究生课程的实验;我在 OpenGL 中实现了一半延迟着色图形引擎,在 D3D10 中实现了另一半。您可以使用适当的供应商扩展在 OpenGL 和 D3D 上下文之间共享表面。
它有实际应用吗?我能想到的不多。我只是想证明它可以做到:)
然而,我离题了。该视频只是在两个不同的 API 中运行的 Haven 基准测试的两个单独录制的视频的并排。