我遇到的问题是,当D3D应用程序同时运行时,WPF应用程序以非常低的帧速率运行。
情况如下:第一个应用程序是Winforms表单,使用SlimDX和D3D10呈现3D图形。应用程序不以全屏模式运行,而是在最大化窗口中运行。这非常顺利和快速。
第二个应用程序包含一个WPF窗口,该窗口呈现ScatterView
一些图像。 WPF窗口是透明的(AllowsTransparency="True"
具有透明背景)。这里的一般想法是WPF窗口应该看起来像是在3D场景的顶部合成。
但是,一旦D3D10应用程序运行,WPF应用程序的性能就会降低到1-2 fps(由WPF性能工具测量)。这不是因为我的计算机硬件无法渲染这两个应用程序:D3D10应用程序总是非常流畅地渲染3D场景,并且当我同时运行两个应用程序时,GPU和CPU利用率不会最大化。即使我为WPF应用程序提供更高的进程优先级,渲染性能仍保持在1-2 fps。
我还尝试将两个应用程序合并到一个进程中,并使用D3DImage
并使用共享的D3D10表面(使用D3D9Ex设备)将其提供给D3DImage
。此外,我尝试使用InteropBitmap
并将帧数据写入其中。所有这些解决方案都可以在其上运行并生成一个带有一些WPF控件的D3D10场景,但它们都不能使WPF顺利运行。
使用两个不同的应用程序进程的想法是我最终的想法是将WPF渲染堆栈与D3D10在同一进程中渲染时可能产生的任何最终性能影响分离。