1. 程式人生 > >AGG代碼框架以及變量剖析

AGG代碼框架以及變量剖析

agg 源碼目錄 代碼框架

1源碼目錄

1examples

最大的參考價值,作者在AGG庫下的example目錄中,創建了很多win32的測試用例,創建使用的是VC6.0的工程,目前采用VS2005,可以輕松的進行工程的導入。初學者可以簡單的使用。進入agg\examples\win32_api目錄,點擊example.dsw,允許進行工程的導入,就OK了。接下來會對每一個例子進行詳細的應用剖析。

2font_freetype

??

3font_win32_tt

??

4gps

多邊形集合算法,後面剖析一二!!

5include

這是一個非常重要的文件夾,裏面包含有三個文件夾和一堆的頭文件:ctrlplatform(作者在這裏封裝了系統的函數,提供了一種簡單測試

AGG的方式),util.大部分的頭文件都是完整的包含類的聲明和實現,受到模塊類定義的限制,

6src

該目錄下的源碼文件有vcgentrans等,不明所以,還有platform

util等文件夾,對應於每一個平臺的實現文件。

2 框架代碼分析

rendering buffer (frame buffer 我們可以理解為顯存)存儲一塊連續的內存區域,不知道自身具體存儲內容的結構,只按照行的長度,向外提供行指針,有寬、高、步長屬性。

spanrender 水平區段繪制器,用於繪制scanline中的段,與renderingbuffer直接交互,將scanline的內容映射到顯存中。

outline 輪廓線,將矢量數據轉化為點陣格式 

rasterizer內部類。

scanline將點陣格式的點集合,轉化成為renderer使用的水平區段。

renderer將點陣數據填上顏色放入顯存中

rasterizer柵格器,用於轉化上層的矢量數據到柵格集合中。

Vectortransitions 矢量變化,一個復雜的集合對應著nconvs 對點集合的操作。

一個比方來介紹AGG裏面的一組關系,rasterizer,scanline,renderer之間的關系.它們就如同你在黑板面前拿著一本一冊,用粉筆畫黑板報.那本畫冊就是rasterizer,他存儲圖形,黑板套裝(包括粉筆)就是我們的renderer,而你就是中間的scanline. AGG中就是通過

scanlinerasterizer中存放的柵格信息用粉筆pixfmt_renderer轉化到黑板rendering_buffer中,完成最終的繪制.


變量定義: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代碼框架以及變量剖析