D3D9
+ -

D3D9渲染视频只有60帧 Direct3DDevice9::Present()阻塞

2024-05-15 23 0

这是因为IDirect3DDevice9::Present()会阻塞,达到的最高fps和屏幕刷新率一样,因为Direct3D有这项机制,认为更新频率高于屏幕刷新率没有实际意义,所以在Present里阻塞了一段时间。
这是一个很方便的功能,但有时我们不想让Present阻塞我们的主循环。微软的Present函数的文档中并没有指出Present阻塞的问题,而是在其他地方说明了,解决办法就是在创建Device的时候指定其更新频率,在D3DPRESENT_PARAMETERS.PresentationInterval这个属性,指定成D3DPRESENT_INTERVAL_IMMEDIATE。

    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;//这里是关键

IDirect3DDevice9::Present()阻塞10多毫秒ms才返回,fps只能达到60的原因及解决办法

0 篇笔记 写笔记

D3D9渲染视频只有60帧
这是因为IDirect3DDevice9::Present()会阻塞,达到的最高fps和屏幕刷新率一样,因为Direct3D有这项机制,认为更新频率高于屏幕刷新率没有实际意义,所以在Present里阻塞了一段时间。这是一个很方便的功能,但有时我们不想让Present阻塞我们的主循环。微软的Prese......
作者信息
站长漫谈
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!