我瞭解的AGG的總體結構按照檔案大致分為:
1)基本定義(config,basics....);
2)基本操作、類型(主要供AGG本身內部使用 math,math_stroke,dda_line,color,rendering_buffer,ect.);
3)轉換(agg_conv_s...)主要用於實現一些變換和類型轉換操作
4)字型相關(font_xx);
5 )spans 根據輪廓產生掃描線共置顏色
6)繪製相關(renderer_xx)繪製調用,與相應的記憶體互動,產生待顯示圖形區(可以認為是連續記憶體區)
7)rasterizers柵格化相關檔案,通過相應的scanline完成從儲存的點座標資訊和相應命令到記憶體區塊
AGG的網站上說只要將相應的標頭檔和cpp檔案加入到項目中當作自己的檔案編譯即可,但是許多剛剛開始使用AGG的人來說並不瞭解AGG本身的功能和代碼結構,導致只能運行其提供的sample。AGG通過泛型,跨平台性做的很好,可以在許多開發環境中直接編譯。我們可以在VC6中直接將其編譯成靜態連結庫,然後將所有的.h檔案拷入到VC98\include\agg中,將編譯完的.lib檔案拷入到VC98\lib中,這樣我們便可能在VC6中通過alt+F7的link-> input中載入你所編譯的.lib檔案達到配置agg的目的,你建立一個cpp檔案可以直接#include <agg/agg_basics.h>....之後再有一個繼承agg_platform_support的實現和agg_main即可完成一個相應的架構。
為了作出一個進度報告,將前一階段的工作書面化一下,所以畫了幾個圖,在這隻能憑記憶,恢複一下了。
rendering buffer (frame buffer 我們可以理解為顯存)儲存一塊連續的記憶體地區,不知道自身具體儲存內容的結構,只按照行的長度,向外提供行指標,有寬、高、步長屬性。
span render 水平區段繪製器,用於繪製scanline中的段,與rendering buffer直接互動,將scanline的內容映射到顯存中。
outline 輪廓線,將向量資料轉化為點陣格式 rasterizer 內部類。scanline 將點陣格式的點集合,轉化成為renderer使用的水平區段。
renderer 將點陣資料填上顏色放入顯存中
rasterizer 柵格器,用於轉化上層的向量資料到柵格集合中。
Vector transitions 向量變化,一個複雜的集合對應著n多convs 對點集合的操作。
今天突然想起一個比方來介紹agg裡面的一組關係,rasterizer,scanline,和renderer之間的關係.它們就如同你在黑板面前拿著一本一冊,用粉筆畫黑板報.那本畫冊就是rasterizer,他儲存圖形,黑板套裝(包括粉筆)就是我們的renderer,而你就是中間的scanline. AGG中就是通過scanline把rasterizer中存放的柵格資訊用粉筆pixfmt_renderer轉化到黑板rendering_buffer中,完成最終的繪製.具體過程大家還是要讀代碼~~:)!!!好運