【发布时间】:2020-11-15 15:46:00
【问题描述】:
在 DirectX 中缩小尺寸时,我注意到底部/右侧边缘闪烁。
如果您修复了交换链的大小(红色),并将 win32 背景设置为绿色,您将在调整大小时得到以下结果:
似乎窗口大小落后于鼠标位置(“拖动矩形”),但 DirectX 填充的区域(红色和黑色)与拖动矩形匹配,其余部分将使用窗口背景颜色(绿色)绘制.
DirectX Utility Toolkit (DXUT) 没有这个问题。试验他们的设置,我发现设置 DXGI_SWAP_CHAIN_DESC::SwapEffect = DXGI_SWAP_EFFECT_DISCARD 只会在 sizemove 期间将屏幕涂成绿色(窗口背景颜色)。我假设 DXUT 对 win32 输入 modal sizemove loop 以在 sizemove 期间显示 DirectX 内容时有自己的特殊处理。
DXGI_SWAP_EFFECT_DISCARD 是old blit mode presentation model 的一部分。值得注意的是它不能有DXGI_SWAP_CHAIN_DESC1::Scaling = DXGI_SCALING_NONE 缩放必须拉伸到窗口大小。所以我最好的猜测是这种行为是由于翻转演示模型的实现(它翻转了一个太小(黑色)的矩形,然后通过将其余部分涂成绿色来覆盖)。
有谁知道如何阻止win32背景显示?
编辑:
感谢 IInspectable!我可以确认WS_EX_NOREDIRECTIONBITMAP 扩展样式有效:它会阻止工件从 win32 背景显示
【问题讨论】:
-
那么问题到底是什么?
-
您可以指示系统不为您的窗口分配重定向位图,从而消除尝试渲染其背景的窗口的视觉伪影。 Kenny Kerr 的文章Windows with C++ : High-Performance Window Layering Using the Windows Composition Engine 解释了如何设置它。尽管从问题中不清楚,但这是否是您要解决的问题。
标签: winapi resize directx window-resize dxgi