离屏(FBO)OpenGL渲染为WPF创建帧?

时间:2013-01-11 01:16:43

标签: wpf performance opengl fbo off-screen

我有一个WPF应用程序,屏幕的一部分显示了一个需要动态渲染3D的对象,大概是20 FPS。我知道通常WPF应用程序会使用DirectX来进行3D渲染。 (我也理解WFP有一个简化的3D API,但是我认为这不适用于我的情况,因为我有太多的三角形要渲染。)在我的情况下,我想使用OpenGL因为有很好的机会整个应用程序将被移植到非Windows机器上,我不想重写3D代码。

我看到有一些尝试创建一个OpenGL可以直接呈现的WPF控件,但它们看起来有点太粗糙/冒险使用。

作为一种更安全的方法,我认为我可以使用OpenGL的FBO在屏幕外渲染帧,然后将位图实时传递给WPF作为常规2D图像。

我的问题是关于速度。您是否预计此计划会出现突破性瓶颈?我假设FBO渲染的速度与OpenGL端的直接窗口渲染一样快?我希望从渲染的OpenGL图像(FBO)中提取位图应该很快?我不太确定将这些图像交给WFP并看到它们以20 FPS更新。

您是否有具体的经验可以帮助我确定这是否合理?

1 个答案:

答案 0 :(得分:0)

  

我想使用OpenGL,因为整个机会很有可能   应用程序将移植到非Windows机器

但是这意味着你必须重写你的整个WPF应用程序,因为这个框架不是跨平台的。所以在这种情况下,OpenGL部分在这里只是一个小问题。我认为你应该重新考虑整个UI例如,我会使用Qt SDK,因为它是真正的跨平台,你可以随意连接DirectX和OpenGL。 但是,如果您打算在Windows上使用WPF并使用OpenGL,请使用C# OpenGL wrapper。 是的,你会得到一些性能开销,因为它是一个包装器。就像那些Java(JOGL,LWJGL)。但是像MineCraft这样的游戏最初是用这些API编写的,并且运行良好。 另一个更具挑战性的方法是WPF COM互操作并调用一些直接从WPF包装你的OpenGL渲染器的C ++应用程序甚至可能使用unsafe mode来获得尽可能低的级别。没有自己尝试但它可能会让你更好的表现。但实际上这是很多工作。 最后我建议你使用DirectX for Windows,因为WPF自然地与它进行了最好的集成。如果你设计好你的应用程序,那么以后将它连接到OpenGL后端不会有问题。