virtual void on_draw() { typedef agg::renderer_base<pixfmt> base_ren_type; pixfmt pf(rbuf_window()); base_ren_type ren_base(pf); ren_base.clear(agg::rgba(1,1,1)); agg::scanline_u8 sl; agg::rasterizer_scanline_aa<> ras; render_gouraud(sl, ras); ras.gamma(agg::gamma_none()); agg::render_ctrl(ras, sl, ren_base, m_dilation); agg::render_ctrl(ras, sl, ren_base, m_gamma); agg::render_ctrl(ras, sl, ren_base, m_alpha); }
virtual void on_mouse_button_down(int x, int y, unsigned flags) { unsigned i; if(flags & agg::mouse_right) { agg::scanline_u8 sl; agg::rasterizer_scanline_aa<> ras; start_timer(); for(i = 0; i < 100; i++) { render_gouraud(sl, ras); } char buf[100]; sprintf(buf, "Time=%2.2f ms", elapsed_time()); message(buf); } if(flags & agg::mouse_left) { for (i = 0; i < 3; i++) { if(sqrt( (x-m_x[i]) * (x-m_x[i]) + (y-m_y[i]) * (y-m_y[i]) ) < 10.0) { m_dx = x - m_x[i]; m_dy = y - m_y[i]; m_idx = i; break; } } if(i == 3) { if(agg::point_in_triangle(m_x[0], m_y[0], m_x[1], m_y[1], m_x[2], m_y[2], x, y)) { m_dx = x - m_x[0]; m_dy = y - m_y[0]; m_idx = 3; } } } }