AGG代碼框架以及變量剖析
1源碼目錄
1)examples
最大的參考價值,作者在AGG庫下的example目錄中,創建了很多win32的測試用例,創建使用的是VC6.0的工程,目前采用VS2005,可以輕松的進行工程的導入。初學者可以簡單的使用。進入agg\examples\win32_api目錄,點擊example.dsw,允許進行工程的導入,就OK了。接下來會對每一個例子進行詳細的應用剖析。
2)font_freetype
??
3)font_win32_tt
??
4)gps
多邊形集合算法,後面剖析一二!!
5)include
這是一個非常重要的文件夾,裏面包含有三個文件夾和一堆的頭文件:ctrl,platform(作者在這裏封裝了系統的函數,提供了一種簡單測試
6)src
該目錄下的源碼文件有vcgen,trans等,不明所以,還有platform
util等文件夾,對應於每一個平臺的實現文件。
2 框架代碼分析
rendering buffer (frame buffer 我們可以理解為顯存)存儲一塊連續的內存區域,不知道自身具體存儲內容的結構,只按照行的長度,向外提供行指針,有寬、高、步長屬性。
spanrender 水平區段繪制器,用於繪制scanline中的段,與renderingbuffer直接交互,將scanline的內容映射到顯存中。
outline 輪廓線,將矢量數據轉化為點陣格式
scanline將點陣格式的點集合,轉化成為renderer使用的水平區段。
renderer將點陣數據填上顏色放入顯存中
rasterizer柵格器,用於轉化上層的矢量數據到柵格集合中。
Vectortransitions 矢量變化,一個復雜的集合對應著n多convs 對點集合的操作。
一個比方來介紹AGG裏面的一組關系,rasterizer,scanline,和renderer之間的關系.它們就如同你在黑板面前拿著一本一冊,用粉筆畫黑板報.那本畫冊就是rasterizer,他存儲圖形,黑板套裝(包括粉筆)就是我們的renderer,而你就是中間的scanline. AGG中就是通過
變量定義:float 還是double類型
實際上,這來源於C/C++對float和double類型的處理方法。如果你定義一個類似如下的函數:
void foo(float x, float y) ,傳遞的參數值永遠都是double類型。除此之外,在矩陣變換中,使用double類型是最合理的,因為采用float類型,只能夠顯示7到10位小數點,遇到精度的計算錯誤是難以避免的。因此C/C++采用double類型,那是再自然不過的選擇。
凡是有例外,我還是非常贊同在頂點源中使用float類型,例如: agg::path_storage,還有其他的轉換器保存了大量的頂點數組(agg::conv_stroke)。交叉使用double和float類型,會導致問題更加復雜。
AGG代碼框架以及變量剖析