Direct2D使用后台缓冲区吗?

时间:2011-06-20 16:58:45

标签: direct2d

阅读http://blogs.msdn.com/b/directx/archive/2009/09/29/comparing-direct2d-and-gdi.aspx

  

演示模型

     

Windows时   首先设计,有不足之处   内存允许每个窗口   存储在自己的位图中。结果是,   GDI总是直接在逻辑上呈现   到屏幕,各种剪辑   应用的地区,以确保它做到   不要在窗外渲染。在   合同,Direct2D遵循一个模型   应用程序呈现给的地方   后缓冲区,结果是   原子地“翻转”时   申请完成绘图。这个   允许Direct2D处理动画   场景比GDI更流畅   可以。

作者说Direct2D使用后台缓冲区,并且'翻转'他的意思是交换链。我创建了一个简单的演示,在鼠标单击时在随机位置绘制一个矩形。但是之前的矩形没有被清除,因此它似乎直接被绘制到屏幕上并且不使用任何后备缓冲区。

3 个答案:

答案 0 :(得分:4)

初始化Direct2D操作的RenderTarget时,可以在第二个参数中指定D2D1_PRESENT_OPTIONS选项。

我认为让您困惑的是D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS以及缓冲区未交换但复制的事实。

答案 1 :(得分:1)

这并不反驳后台缓冲区的存在,它只意味着重绘之间不会清除后台缓冲区。正确的观察,错误的结论!

如果增加链中的后缓冲区数量,您将在点击时开始注意闪烁的矩形,因此您应该始终在重绘之间清除后缓冲区。

答案 2 :(得分:1)

Direct2D确实使用了后台缓冲区。

也许你忘了在调用begindraw之后清除你的渲染目标,这是后缓冲区,所以之前的绘制就在那里?