glPixelTransferf 函式
glPixelTransferf和glPixelTransferi函式會設定圖元傳輸模式。
語法
void WINAPI glPixelTransferf(
GLenum pname,
GLfloat param
);
參數
-
pname
-
要設定之圖元傳輸參數的符號名稱。 下表提供 每個以 glPixelTransfer設定之圖元傳輸參數的有效值類型、初始值和範圍。
Pname 類型 初始值 有效範圍 GL_MAP_COLOR Boolean false true/false GL_MAP_STENCIL Boolean false true/false GL_INDEX_SHIFT 整數 0 (8,8) GL_INDEX_OFFSET 整數 0 (8,8) GL_RED_SCALE 整數 1.0 (8,8) GL_GREEN_SCALE FLOAT 1.0 (8,8) GL_BLUE_SCALE FLOAT 1.0 (8,8) GL_ALPHA_SCALE FLOAT 1.0 (8,8) GL_DEPTH_SCALE FLOAT 1.0 (8,8) GL_RED_BIAS FLOAT 0.0 (8,8) GL_GREEN_BIAS FLOAT 0.0 (8,8) GL_BLUE_BIAS FLOAT 0.0 (8,8) GL_ALPHA_BIAS FLOAT 0.0 (8,8) GL_DEPTH_BIAS FLOAT 0.0 (8,8) -
param
-
pname設定為 的值。
傳回值
此函式不會傳回值。
備註
glPixelTransfer 函式會設定會影響後續glCopyPixels作業的圖元傳輸模式, glCopyTexImage1D、glCopyTexImage2D、glCopyTexSubImage1D、glCopyTexSubImage2D、glDrawPixels、glReadPixels、glTexImage1D、glTexImage2D、glTexSubImage1D和glTexSubImage2D命令。 圖元傳輸模式所指定的演算法會在從 framebuffer (glReadPixels和glCopyPixels) 或從用戶端記憶體解除封裝之後,以圖元傳輸模式在圖元上運作, (glDrawPixels、glTexImage1D 和 glTexImage2D) 。 不論產生圖元作業的命令為何,圖元傳輸作業的順序都相同,而且會以相同方式發生。 圖元儲存模式 (glPixelStore) 控制從用戶端記憶體讀取的圖元解壓縮,以及將圖元封裝回用戶端記憶體。
圖元傳輸工作處理四種基本圖元類型: 色彩、 色彩索引、 深度和 樣板。色彩圖元是由四個浮點值所組成,具有未指定的尾數和指數大小,縮放比例使 0.0 代表零強度,而 1.0 代表完整強度。 色彩索引包含單一固定點值,且二進位點右邊沒有指定的精確度。 深度圖元是由單一浮點值所組成,具有未指定的 Mantissa 和指數大小,因此 0.0 代表最小深度緩衝區值,而 1.0 代表最大深度緩衝區值。 最後,樣板圖元是由單一固定點值所組成,且二進位點右邊沒有指定的精確度。
在四種基本圖元類型上執行的圖元傳輸作業如下所示:
圖元類型 | 圖元傳輸作業 |
---|---|
色彩 | 四個色彩元件中的每一個都會乘以縮放比例,然後新增至偏差因數。 也就是說,紅色元件會乘以GL_RED_SCALE,然後新增至GL_RED_BIAS;綠色元件會乘以GL_GREEN_SCALE,然後新增至GL_GREEN_BIAS;藍色元件會乘以GL_BLUE_SCALE,然後新增至GL_BLUE_BIAS;和 Alpha 元件會乘以GL_ALPHA_SCALE,然後新增至GL_ALPHA_BIAS。 在縮放和偏差這四個色彩元件之後,每個元件都會固定在範圍 [0,1]。 所有色階和偏差值都會使用 glPixelTransfer來指定。 如果GL_MAP_COLOR為 true,則每個色彩元件都會依對應的色彩對色彩地圖的大小來縮放,然後由縮放元件編制索引的對應內容取代。 也就是說,紅色元件會依GL_PIXEL_MAP_R_TO_R_SIZE調整,然後由本身編制索引GL_PIXEL_MAP_R_TO_R的內容取代。 綠色元件會依GL_PIXEL_MAP_G_TO_G_SIZE縮放,然後由本身編制索引GL_PIXEL_MAP_G_TO_G的內容取代。 藍色元件會依GL_PIXEL_MAP_B_TO_B_SIZE調整,然後由本身編制索引GL_PIXEL_MAP_B_TO_B的內容取代。 Alpha 元件會依GL_PIXEL_MAP_A_TO_A_SIZE調整,然後由本身編制索引GL_PIXEL_MAP_A_TO_A的內容取代。 然後,從地圖取得的所有元件都會固定到範圍 [0,1]。 GL_MAP_COLOR是以 glPixelTransfer指定。 系統會使用 glPixelMap來指定各種地圖的內容。 |
色彩索引 | 每個色彩索引都會由GL_INDEX_SHIFT位左移,以零填滿任何位超出固定點索引所攜帶分數位數的位數。 如果GL_INDEX_SHIFT為負數,則移位會再次向右填滿零。 接著會將GL_INDEX_OFFSET新增至索引。 GL_INDEX_SHIFT和GL_INDEX_OFFSET是使用 glPixelTransfer來指定。 此時,作業會根據結果圖元的必要格式而有所不同。 如果要將產生的圖元寫入色彩索引緩衝區,或以GL_COLOR_INDEX格式讀回用戶端記憶體,則圖元會繼續視為索引。 如果GL_MAP_COLOR為 true,則每個索引會以 2 ^ n 1 遮罩,其中 n 是GL_PIXEL_MAP_I_TO_I_SIZE,然後由遮罩值索引GL_PIXEL_MAP_I_TO_I的內容取代。 GL_MAP_COLOR是使用 glPixelTransfer來指定。 索引對應的內容是使用 glPixelMap來指定。 如果要將產生的圖元寫入 RGBA 色彩緩衝區,或是以GL_COLOR_INDEX以外的格式讀取回用戶端記憶體,則圖元會藉由參考四個對應GL_PIXEL_MAP_I_TO_R,GL_PIXEL_MAP_I_TO_G,將圖元從索引轉換成色彩 GL_PIXEL_MAP_I_TO_B和GL_PIXEL_MAP_I_TO_A。 取值之前,索引會以 2 n 1 遮罩,其中 n 是紅色地圖的GL_PIXEL_MAP_I_TO_R_SIZE、綠色地圖的GL_PIXEL_MAP_I_TO_G_SIZE、藍色地圖的GL_PIXEL_MAP_I_TO_B_SIZE,以及 Alpha 地圖的GL_PIXEL_MAP_I_TO_A_SIZE。 然後,從地圖取得的所有元件都會固定到範圍 [0,1]。 四個地圖的內容是使用 glPixelMap來指定。 |
深度 | 每個深度值會乘以GL_DEPTH_SCALE、新增至GL_DEPTH_BIAS,然後固定至範圍 [0,1]。 |
樣板 | 每個索引會隨著色彩索引一樣GL_INDEX_SHIFT位移位,然後新增至GL_INDEX_OFFSET。 如果GL_MAP_STENCIL為 true,則每個索引會以 2n 1 遮罩,其中 n 是GL_PIXEL_MAP_S_TO_S_SIZE,然後由遮罩值編制索引GL_PIXEL_MAP_S_TO_S的內容取代。 |
glPixelTransferf 函式可用來設定任何圖元傳輸參數。 如果參數類型為布林值,0.0 表示 false,而任何其他值都表示 true。 如果 pname 是整數參數, param 會四捨五入為最接近的整數。
同樣地, glPixelTransferi 也可以用來設定任何圖元傳輸參數。 如果 param 為 0,則布林值參數會設定為 false,否則為 true。 參數會先轉換成浮點,再指派給實值參數。
如果glDrawPixels、glReadPixels、glCopyPixels、glTexImage1D或glTexImage2D命令放在顯示清單中 (請參閱glNewList和glCallList) ,則執行顯示清單時,圖元傳輸模式設定會生效。 當命令編譯到顯示清單中時,它們可能與設定不同。
下列函式會擷取 與 glPixelTransfer相關的資訊:
glGet 搭配引數GL_MAP_COLOR
glGet with argument GL_MAP_STENCIL
glGet with argument GL_INDEX_SHIFT
glGet 搭配引數GL_INDEX_OFFSET
glGet 搭配引數GL_RED_SCALE
glGet with argument GL_RED_BIAS
glGet 搭配引數GL_GREEN_SCALE
glGet with argument GL_GREEN_BIAS
glGet with argument GL_BLUE_SCALE
glGet 與引數GL_BLUE_BIAS
glGet 與引數GL_ALPHA_SCALE
glGet with argument GL_ALPHA_BIAS
glGet 與引數GL_DEPTH_SCALE
glGet with argument GL_DEPTH_BIAS
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 |
Windows 2000 Server [僅限傳統型應用程式] |
標頭 |
|
程式庫 |
|
DLL |
|