none
请教一下 ID2D1Layer 的工作原理 RRS feed

  • 问题

  • 我在用 Direct2D 编写一个时钟的程序。我的想法是这样的:

    由于在尺寸不更改的情况下,时钟的背景包括刻度等等是不需要重画的,因此我使用一个 bool 型的变量 need_to_draw_background 用于标识是否需要重绘背景。我希望使用一个层来保存背景内容,当窗口尺寸更改时,设定 need_to_draw_background 为 true。在每次绘制时,如果 need_to_draw_background 为 true,就在层上重绘背景,然后将 need_to_draw_background 设定为 false,然后将此层合成到渲染目标上。最后绘制钟表指针。

    这是我的部分代码:

    p_render_target->BeginDraw();
    
    p_render_target->PushLayer(LayerParameters(), p_layer_background);
    if (need_to_draw_background)
    {
      // clear background
      // draw calibrate
      need_to_draw_background = false;
    }
    p_render_target->PopLayer();
    
    // draw clock hands.
    
    p_render_target->EndDraw();

    这个程序是错误的,对于层的 pop 动作似乎没有将层中内容绘制到渲染目标,我貌似对层的理解有误。我以为层是类似于一个位图,当我将一个层 push 到一个渲染目标后,对渲染目标的绘制动作会转到层上,当我 pop 一个层时,层的内容会被绘制到渲染目标。但这个理解可能是错的。

    那么层是如何工作的?如何能按照我的想法来实现一个钟表?


    EFanZh

    • 已移动 Helen Zhao 2012年7月16日 3:05 (发件人:Visual C++)
    2012年7月14日 4:51

全部回复