00001 #include "agg_basics.h" 00002 #include "agg_rendering_buffer.h" 00003 #include "agg_rasterizer_scanline_aa.h" 00004 #include "agg_scanline_p.h" 00005 #include "agg_renderer_scanline.h" 00006 #include "agg_ellipse.h" 00007 #include "agg_pixfmt_gray.h" 00008 #include "agg_pixfmt_rgb.h" 00009 #include "ctrl/agg_slider_ctrl.h" 00010 #include "platform/agg_platform_support.h" 00011 00012 enum flip_y_e { flip_y = true }; 00013 00014 00015 class the_application : public agg::platform_support 00016 { 00017 agg::slider_ctrl<agg::rgba8> m_alpha; 00018 00019 public: 00020 the_application(agg::pix_format_e format, bool flip_y) : 00021 agg::platform_support(format, flip_y), 00022 m_alpha(5, 5, 320-5, 10+5, !flip_y) 00023 { 00024 m_alpha.label("Alpha=%1.0f"); 00025 m_alpha.range(0, 255); 00026 m_alpha.value(255); 00027 add_ctrl(m_alpha); 00028 } 00029 00030 virtual void on_draw() 00031 { 00032 agg::pixfmt_bgr24 pf(rbuf_window()); 00033 00034 typedef agg::pixfmt_alpha_blend_gray<agg::blender_gray8, agg::rendering_buffer, 3, 2> pixfmt_gray8_bgr24r; 00035 typedef agg::pixfmt_alpha_blend_gray<agg::blender_gray8, agg::rendering_buffer, 3, 1> pixfmt_gray8_bgr24g; 00036 typedef agg::pixfmt_alpha_blend_gray<agg::blender_gray8, agg::rendering_buffer, 3, 0> pixfmt_gray8_bgr24b; 00037 00038 pixfmt_gray8_bgr24r pfr(rbuf_window()); 00039 pixfmt_gray8_bgr24g pfg(rbuf_window()); 00040 pixfmt_gray8_bgr24b pfb(rbuf_window()); 00041 00042 agg::renderer_base<agg::pixfmt_bgr24> rbase(pf); 00043 agg::renderer_base<pixfmt_gray8_bgr24r> rbr(pfr); 00044 agg::renderer_base<pixfmt_gray8_bgr24g> rbg(pfg); 00045 agg::renderer_base<pixfmt_gray8_bgr24b> rbb(pfb); 00046 00047 agg::rasterizer_scanline_aa<> ras; 00048 agg::scanline_p8 sl; 00049 00050 rbase.clear(agg::rgba(1,1,1)); 00051 00052 agg::ellipse er(width() / 2 - 0.87*50, height() / 2 - 0.5*50, 100, 100, 100); 00053 ras.add_path(er); 00054 agg::render_scanlines_aa_solid(ras, sl, rbr, 00055 agg::gray8(0, unsigned(m_alpha.value()))); 00056 00057 agg::ellipse eg(width() / 2 + 0.87*50, height() / 2 - 0.5*50, 100, 100, 100); 00058 ras.add_path(eg); 00059 agg::render_scanlines_aa_solid(ras, sl, rbg, 00060 agg::gray8(0, unsigned(m_alpha.value()))); 00061 00062 agg::ellipse eb(width() / 2, height() / 2 + 50, 100, 100, 100); 00063 ras.add_path(eb); 00064 agg::render_scanlines_aa_solid(ras, sl, rbb, 00065 agg::gray8(0, unsigned(m_alpha.value()))); 00066 00067 agg::render_ctrl(ras, sl, rbase, m_alpha); 00068 } 00069 00070 }; 00071 00072 00073 00074 int agg_main(int argc, char* argv[]) 00075 { 00076 the_application app(agg::pix_format_bgr24, flip_y); 00077 app.caption("AGG Example. Component Rendering"); 00078 00079 if(app.init(320, 320, 0)) 00080 { 00081 return app.run(); 00082 } 00083 return 1; 00084 } 00085 00086