一、看回AGG入门(二)时on_draw()虚函数里的代码:
agg::rendering_buffer &rbuf = rbuf_window();
agg::pixfmt_rgb24 pixf(rbuf);
agg::renderer_base<agg::pixfmt_rgb24> renb(pixf);
renb.clear(agg::rgba8(255, 255, 255));
pixf.copy_pixel(20, 20, agg::rgba8(0, 0, 255));
二、渲染器
什么是渲染?
渲染是把内存中的绘图指令真正执行的过程。比如说,绘制一条线段,在内存里只会保存着两个端点的坐标和线段的宽度,而渲染就把这两个端点转换为位图、缓存甚至显示屏上的一个个像素的数据。又比如说,纸飞机下面肯定是要有投影的了,但这个投影的质量,就由渲染器决定;线段是走样的(A),还是反走样的(B),靠的就是渲染器的指令了。
AGG里的渲染器
AGG分有多种渲染器。在AGG中,渲染器负责表现扫描线中的每个线段。在渲染器之前,AGG图形中的线段是没有颜色值的,只是位置、长度和 覆盖率(透明度)。渲染器赋于线段色彩,最终成为一幅完整的图像。其中最常用的是:
- 像素格式渲染器
- 基础渲染器
- 扫描线(反锯齿)渲染器
三、三种渲染器间的关系
- 像素格式渲染器(PixelFormat Renderer)是最基础的渲染器,不需要任何其他渲染器的支持,所以可以直接声明;
- 基础渲染器(Base Renderer)是中级渲染器,需要像素格式作为模版和像素格式渲染器的支持;
- 扫描线渲染器(Scanline Renderer)是高级渲染器,需要基础渲染器作为模版和支持;
(注:模版主要是为了获取像素格式的信息)
所以,除像素格式渲染器声明为:
agg::class object(agg::rendering_buffer &);
之外其他的渲染器都声明为:
agg::class<template> object(template &);