【问题标题】:Direct2D - preserve the existing content and overwrite the new valuesDirect2D - 保留现有内容并覆盖新值
【发布时间】:2014-09-11 17:00:45
【问题描述】:

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

在模拟期间(假设完成模拟需要 4 小时),在固定的 X 轴上,应该(覆盖)写入新的 Y 值。

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

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

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

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

【问题讨论】:

    标签: c++ graphics mfc 2d direct2d


    【解决方案1】:

    您要问的是一个相当复杂的要求 - 它比看起来更难! Direct2D 是一个Immediate-Mode drawing API。在即时模式图形中,您在屏幕上绘制的内容没有状态维护或持久性。

    在大多数即时模式图形 API 中,都有裁剪和脏矩形的概念。在 Direct2D 中,您可以使用 these three techniques 之一绘制到屏幕的子集。将屏幕外渲染到位图和双缓冲可能是一个很好的尝试技术。例如你的流程变成:

    • 绘制到屏幕外位图
    • 位图到屏幕
    • 在新数据上,绘制到新位图/与现有位图结合

    只有当您添加新数据/绘图时绘图没有滚动或缩放时,此技术才有效。

    【讨论】:

      猜你喜欢
      • 2014-09-09
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 2017-02-07
      • 2023-03-28
      • 2018-06-27
      • 1970-01-01
      • 2018-01-18
      相关资源
      最近更新 更多