glTexSubImage2D 函式

glTexSubImage2D 函式會指定現有一維紋理影像的一部分。 您無法使用 glTexSubImage2D 來定義新的紋理。

語法

void WINAPI glTexSubImage2D(
         GLenum  target,
         GLint   level,
         GLint   xoffset,
         GLint   yoffset,
         GLsizei width,
         GLsizei height,
         GLenum  format,
         GLenum  type,
   const GLvoid  *pixels
);

參數

目標

目標紋理。 必須是GL_TEXTURE_2D。

level

詳細資料層級。 層級 0 是基底映射。 Level n 是第 n mipmap 縮減影像。

xoffset

紋理陣列中 X 方向的紋素位移

yoffset

紋理陣列中 Y 方向的紋素位移

寬度

紋理子影像的寬度。

height (高度)

紋理子影像的高度。

format

圖元資料的格式。 它可以假設下列其中一個符號值。

意義
GL_COLOR_INDEX
每個元素都是單一值,也就是色彩索引。 它會轉換成固定點格式(在二進位點右邊有未指定的 0 位數目)、根據GL_INDEX_SHIFT的值和符號而向左或向右移位,並新增至GL_INDEX_OFFSET(請參閱 glPixelTransfer )。 產生的索引會使用GL_PIXEL_MAP_I_TO_R、GL_PIXEL_MAP_I_TO_G、GL_PIXEL_MAP_I_TO_B和GL_PIXEL_MAP_I_TO_A資料表轉換成一組色彩元件,並夾在範圍 [0,1]。
GL_RED
每個元素都是單一紅色元件。 它會藉由附加 0.0 表示綠色和藍色,以及 1.0 表示 Alpha,轉換成浮點格式,並組合成 RGBA 元素。 然後,每個元件都會乘以帶正負號的縮放比例GL_c_SCALE、新增至帶正負號偏差GL_c_BIAS,並夾在範圍 [0,1] (請參閱 glPixelTransfer )。
GL_GREEN
每個元素都是單一綠色元件。 它會藉由附加 0.0 表示紅色和藍色,以及 1.0 表示 Alpha,轉換成浮點格式,並組合成 RGBA 元素。 然後,每個元件都會乘以帶正負號的縮放比例GL_c_SCALE、新增至帶正負號偏差GL_c_BIAS,並夾在範圍 [0,1] (請參閱 glPixelTransfer )。
GL_BLUE
每個元素都是單一藍色元件。 它會藉由附加 0.0 表示紅色和綠色,以及 1.0 表示 Alpha,轉換成浮點格式,並組合成 RGBA 元素。 然後,每個元件都會乘以帶正負號的縮放比例GL_c_SCALE、新增至帶正負號偏差GL_c_BIAS,並夾在範圍 [0,1] (請參閱 glPixelTransfer )。
GL_ALPHA
每個元素都是單一 Alpha 元件。 它會藉由附加 0.0 表示紅色、綠色和藍色,轉換為浮點格式,並組合成 RGBA 元素。 然後,每個元件都會乘以帶正負號的縮放比例GL_c_SCALE、新增至帶正負號偏差GL_c_BIAS,並夾在範圍 [0,1] (請參閱 glPixelTransfer )。
GL_RGB
每個元素都是 RGB 三倍。 它會藉由附加 1.0 表示 Alpha,轉換成浮點格式,並組合成 RGBA 元素。 然後,每個元件都會乘以帶正負號的縮放比例GL_c_SCALE、新增至帶正負號偏差GL_c_BIAS,並夾在範圍 [0,1] (請參閱 glPixelTransfer )。
GL_RGBA
每個元素都是完整的 RGBA 元素。 它會轉換成浮點。 然後,每個元件都會乘以帶正負號的縮放比例GL_c_SCALE、新增至帶正負號偏差GL_c_BIAS,並夾在範圍 [0,1] (請參閱 glPixelTransfer )。
GL_LUMINANCE
每個元素都是單一亮度值。 它會轉換成浮點格式,然後藉由複寫紅色、綠色和藍色的亮度值三次,然後組合成 RGBA 元素,並附加 1.0 表示 Alpha。 然後,每個元件都會乘以帶正負號的縮放比例GL_c_SCALE、新增至帶正負號偏差GL_c_BIAS,並夾在範圍 [0,1] (請參閱 glPixelTransfer )。
GL_LUMINANCE_ALPHA
每個元素都是亮度/Alpha 配對。 它會轉換成浮點格式,然後藉由複寫紅色、綠色和藍色的亮度值三次,組合成 RGBA 元素。 然後,每個元件都會乘以帶正負號的縮放比例GL_c_SCALE、新增至帶正負號偏差GL_c_BIAS,並夾在範圍 [0,1] (請參閱 glPixelTransfer )。

type

圖元資料的資料類型。 接受下列符號值:GL_UNSIGNED_BYTE、GL_BYTE、GL_BITMAP、GL_UNSIGNED_SHORT、GL_SHORT、GL_UNSIGNED_INT、GL_INT和GL_FLOAT。

圖元

記憶體中影像資料的指標。

傳回值

此函式不會傳回值。

錯誤碼

glGetError 函式可以擷 取下列錯誤碼。

名稱 意義
GL_INVALID_ENUM
目標 未GL_TEXTURE_2D。
GL_INVALID_ENUM
format 不是接受的常數。
GL_INVALID_ENUM
type 不是接受的常數。
GL_INVALID_ENUM
類型 為 GL_BITMAP,且 格式 未GL_COLOR_INDEX。
GL_INVALID_VALUE
level 小於零或大於 log2 max ,其中 max 是傳回的值 GL_MAX_TEXTURE_SIZE。
GL_INVALID_VALUE
xoffset 小於 - b ;或 xoffset 寬度 大於 w - b ;或 yoffset + 小於 - b ;或 yoffset + 高度 大於 h - b ,其中 w 是GL_TEXTURE_WIDTH,h 是GL_TEXTURE_HEIGHT,而 b 是修改紋理影像GL_TEXTURE_BORDER的寬度。
請注意, w h 包含框線寬度的兩倍。
GL_INVALID_VALUE
width 小於 b ,其中 b 是紋理陣列的框線寬度。
GL_INVALID_VALUE
框線 不是零或 1。
GL_INVALID_OPERATION
紋理陣列不是由先前 的 glTexImage2D 作業所定義。
GL_INVALID_OPERATION
在 glBegin 呼叫 與 glEnd 的對應呼叫之間呼叫 函式。

備註

使用 glEnable 和 glDisable 搭配引數GL_TEXTURE_2D啟用 基本類型的二維文字。 在紋理期間,指定紋理影像的一部分會對應至每個啟用的基本類型。 您可以使用 glTexSubImage2D 函式來指定現有二維紋理影像的連續子影像以進行紋理製作。

圖元所 參考的材質會以 xoffset 和 xoffset + ( 寬度 1) 的 x 索引 取代 現有紋理陣列 的區域,以及 yoffset + (高度 1) 內含的 y 索引和 yoffset + ( 高度 1) 的 y 索引 這個區域不能包含原始指定之紋理陣列範圍以外的任何材質。

指定寬度 為零的子影像 沒有任何作用,而且不會產生錯誤。

著色器在色彩索引模式中沒有作用。

一般而言,紋理影像可以用與 glDrawPixels 命令中 圖元相同的資料格式來表示,但無法使用GL_STENCIL_INDEX和GL_DEPTH_COMPONENT。 glPixelStore glPixelTransfer 模式會以影響 glDrawPixels 的方式 影響紋理影像。

下列函式會擷取 glTexSubImage2D 的相關資訊

glGetTexImage

glIsEnabled 搭配引數GL_TEXTURE_2D

需求

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

另請參閱

glCopyTexImage1D

glCopyTexImage2D

glCopyTexSubImage1D

glCopyTexSubImage2D

glDrawPixels

glEnable

glFog

glGetTexImage

glIsEnabled

glPixelStore

glPixelTransfer

glTexEnv

glTexGen

glTexImage1D

glTexImage2D

glTexSubImage1D

glTexImage2D

glTexParameter