重叠区域颜色显示问题bug?

摘自:http://blog.gmane.org/gmane.comp.graphics.agg

代码如下:

  void TestOverlappedColorProblem()

  {

    agg::rendering_buffer &rbuf = rbuf_window();

    agg::pixfmt_bgr24 pixf(rbuf);


    typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type;

    renderer_base_type renb(pixf);


    typedef agg::renderer_scanline_aa_solid<renderer_base_type> renderder_scanline_type;

    renderder_scanline_type rensl(renb);


    agg::rasterizer_scanline_aa<> ras;

    agg::scanline_u8 sl;

    ras.reset();

    renb.clear(agg::rgba8(255, 255, 255));


    { // box 1

      agg::path_storage path;


      path.move_to(100, 100);

      path.line_to(100, 300);

      path.line_to(300, 300);

      path.line_to(300, 100);

      path.line_to(100, 100);


      ras.add_path(path);

    }


    { // box 2

      agg::path_storage path;


      path.move_to(200, 200);

      path.line_to(200, 400);

      path.line_to(400, 400);

      path.line_to(400, 200);

      path.line_to(200, 200);


      agg::conv_stroke<agg::path_storage> stroke(path);

      stroke.width(2);

      ras.add_path(stroke);

    }

    agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(0, 0, 0));

  }

渲染的结果:可以看到box2的轮廓线在box1的内部,显示为白色,问题是明明采用的是黑色的画刷。

可以通过多次调用render_scanlines_aa_solid,避免这种问题,但是效率不高!!!

邮件原文如下:

Hi, I'm working on drawing images with simple boxes. I've got a problem with the color of overlapping boxes.

The code I wrote is as follows:

  using pixfmt_type     = agg::pixfmt_rgba32;

  using renbase_type    = agg::renderer_base<pixfmt_type>;

  using renderer_type   = agg::renderer_scanline_aa_solid<renbase_type>;

  using rasterizer_type = agg::rasterizer_scanline_aa<>;

  using scanline_type   = agg::scanline_p8;

  rbase.clear(agg::rgba(1, 1, 1));

  { // box 1

    agg::path_storage path;

    path.move_to(100, 100);

    path.line_to(100, 300);

    path.line_to(300, 300);

    path.line_to(300, 100);

    path.line_to(100, 100);

    ras.add_path(path);

  }

  { // box 2

    agg::path_storage path;

    path.move_to(200, 200);

    path.line_to(200, 400);

    path.line_to(400, 400);

    path.line_to(400, 200);

    path.line_to(200, 200);

    agg::conv_stroke<decltype(path)> stroke(path);

    stroke.width(2);

    ras.add_path(stroke);

  }

  ren.color(agg::rgba(0, 0, 0));

  agg::render_scanlines(ras, sl, ren);

One box is a simple stroke and the other is a filled box.

I expected the overlapping region will also be painted with black, but it's painted with white.


你可能感兴趣的:(region,agg,overlapping)