一、看回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 &);