WebGLRenderingContext: texImage2D() 方法
注意:此功能在 Web Workers 中可用。
WebGL API 的 WebGLRenderingContext 介面的 texImage2D() 方法指定了一個二維紋理影像。
語法
// WebGL 1:
texImage2D(target, level, internalformat, width, height, border, format, type, srcData)
texImage2D(target, level, internalformat, format, type, source)
// Additionally available in WebGL 2:
texImage2D(target, level, internalformat, width, height, border, format, type, srcData, srcOffset)
texImage2D(target, level, internalformat, width, height, border, format, type, source)
texImage2D(target, level, internalformat, width, height, border, format, type, offset)
引數
目標-
一個
GLenum,指定活動紋理的繫結點(目標)。可能的值有:gl.TEXTURE_2D:一個二維紋理。gl.TEXTURE_CUBE_MAP_POSITIVE_X:立方體貼圖紋理的正 X 面。gl.TEXTURE_CUBE_MAP_NEGATIVE_X:立方體貼圖紋理的負 X 面。gl.TEXTURE_CUBE_MAP_POSITIVE_Y:立方體貼圖紋理的正 Y 面。gl.TEXTURE_CUBE_MAP_NEGATIVE_Y:立方體貼圖紋理的負 Y 面。gl.TEXTURE_CUBE_MAP_POSITIVE_Z:立方體貼圖紋理的正 Z 面。gl.TEXTURE_CUBE_MAP_NEGATIVE_Z:立方體貼圖紋理的負 Z 面。
level-
一個
GLint,指定細節級別。級別 0 是基本影像級別,級別 n 是第 n 個 mipmap 縮減級別。 internalformat-
一個
GLenum,指定紋理載入後應如何儲存。可用值見下文。 width-
一個
GLsizei,指定紋理的寬度(以 texel 為單位)。 height-
一個
GLsizei,指定紋理的高度(以 texel 為單位)。 border-
一個
GLint,指定邊框的寬度。必須為 0。 格式(format)-
一個
GLenum,指定原始 texel 資料中的每個整數元素應如何解釋為顏色分量。在 WebGL 1 中,這必須與internalformat相同。可用值見下文。 type-
一個
GLenum,指定原始 texel 資料中每個整數元素的大小。internalformat、format和type值必須相互相容。WebGL 1 和 WebGL 2 中可能的組合(這些內部格式是*無大小限制*的,因為你無法指定每個畫素在內部佔用多少位元組)internalformat格式(format)type每個畫素的輸入位元組數 輸入畫素佈局(每通道位數) RGBRGBUNSIGNED_BYTE3 (R, G, B) = (8, 8, 8) RGBRGBUNSIGNED_SHORT_5_6_52 (R, G, B) = (5, 6, 5) RGBARGBAUNSIGNED_BYTE4 (R, G, B, A) = (8, 8, 8, 8) RGBARGBAUNSIGNED_SHORT_4_4_4_42 (R, G, B, A) = (4, 4, 4, 4) RGBARGBAUNSIGNED_SHORT_5_5_5_12 (R, G, B, A) = (5, 5, 5, 1) LUMINANCE_ALPHALUMINANCE_ALPHAUNSIGNED_BYTE2 (L, A) = (8, 8) LUMINANCELUMINANCEUNSIGNED_BYTE1 (L) = (8) ALPHAALPHAUNSIGNED_BYTE1 (A) = (8) 當
OES_texture_float擴充套件啟用時,type還可以是FLOAT。當OES_texture_half_float擴充套件啟用時,type還可以是ext.HALF_FLOAT_OES(由擴充套件提供的常量)。當
EXT_sRGB擴充套件啟用時,internalformat還可以是ext.SRGB_EXT或ext.SRGB_ALPHA_EXT。在 WebGL 2 中,當將源指定為
srcData或offset時,還可使用以下組合(這些內部格式是*有大小限制*的,因為內部畫素佈局已精確指定;我們在此省略輸入佈局,因為它與上述類似)internalformat格式(format)type內部畫素佈局 可渲染顏色 可過濾紋理 R8REDUNSIGNED_BYTE(R) = (8) Y Y R8_SNORMREDBYTE(R) = (s8) Y R16FREDHALF_FLOAT,FLOAT(R) = (f16) Y R32FREDFLOAT(R) = (f32) R8UIRED_INTEGERUNSIGNED_BYTE(R) = (ui8) Y R8IRED_INTEGERBYTE(R) = (i8) Y R16UIRED_INTEGERUNSIGNED_SHORT(R) = (ui16) Y R16IRED_INTEGERSHORT(R) = (i16) Y R32UIRED_INTEGERUNSIGNED_INT(R) = (ui32) Y R32IRED_INTEGERINT(R) = (i32) Y RG8RGUNSIGNED_BYTE(R, G) = (8, 8) Y Y RG8_SNORMRGBYTE(R, G) = (s8, s8) Y RG16FRGHALF_FLOAT,FLOAT(R, G) = (f16, f16) Y RG32FRGFLOAT(R, G) = (f32, f32) RG8UIRG_INTEGERUNSIGNED_BYTE(R, G) = (ui8, ui8) Y RG8IRG_INTEGERBYTE(R, G) = (i8, i8) Y RG16UIRG_INTEGERUNSIGNED_SHORT(R, G) = (ui16, ui16) Y RG16IRG_INTEGERSHORT(R, G) = (i16, i16) Y RG32UIRG_INTEGERUNSIGNED_INT(R, G) = (ui32, ui32) Y RG32IRG_INTEGERINT(R, G) = (i32, i32) Y RGB8RGBUNSIGNED_BYTE(R, G, B) = (8, 8, 8) Y Y SRGB8RGBUNSIGNED_BYTE(R, G, B) = (8, 8, 8) Y RGB565RGBUNSIGNED_BYTE,UNSIGNED_SHORT_5_6_5(R, G, B) = (5, 6, 5) Y Y RGB8_SNORMRGBBYTE(R, G, B) = (s8, s8, s8) Y R11F_G11F_B10FRGBUNSIGNED_INT_10F_11F_11F_REV,HALF_FLOAT,FLOAT(R, G, B) = (f11, f11, f10) Y RGB9_E5RGBUNSIGNED_INT_5_9_9_9_REV,HALF_FLOAT,FLOAT(R, G, B) = (f9, f9, f9), 5 個共享位 Y RGB16FRGBHALF_FLOAT,FLOAT(R, G, B) = (f16, f16, f16) Y RGB32FRGBFLOAT(R, G, B) = (f32, f32, f32) RGB8UIRGB_INTEGERUNSIGNED_BYTE(R, G, B) = (ui8, ui8, ui8) Y RGB8IRGB_INTEGERBYTE(R, G, B) = (i8, i8, i8) Y RGB16UIRGB_INTEGERUNSIGNED_SHORT(R, G, B) = (ui16, ui16, ui16) Y RGB16IRGB_INTEGERSHORT(R, G, B) = (i16, i16, i16) Y RGB32UIRGB_INTEGERUNSIGNED_INT(R, G, B) = (ui32, ui32, ui32) Y RGB32IRGB_INTEGERINT(R, G, B) = (i32, i32, i32) Y RGBA8RGBAUNSIGNED_BYTE(R, G, B, A) = (8, 8, 8, 8) Y Y SRGB8_ALPHA8RGBAUNSIGNED_BYTE(R, G, B, A) = (8, 8, 8, 8) Y Y RGBA8_SNORMRGBABYTE(R, G, B, A) = (s8, s8, s8, s8) Y RGB5_A1RGBAUNSIGNED_BYTE,UNSIGNED_SHORT_5_5_5_1,UNSIGNED_INT_2_10_10_10_REV(R, G, B, A) = (5, 5, 5, 1) Y Y RGBA4RGBAUNSIGNED_BYTE,UNSIGNED_SHORT_4_4_4_4(R, G, B, A) = (4, 4, 4, 4) Y Y RGB10_A2RGBAUNSIGNED_INT_2_10_10_10_REV(R, G, B, A) = (10, 10, 10, 2) Y Y RGBA16FRGBAHALF_FLOAT,FLOAT(R, G, B, A) = (f16, f16, f16, f16) Y RGBA32FRGBAFLOAT(R, G, B, A) = (f32, f32, f32, f32) RGBA8UIRGBA_INTEGERUNSIGNED_BYTE(R, G, B, A) = (ui8, ui8, ui8, ui8) Y RGBA8IRGBA_INTEGERBYTE(R, G, B, A) = (i8, i8, i8, i8) Y RGBA10_A2UIRGBA_INTEGERUNSIGNED_INT_2_10_10_10_REV(R, G, B, A) = (ui10, ui10, ui10, ui2) Y RGBA16UIRGBA_INTEGERUNSIGNED_SHORT(R, G, B, A) = (ui16, ui16, ui16, ui16) Y RGBA16IRGBA_INTEGERSHORT(R, G, B, A) = (i16, i16, i16, i16) Y RGBA32UIRGBA_INTEGERUNSIGNED_INT(R, G, B, A) = (ui32, ui32, ui32, ui32) Y RGBA32IRGBA_INTEGERINT(R, G, B, A) = (i32, i32, i32, i32) Y 在 WebGL 2 中,當將源指定為
srcData或offset時,還可以使用以下組合,並且可以透過WEBGL_depth_texture擴充套件在 WebGL 1 中啟用它們internalformat格式(format)type內部畫素佈局 DEPTH_COMPONENT16DEPTH_COMPONENTUNSIGNED_SHORT,UNSIGNED_INT(D) = (16) DEPTH_COMPONENT24DEPTH_COMPONENTUNSIGNED_INT(D) = (24) DEPTH_COMPONENT32FDEPTH_COMPONENTFLOAT(D) = (f32) DEPTH24_STENCIL8DEPTH_STENCILUNSIGNED_INT_24_8(ext.UNSIGNED_INT_24_8_WEBGL)(D, S) = (24, 8) DEPTH32F_STENCIL8DEPTH_STENCILFLOAT_32_UNSIGNED_INT_24_8_REV(D, S) = (f32, 8) 當資料來源是 DOM 畫素源時,通常每個通道的表示都是至少 8 位的無符號整數型別。將這種表示轉換為有符號整數或位數更多的無符號整數的定義不明確。例如,在將
RGBA8轉換為RGBA16UI時,不清楚意圖是否是將值按比例放大到 16 位無符號整數的完整範圍。因此,只允許轉換為最多 8 位的無符號整數、半浮點數或浮點數。
紋理源可以透過三種方式提供:透過 srcData 和 srcOffset 從 ArrayBuffer(可能共享);從 DOM 畫素 source;或者,在 WebGL 2 中,從 gl.PIXEL_UNPACK_BUFFER 使用 offset。
srcData-
一個
TypedArray或DataView,包含壓縮紋理資料。其型別必須與type引數匹配srcData型別type值Int8ArrayBYTEUint8Array,Uint8ClampedArrayUNSIGNED_BYTEInt16ArraySHORTUint16ArrayUNSIGNED_SHORT,UNSIGNED_SHORT_5_6_5,UNSIGNED_SHORT_5_5_5_1,UNSIGNED_SHORT_4_4_4_4,HALF_FLOATInt32ArrayINTUint32ArrayUNSIGNED_INT,UNSIGNED_INT_5_9_9_9_REV,UNSIGNED_INT_2_10_10_10_REV,UNSIGNED_INT_10F_11F_11F_REV,UNSIGNED_INT_24_8Float32ArrayFLOAT當
type為FLOAT_32_UNSIGNED_INT_24_8_REV時,srcData必須為null。 srcOffset可選-
(僅限 WebGL 2)一個整數,指定
srcData開始讀取的索引。預設為0。 source-
從 DOM 畫素源讀取,它可以是以下之一:
ImageBitmapImageDataHTMLImageElementHTMLCanvasElementHTMLVideoElementOffscreenCanvasVideoFrame
在 WebGL 1 中,
width和height總是從源推斷。在 WebGL 2 中,它們也可以顯式指定。 offset-
(僅限 WebGL 2)一個
GLintptr,指定繫結到gl.PIXEL_UNPACK_BUFFER的緩衝區中的起始地址。
返回值
無(undefined)。
示例
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
規範
| 規範 |
|---|
| WebGL 規範 # 5.14.8 |
| WebGL 2.0 規範 # 3.7.6 |
瀏覽器相容性
載入中…
另見
WebGLRenderingContext.createTexture()WebGLRenderingContext.bindTexture()WebGLRenderingContext.texSubImage2D()WebGLRenderingContext.compressedTexImage2D()WebGLRenderingContext.copyTexImage2D()WebGLRenderingContext.getTexParameter()WEBGL_depth_textureOES_texture_floatOES_texture_half_floatEXT_texture_norm16EXT_sRGB