Direct2D - preserve the existing content and overwrite the new values

核能气质少年 提交于 2019-12-11 10:34:30

问题


I am planning to develop a XY Plotter for my application. To give some basic idea, how it should look like (of course the implementation would be different), please refer here and here.

During the simulation (let's assume, it takes 4 hours to complete the simulation), on a fixed X axis, the new Y values should be (over)written.

But, the problem with Direct2D is that, every time pRenderTarget->BeginDraw() is called, the existing Drawing(/Plot/BitMap/Image, etc) is deleted and a new image is being drawn. Therefore I would lose the old values.

Of course, I can always buffer the old Y values in a buffer/variable and use it in the next drawing. But, the simulation runs for 4 hours and unfortunately I can't afford to save all the Y values. That's why, I need to render/draw the new Y values on the existing target-image/plot/etc.

And, If don't call pRenderTarget->EndDraw() within a definite amount of time, my application would crash due to resource constraints.

How do I prevent this problem and achieve the requirement?


回答1:


What you're asking is quite a complex requirement - it's more difficult than it appears! Direct2D is an Immediate-Mode drawing API. There is no state maintenance or persistence of what you have drawn to the screen in immediate mode graphics.

In most immediate-mode graphics APIs, there is the concept of clipping and dirty rects. In Direct2D you can use one of these three techniques to draw to a subset of the screen. Rendering offscreen to bitmap and double-buffering might be a good technique to try. e.g. your process becomes:

  • Draw to off-screen bitmap
  • Blit bitmap to screen
  • On new data, draw to a new bitmap / combine with existing bitmaps

This technique will only work if your plot is not scrolling or changing in scale as you append new data / draw.



来源:https://stackoverflow.com/questions/24860870/direct2d-preserve-the-existing-content-and-overwrite-the-new-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!