Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF和SlimDX(DirectX 11)互操作_Wpf_Slimdx_Directx 11 - Fatal编程技术网

WPF和SlimDX(DirectX 11)互操作

WPF和SlimDX(DirectX 11)互操作,wpf,slimdx,directx-11,Wpf,Slimdx,Directx 11,您好,我已经通过使用D3DImage和共享纹理将SlimDX和DirectX 11图形集成到WPF应用程序中。但是,当以高分辨率(2560x1440)渲染简单场景(例如SlimDX示例中的GameOfLife)时,我的性能非常差 我已经尝试过对我的渲染方法进行一些性能评测,看起来在使backbuffer无效时,大部分时间都花在锁定D3DImage上 _d3dImage.Lock(); // <- this call takes 78,5 % of the time when renderi

您好,我已经通过使用D3DImage和共享纹理将SlimDX和DirectX 11图形集成到WPF应用程序中。但是,当以高分辨率(2560x1440)渲染简单场景(例如SlimDX示例中的GameOfLife)时,我的性能非常差

我已经尝试过对我的渲染方法进行一些性能评测,看起来在使backbuffer无效时,大部分时间都花在锁定D3DImage上

_d3dImage.Lock(); // <- this call takes 78,5 % of the time when rendering the frame
_d3dImage.AddDirtyRect(new Int32Rect(0, 0, _d3dImage.PixelWidth, _d3dImage.PixelHeight));
_d3dImage.Unlock();

\u d3dImage.Lock();// 由于您在锁定和刷新调用(GPU需要与CPU同步的点)上看到了性能问题,我猜您的程序受到了GPU的严重限制,CPU必须一直暂停等待它赶上。这也是禁用计算着色器时性能提高的结果


我不知道在那一点上该告诉你什么,除了如果这个猜测是正确的,那么你的卡似乎无法处理负载。

锁定会阻止线程,直到UI线程停止读取后缓冲区,并且刷新非常昂贵,因此这些结果并不罕见。你的实际业绩数字是多少?你的GPU支持计算着色器吗?如果不是的话,这将在软件中运行(即以嗅觉的速度)。看起来问题可能与GameOfLife示例中使用的计算着色器有关。如果我禁用它,帧速率将恢复到60fps…谢谢,它看起来是这样的。虽然我运行的Radeon HD5850应该可以处理我想象中的负载-着色器并没有那么复杂。这肯定不是它的全部。我也有同样的问题,Lock()会花费很长时间,在Windows窗体中托管DirectX会带来更好的性能。这很有趣。也许WPF+Dx并不是我们想要的。
_device.ImmediateContext.Flush(); // <- 20,6% of the time when rendering the frame