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()函数时,Windows会将我的DirectX后备缓冲区拉伸到窗口大小。然而,他们的拉伸似乎没有执行任何滤波。
pD3D9Device->Present(NULL, NULL, NULL, NULL);
我可以调整后备缓冲区的大小,但这需要调用Reset(),Reset()会导致视频内存表面丢失。
windows
和windows-7
标签,因为它们没有意义。这个问题是关于DirectX9
的,显然是特定于Windows的,而且是DirectX
在进行采样/渲染,而不是Windows本身(如果是Windows完成,你就不需要DirectX)。 - Ken White