Windows7 使用点过滤从我的 DirectX9 后台缓冲区延伸到窗口客户区。当窗口调整大小时,拉伸的伪影看起来很糟糕。我们可以通过更改后台缓冲区大小来避免这种情况,但这需要调用 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 后台缓冲区拉伸到窗口。然而,他们的伸展似乎没有执行任何过滤。
pD3D9Device->Present(NULL, NULL, NULL, NULL);
我可以调整后缓冲区的大小,但这需要调用 Reset() 和Reset()会导致视频内存表面丢失。