gpt4 book ai didi

directx - 如何在 D3D 窗口应用程序中启用 VSYNC?

转载 作者:行者123 更新时间:2023-12-04 00:28:28 24 4
gpt4 key购买 nike

所以,我在窗口应用程序中使用 D3D。

我使用以下参数初始化 D3D:

windowed: true;
backbufferformat: D3DFMT_X8R8G8B8;
presentinterval: D3DPRESENT_INTERVAL_ONE;
swapeffect: DISCARD

每次调用 OnPaint 时,我都会将图像渲染到后台缓冲区并将其呈现在前面。

据我所知(MSDN 也是这么说的),一旦我设置了 D3DPRESENT_INTERVAL_ONE , vsync 将起作用。

但在这种情况下,水平拖动时图像会撕裂。

(图像上似乎有一条线,线下方的图像显示在监视器上,上面的部分如下。)

一些站点说 D3DPRESENT_INTERVAL_ONE 在窗口应用程序中不起作用。

我怎样才能启用 vsync 呢?

附言我终于发现启用了 D3D vsync,而有些窗口设置不正确,可能是窗口本身没有同步。不过,我还没有偷看设置。

最佳答案

我假设您使用的是 D3D9?应该添加那个标签。在您的 D3DPRESENT_PARAMS多变的:

if (bVysncEnabled)
{
presentParams.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
presentParams.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
}
else
{
presentParams.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
presentParams.FullScreen_RefreshRateInHz = 0;
}

如果你已经这样做了并且你正在使用旧的 GDI 东西,那不是你的 vsync 设置有问题,而是窗口设置。您必须启用双缓冲,否则您仍然会撕裂。

关于directx - 如何在 D3D 窗口应用程序中启用 VSYNC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3915416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com