Direct2D - 保留现有内容并覆盖新值

时间:2014-07-21 08:41:21

标签: c++ graphics mfc 2d direct2d

我打算为我的应用程序开发XY绘图仪。为了给出一些基本的想法,它应该是什么样子(当然实现方式会有所不同),请参考herehere

在模拟过程中(我们假设,完成模拟需要4个小时),在固定的X轴上,新的Y值应该(过)写入。

但是,Direct2D的问题在于,每次调用pRenderTarget->BeginDraw()时,都会删除现有的绘图(/ Plot / BitMap / Image等)并绘制新图像。因此,我会失去旧的价值观。

当然,我总是可以缓冲缓冲区/变量中的旧Y值,并在下一个绘图中使用它。但是,模拟运行了4个小时,不幸的是我无法保存所有的Y值。这就是为什么我需要在现有的目标图像/情节/等上渲染/绘制新的Y值。

并且,如果不在一定时间内调用pRenderTarget->EndDraw(),我的应用程序将因资源限制而崩溃。

如何防止此问题并达到要求?

1 个答案:

答案 0 :(得分:1)

你所要求的是一个非常复杂的要求 - 它比它看起来更难! Direct2D是Immediate-Mode drawing API。在立即模式图形中,您没有对屏幕绘制的状态维护或持久性。

在大多数立即模式图形API中,存在剪切和脏请求的概念。在Direct2D中,您可以使用these three techniques之一绘制到屏幕的子集。将屏幕外渲染到位图和双缓冲可能是一种很好的尝试方法。例如你的过程变成了:

  • 绘制到离屏位图
  • Blit bitmap to screen
  • 在新数据上,绘制到新位图/与现有位图结合使用

此技术仅适用于附加新数据/绘图时绘图不滚动或缩放的情况。

相关问题