OpenGL ES1.1.12 第二章 2.2,2.3,2.4

來源:互聯網
上載者:User

(僅是草稿,未做整理)

2.2 GL狀態

GL維護著相當多的狀態。此文檔會枚舉每一個狀態變數,並描述這些狀態如何轉變。為便於討論,狀態變數將根據它們的函數功能而進行整理。雖然我們描述在幀緩衝中的操作,但幀緩衝並不是GL狀態的一部分。

這裡有兩種狀態需要區別對待。第一個狀態是GL服務端狀態(GLserver state),運行於服務端。大部分GL狀態屬於些狀態。第二狀態是GL用戶端狀態(GL client state),運行於用戶端。除非有註明,否則此文檔所涉及到的狀態都是服務端狀態。用戶端狀態會明確標明。每一個GL內容相關的案例,都有一個完整的服務狀態組合。用戶端與服務端的每一個串連都有一個服務端狀態組合和用戶端狀態組合。

雖然實現GL可能與硬體有關,但此討論將與在特定的硬體上實現GL是無關聯的。只有在圖形硬體與GL狀態確切地與GL狀態相關,我們才會關注圖形硬體的狀態。

2.3 GL命令文法

GL命令也可以說是函數或過程。多組命令可能有相關的功能,其中的區別在於參數如何給定。為方便起見,我們採用一種標誌來描述命令和參數。

GL命令組成,首先是名字,後面為根據特定命令,最多4字元部分。第一字元表示此命令參數個數。第二字元或字元對錶示參數類型,如8位整型,32位整型,32位定點數,或單精確度浮點數。如果有最後一個字元v,表明命令需要一個數組(向量)指標值,而不是一系列各個的參數。

兩個樣本:

void Color4f( float r,float g,float b,float a );

void GetFloatv( enum value,float *data );

此兩例子是用ANSI C來描述這些命令。總之,一個命令的形式有以下形式1:

rtype是函數的傳回型別,{}號包含所選中的一系列的字元(或者字元對)。表示沒字元。參數包含在[]中,有參數或無參數皆可。從arg1到argN的N個參數的類型為T,對應表示如表2.1所示。如果沒有參數,那麼參數類型將顯式給定。如果最後個字元不是v,那麼N值將會是數字1,2,3或者4(如果沒有數字,那麼參數個數是固定的)

---------------------------------------------------------------------------------

注1 文檔中的描述適用於ANSI C語言,如C++和Ada,即允許傳遞的參數類型的資訊,可以有簡單的聲明和較少的進入點

表2.1:GL命令尾碼字母對應的參數類型。參考表2.2,GL類型定義。

如果最後一個字元為v,那麼只有arg1參數,且是有N個數值的數組。最後我們把unsigned類型用u來表示。並寫在類型前頭(例如,unsingned int縮寫成uint)。

樣本:

void Normal3{xf}( T arg );

可以表示兩函數

void Normal3f( float arg1,float arg2,float arg3 );

void Normal3x( fixed arg1,fixed arg2,fixed arg3 );

類型已經確定的(如沒有尾碼的命令)有13種類型(指標也在其中),詳見表2.2

GL資料類型和指定語言的資料類型的映射關係是指定語言所定義的一部分內容,並且可能是平台相關性的。在類型混合使用及參數歸一化的時候,出現的類型轉換和類型擴充是由語言和平台來定義實現。如,在C語言中有整型和浮點數據會自動類型轉換。但是不包括GL類型中的整型和定點或浮點和定點,因為定點資料不是一個內建類型。可以忽略語言的是enum類型無截斷轉換成定點數,整型資料轉換成定點數要乘於2^16

2.4 基本的GL運行

圖2.1是GL的,命令從左邊進入GL。一些命令是要繪製幾何對象,而另一個是控制命令。

表2.2GL資料類型

GL資料類型並不是C語言類型。如:GL類型int,用在GLint並不在本文檔範圍之類,必不必等同於c語言中的int類型。在實現GL時,可以用比表中所指定的GL類型以更多的位元數。但是一個正確的整型數值,如果超出最小範圍的數值,那麼指定更多的bit也不是必須的。

ptrbits是指指標類型所需要的bit數,換句話說,intptr和sizeptr必須足夠大,從而可以儲存任何地址。

圖2.1 GL

不同階段的對象處理過程:

第一階段,所要操作的幾何元素以頂點的形式出現:點,線段和三角形。頂點被轉換,點燃(lit),而元素被翻轉成viewing volume,從而為第二階段做準備。

第二階段,光柵化。通過用二維形式所描述的點,線段和三角形產生多個幀緩衝地址和數值。產生的每一分區(fragment)用於下一個階段。

第三階段,處理每個獨立的分區,然後改變幀緩衝。其中操作包括基於當前或之前已經儲存的深度值(影響深度緩衝)幀緩衝更新,混合當前分區和已經儲存的顏色的幀緩衝更新,及mask和其他分區邏輯操作的幀緩衝更新。

數值也會從幀緩衝讀出,或者從幀緩衝的部分內容複寫到其他部分。這些轉換可能會涉及到一些解碼和編碼。

這個順序只是作為描述GL的一個工具,並不是實現GL的一個強制限制式規則。我們只是提供一種組織GL多樣操作的一種方式而已。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.