2011-06-20 46 views
2

阅读http://blogs.msdn.com/b/directx/archive/2009/09/29/comparing-direct2d-and-gdi.aspxDirect2D是否使用回缓冲区?

演示模型

当被 第一设计的Windows,没有足够的内存 ,让每一个窗口是存储在自己的位图 。因此,GDI总是逻辑上直接将 呈现到屏幕上,并应用各种剪辑 区域以确保它不会在其窗口之外进行渲染。在 合同中,Direct2D遵循 的模型,其中应用程序呈现为 后台缓冲区,结果为 当 应用程序完成绘图时,以原子方式“翻转”。这个 允许Direct2D处理动画 更流畅地GDI 可以。

作者说,Direct2D使用后缓冲区,通过“翻转”他意味着交换链我猜。我创建了一个简单的演示,在鼠标点击的随机位置绘制一个矩形。但以前的矩形不会被清除,因此它似乎直接绘制到屏幕上,并且不使用任何后台缓冲区。

回答

1

这并不能证明back-buffer的存在,它只意味着在重绘之间不清除back-buffer。正确的观察,错误的结论!

如果增加链中的后置缓冲区的数量,当您继续单击时,您会开始注意到闪烁的矩形,因此您应该始终在重绘之间清除后台缓冲区。

+0

如果我点击两次,则会出现两个矩形。如果使用back-buffer,那不应该是我想的情况。 – Alice

+0

你为什么这么想? – Blindy

+0

我猜如果使用back-buffer,每当我调用BeginDraw时它都会被交换。所以,如果我使用两个BeginDraw调用绘制两个矩形,那么一个矩形转到缓冲区1,另一个矩形转到缓冲区2.然后,我们应该只看到一个矩形。 – Alice

1

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

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

4

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

我想什么使你感到困惑的是D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS和缓冲区没有交换但复制的事实。

相关问题