glPixelTransferi 函式

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

語法

void WINAPI glPixelTransferi(
   GLenum pname,
   GLint  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、glCopyTexImage2DglCopyTexSubImage1DglCopyTexSubImage2DglDrawPixels、glReadPixelsglTexImage1D、glTexImage2D、glTexSubImage1DglTexSubImage2D命令。 圖元傳輸模式所指定的演算法會在從 framebuffer 讀取 (glReadPixels 和 glCopyPixels) 或從用戶端記憶體解壓縮 (glDrawPixelsglTexImage1D 和 glTexImage2D) 之後,這些演算法會在圖元上運作。 不論產生圖元作業的命令為何,圖元傳輸作業的順序相同,都會以相同方式進行。 圖元儲存模式 (glPixelStore) 控制從用戶端記憶體讀取的圖元解除封裝,以及寫入用戶端記憶體的圖元封裝。

圖元傳輸工作處理四種基本圖元類型: 色彩色彩索引深度樣板。色彩圖元是由四個浮點值所組成,具有未指定的 mantissa 和指數大小,因此 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 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 函式可用來設定任何圖元傳輸參數。 如果參數類型為 Boolean,0.0 表示 false,而任何其他值都表示 true。 如果 pname 是整數參數, param 會四捨五入為最接近的整數。

同樣地, glPixelTransferi 也可以用來設定任何圖元傳輸參數。 如果 param 為 0 且為 true,布林參數會設定為 false。 參數會先轉換成浮點,再指派給實值參數。

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

下列函式會擷 取與 glPixelTransfer相關的資訊:

具有引數的glGet GL_MAP_COLOR

glGet with argument GL_MAP_STENCIL

glGet with argument GL_INDEX_SHIFT

具有引數的glGet GL_INDEX_OFFSET

glGet with argument GL_RED_SCALE

glGet with argument GL_RED_BIAS

glGet with argument GL_GREEN_SCALE

glGet with argument GL_GREEN_BIAS

glGet with argument GL_BLUE_SCALE

具有引數的glGet GL_BLUE_BIAS

glGet with argument GL_ALPHA_SCALE

glGet with argument GL_ALPHA_BIAS

glGet with argument GL_DEPTH_SCALE

glGet with argument GL_DEPTH_BIAS

規格需求

需求
最低支援的用戶端
Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器
Windows 2000 Server [僅限桌面應用程式]
標頭
Gl.h
程式庫
Opengl32.lib
DLL
Opengl32.dll

另請參閱

glBegin

glCallList

glCopyPixels

glDrawPixels

glEnd

glNewList

glPixelMap

glPixelStore

glPixelZoom

glReadPixels

glTexImage1D

glTexImage2D