我正要开始一个新的项目。有些决定是我无法控制的:使用WPF和OpenGL就是其中的一部分。
但是,我已经将我的OpenGL选项缩小到两个: OpenTK或SharpGL。SharpGL有一个WPF控件,而OpenTK只有一个Windows Forms控件,这使得我必须将它嵌入到Windows Forms主机中:-/虽然我不介意空域限制,但我确实希望有良好的性能,因为我正在构建一个实时应用程序。不是游戏,但仍然是实时的。
与使用带有“纯”WPF控件的SharpGL相比,在Windows Forms Host上使用OpenTK会对我的程序造成多大的性能影响?
发布于 2012-11-12 17:22:52
当谈到性能时,我只能给你一个答案:自己做一个基准测试!但是当你想要一个精心设计的猜测时:
SharpGl需要更少的间接步骤,因为它省略了Windows窗体宿主控件作为“中间”host目标。尽管对此持保留态度,但我既没有查看过源代码,也没有亲自测试过它。
但实际上:性能应该非常相似。归根结底,繁重的计算操作可能是渲染本身,这是由OpenGL完成的。对最终结果进行分块应该只需要很少的时间。因此,我希望,无论您如何决定,这些选项都不会真正影响您的性能。
为了便于讨论:让我们假设渲染本身( OpenGL部分)需要16毫秒,所以理论上我们的性能大约是60FPS。框架A增加了1ms的开销,框架B增加了4ms的开销。即使在开销上有如此巨大的差异,框架A将以约58FPS呈现,框架B以约50FPS呈现。因此,在这两种情况下,应用程序都应该保持可用。
但让我困惑的是,你对这方面有多想知道。最后,您正在使用OpenGL进行工作,在事情变得糟糕的情况下,简单地切换底层实现应该不会有太多麻烦?对我来说,界面似乎并没有太大的不同。
发布于 2012-11-13 23:20:10
我会说使用OpenTK,或者如果使用SharpGL更舒服,那么在Winforms模式下使用它,并将其嵌入到WPF应用程序中。
原因是OpenGL驱动程序知道如何使用窗口句柄,窗口句柄是随每个winforms控件提供的。在WPF应用程序中,只有一个窗口句柄,即主窗口之一。您可以尝试使用它,但我认为它会带来太多问题。
如果您不希望将内容直接渲染到屏幕上,并且考虑使用PixelBufferObject或RenderBufferObject,那么您可能可以在WPF模式下使用SharpGL (它渲染到RenderBufferObject,然后将生成的缓冲区放在图像中,可能使用WritableBitmap或更多),或者您也可以自己做同样的事情。
https://stackoverflow.com/questions/13228878
复制相似问题