glPixelTransferf 函式

glPixelTransferfglPixelTransferi函式會設定圖元傳輸模式。

語法

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作業的圖元傳輸模式, glCopyTexImage1DglCopyTexImage2DglCopyTexSubImage1DglCopyTexSubImage2DglDrawPixels、glReadPixelsglTexImage1D、glTexImage2DglTexSubImage1DglTexSubImage2D命令。 圖元傳輸模式所指定的演算法會在從 framebuffer (glReadPixelsglCopyPixels) 或從用戶端記憶體解除封裝之後,以圖元傳輸模式在圖元上運作, (glDrawPixelsglTexImage1D 和 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。 參數會先轉換成浮點,再指派給實值參數。

如果glDrawPixelsglReadPixels、glCopyPixelsglTexImage1DglTexImage2D命令放在顯示清單中 (請參閱glNewListglCallList) ,則執行顯示清單時,圖元傳輸模式設定會生效。 當命令編譯到顯示清單中時,它們可能與設定不同。

下列函式會擷取 與 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 [僅限傳統型應用程式]
標頭
Gl.h
程式庫
Opengl32.lib
DLL
Opengl32.dll

另請參閱

glBegin

glCallList

glCopyPixels

glDrawPixels

glEnd

glNewList

glPixelMap

glPixelStore

glPixelZoom

glReadPixels

glTexImage1D

glTexImage2D