gpt4 book ai didi

c++ - 当从 DirectX BackBuffer 拉伸(stretch)到 WIndow 时,Windows 使用点采样

转载 作者:太空狗 更新时间:2023-10-29 23:07:50 43 4
gpt4 key购买 nike

Windows7 使用点过滤从我的 DirectX9 后台缓冲区延伸到窗口客户区。调整窗口大小时,拉伸(stretch)产生的瑕疵看起来非常糟糕。我们可以通过更改后台缓冲区大小来避免这种情况,但这需要调用 IDirect3DDevice9::Reset()。这会导致黑屏并在调整大小时出现小的延迟。

有什么方法可以改进windows使用的过滤方法吗?或者,有什么方法可以从不同的 DirectX 表面(例如渲染目标)更新窗口?


我正在使用非托管 C++ DirectX 代码。假设我有一个 1280 x 720 的后缓冲表面:

D3DPRESENT_PARAMETERS  presentParams;
presentParams.BackBufferWidth = 1280;
presentParams.BackBufferHeight = 720;
gD3D->CreateDevice(
0, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&presentParams,
&pD3D9Device);

但我有一个 1920 x 1080 的窗口:

hWnd = CreateWindowExA(NULL, "WindowClass", winName,
flags, 0, 0, 1920, 1080,
NULL, NULL, hInstance, NULL);

当我调用 Present() 时,窗口会将我的 DirectX 后台缓冲区拉伸(stretch)到窗口。然而,他们的拉伸(stretch)似乎没有执行任何过滤。

pD3D9Device->Present(NULL, NULL, NULL, NULL);

我可以调整后备缓冲区的大小,但这需要调用 Reset() 和 Reset()导致视频内存表面丢失。

最佳答案

当我尝试在窗口中播放视频时遇到了这个问题,并且想在不需要重置设备的情况下调整窗口大小。

我从 mpc-hc 源代码中找到了一个解决方案:https://github.com/mpc-hc/mpc-hc/blob/develop/src/filters/renderer/VideoRenderers/SyncRenderer.cpp

1) 使后备缓冲区变大(您期望窗口的最大尺寸)-> 我选择了屏幕尺寸

2) 只绘制一个与窗口大小相等的矩形

3) 使用 Device.Present(srcrect, destrect)。 srcrect 和 destrect 是同一个矩形,都是窗口大小。

我是 directX 的新手,但这个解决方案适合我。

关于c++ - 当从 DirectX BackBuffer 拉伸(stretch)到 WIndow 时,Windows 使用点采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11462928/

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