如何等待 GPU 在 DirectX9 中完成它的工作?
How to wait for the GPU to finish its work in DirectX9?
我正在寻找一种方法来等待 GPU 在 DirectX9 中完成其工作。相当于 OpenGL 中的 glFinish
命令...
我已经知道这不是我应该做的事,但我必须这样做!我正在编写一个集成在 WPF 中的线程图形引擎,我需要进行某种离屏渲染,以便为 D3DImage 提供有效的表面。计算帧的时间非常长(超过 100 毫秒),并且即使我以正确的方式锁定所有内容,有时也会在我的引擎未完全计算帧时渲染 WPF 图像。我几乎可以肯定这只是一个 Finish 问题,但我不知道如何做到这一点。
到目前为止,我尝试像这样启动 DX9 查询:
using namespace SlimDX.Direct3D9;
public class GraphicsDevice: Device
{
...
public void Finish()
{
var query = new Query(this, QueryType.Event);
EndScene();
while (!query.CheckStatus(true)) ;
}
}
但是好像不行...
所以,第一个问题不谈 WPF,你知道如何等待 GPU 完成发送给驱动程序的内容吗?
谢谢!
这就是解决方案。
我不知道它真的有效!
我使用 EventQuery 'mark' 我最后一次调用 GPU。
然后我使用 GetData/CheckStatus 方法使用某种无限循环刷新 GPU 指令并等待 GPU 最终触发 EventQuery。
我正在寻找一种方法来等待 GPU 在 DirectX9 中完成其工作。相当于 OpenGL 中的 glFinish
命令...
我已经知道这不是我应该做的事,但我必须这样做!我正在编写一个集成在 WPF 中的线程图形引擎,我需要进行某种离屏渲染,以便为 D3DImage 提供有效的表面。计算帧的时间非常长(超过 100 毫秒),并且即使我以正确的方式锁定所有内容,有时也会在我的引擎未完全计算帧时渲染 WPF 图像。我几乎可以肯定这只是一个 Finish 问题,但我不知道如何做到这一点。
到目前为止,我尝试像这样启动 DX9 查询:
using namespace SlimDX.Direct3D9;
public class GraphicsDevice: Device
{
...
public void Finish()
{
var query = new Query(this, QueryType.Event);
EndScene();
while (!query.CheckStatus(true)) ;
}
}
但是好像不行...
所以,第一个问题不谈 WPF,你知道如何等待 GPU 完成发送给驱动程序的内容吗?
谢谢!
这就是解决方案。 我不知道它真的有效!
我使用 EventQuery 'mark' 我最后一次调用 GPU。 然后我使用 GetData/CheckStatus 方法使用某种无限循环刷新 GPU 指令并等待 GPU 最终触发 EventQuery。