阅读https://learn.microsoft.com/en-us/windows/win32/direct2d/comparing-direct2d-and-gdi:
表示模型
Windows最初设计时,内存不足,无法将每个窗口存储在自己的位图中。因此,GDI总是在逻辑上直接呈现到屏幕上,并应用了不同的裁剪区域,以确保它不会呈现在其窗口之外。在合同中,Direct2D遵循一个模型,在这个模型中,应用程序呈现到后台缓冲区,当应用程序完成绘图时,结果会被原子地“翻转”。这使得Direct2D能够比GDI更流畅地处理动画场景。
作者说,Direct2D使用后缓冲,我猜他所说的“翻转”指的是交换链。我创建了一个简单的演示,在鼠标点击的任意位置绘制一个矩形。但是以前的矩形没有被清除,所以它似乎是直接绘制到屏幕上,并且不使用任何回缓冲区。
发布于 2012-02-10 21:31:17
当您为您的RenderTarget操作初始化Direct2D时,可以在第二个参数中指定D2D1_PRESENT_OPTIONS选项。
我认为让您困惑的是D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS和缓冲区不是交换而是复制的事实。
发布于 2011-06-20 17:02:12
这并不能证明备份缓冲区的存在,它只意味着在重绘制之间没有清除回退缓冲区。正确的观察,错误的结论!
如果您增加了链中的回缓冲区的数量,您将开始注意到闪烁的矩形,当您继续单击,所以您应该始终清除您的后缓冲区之间的重画。
发布于 2011-07-29 12:58:19
Direct2D确实使用回缓冲。
也许您忘记清除您的呈现目标,这是回缓冲区,就在调用了开始绘图之后,所以以前的绘制仍然停留在那里?
https://stackoverflow.com/questions/6414756
复制相似问题