glPixelTransferi 函式
glPixelTransferf和glPixelTransferi函式會設定圖元傳輸模式。
語法
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、glCopyTexImage2D、glCopyTexSubImage1D、glCopyTexSubImage2D、glDrawPixels、glReadPixels、glTexImage1D、glTexImage2D、glTexSubImage1D和glTexSubImage2D命令。 圖元傳輸模式所指定的演算法會在從 framebuffer 讀取 (glReadPixels 和 glCopyPixels) 或從用戶端記憶體解壓縮 (glDrawPixels、glTexImage1D 和 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、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 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 [僅限桌面應用程式] |
標頭 |
|
程式庫 |
|
DLL |
|