阅读http://blogs.msdn.com/b/directx/archive/2009/09/29/comparing-direct2d-and-gdi.aspx:
演示模型
Windows时 首先设计,有不足之处 内存允许每个窗口 存储在自己的位图中。结果是, GDI总是直接在逻辑上呈现 到屏幕,各种剪辑 应用的地区,以确保它做到 不要在窗外渲染。在 合同,Direct2D遵循一个模型 应用程序呈现给的地方 后缓冲区,结果是 原子地“翻转”时 申请完成绘图。这个 允许Direct2D处理动画 场景比GDI更流畅 可以。
作者说Direct2D使用后台缓冲区,并且'翻转'他的意思是交换链。我创建了一个简单的演示,在鼠标单击时在随机位置绘制一个矩形。但是之前的矩形没有被清除,因此它似乎直接被绘制到屏幕上并且不使用任何后备缓冲区。
答案 0 :(得分:4)
初始化Direct2D操作的RenderTarget时,可以在第二个参数中指定D2D1_PRESENT_OPTIONS选项。
我认为让您困惑的是D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS以及缓冲区未交换但复制的事实。
答案 1 :(得分:1)
这并不反驳后台缓冲区的存在,它只意味着重绘之间不会清除后台缓冲区。正确的观察,错误的结论!
如果增加链中的后缓冲区数量,您将在点击时开始注意闪烁的矩形,因此您应该始终在重绘之间清除后缓冲区。
答案 2 :(得分:1)
Direct2D确实使用了后台缓冲区。
也许你忘了在调用begindraw之后清除你的渲染目标,这是后缓冲区,所以之前的绘制就在那里?