internalformat
internalformat指的是函数glTexImage2D的一个参数,它指定的是纹理数据最终存储在GPU显存中所采用的格式。
-
internalformat的作用本质:- 格式转换:驱动程序根据你提供的
internalformat,决定将这些原始数据转换(如果需要)并存储到 GPU 显存中的具体格式。 - 显存优化: 指定 GPU 显存中应使用什么样的格式和精度来存储纹理。这直接影响:
- 内存占用: 比如
GL_RGB8(24位/像素) 比GL_RGBA32F(128位/像素) 占用显存少得多。 - 存取速度: GPU 访问与其硬件原生格式更匹配的格式通常更快。
- 渲染精度与能力:
GL_R32F允许存储高精度浮点数(适合HDR、深度等),GL_RGBA16UI允许存储无符号整数(适合做索引或原子计数)。 - 压缩:
GL_COMPRESSED_RGBA等格式指示驱动程序应尝试(或在特定情况下必须)使用压缩算法存储在显存中,大幅节省显存带宽和空间。
- 内存占用: 比如
- 功能契约: 它定义了着色器读取纹理时会得到什么样的数据。例如:
- 指定
GL_DEPTH_COMPONENT24,着色器通过sampler2DShadow或读取r分量就能得到深度值。 - 指定
GL_R32UI,着色器通过usampler2D就能读取到32位无符号整数。 - 指定
GL_RGBA16F,着色器通过sampler2D就能读取到半精度浮点RGBA值。 - 指定
GL_SRGB8,当被着色器采样时,GPU 会自动将其转换回线性空间进行计算(遵循sRGB标准)。
- 指定
- 格式转换:驱动程序根据你提供的
格式列表
来自glTexImage2D - OpenGL 4 Reference Pages 的表一、表二、表三
基础内部格式 Base Internal Formats
| 基础内部格式 | RGBA、深度、模板值 | 内部组成分量 |
|---|---|---|
GL_DEPTH_COMPONENT |
Depth | D |
GL_DEPTH_STENCIL |
Depth, Stencil | D, S |
GL_RED |
Red | R |
GL_RG |
Red, Green | R, G |
GL_RGB |
Red, Green, Blue | R, G, B |
GL_RGBA |
Red, Green, Blue, Alpha | R, G, B, A |
有符号内部格式 Sized Internal Formats
| 有符号内部格式 | 基础内部格式 | 红色位 | 绿色位 | 蓝色位 | Alpha位 | 共享位 |
|---|---|---|---|---|---|---|
GL_R8 |
GL_RED |
8 | ||||
GL_R8_SNORM |
GL_RED |
s8 | ||||
GL_R16 |
GL_RED |
16 | ||||
GL_R16_SNORM |
GL_RED |
s16 | ||||
GL_RG8 |
GL_RG |
8 | 8 | |||
GL_RG8_SNORM |
GL_RG |
s8 | s8 | |||
GL_RG16 |
GL_RG |
16 | 16 | |||
GL_RG16_SNORM |
GL_RG |
s16 | s16 | |||
GL_R3_G3_B2 |
GL_RGB |
3 | 3 | 2 | ||
GL_RGB4 |
GL_RGB |
4 | 4 | 4 | ||
GL_RGB5 |
GL_RGB |
5 | 5 | 5 | ||
GL_RGB8 |
GL_RGB |
8 | 8 | 8 | ||
GL_RGB8_SNORM |
GL_RGB |
s8 | s8 | s8 | ||
GL_RGB10 |
GL_RGB |
10 | 10 | 10 | ||
GL_RGB12 |
GL_RGB |
12 | 12 | 12 | ||
GL_RGB16_SNORM |
GL_RGB |
16 | 16 | 16 | ||
GL_RGBA2 |
GL_RGB |
2 | 2 | 2 | 2 | |
GL_RGBA4 |
GL_RGB |
4 | 4 | 4 | 4 | |
GL_RGB5_A1 |
GL_RGBA |
5 | 5 | 5 | 1 | |
GL_RGBA8 |
GL_RGBA |
8 | 8 | 8 | 8 | |
GL_RGBA8_SNORM |
GL_RGBA |
s8 | s8 | s8 | s8 | |
GL_RGB10_A2 |
GL_RGBA |
10 | 10 | 10 | 2 | |
GL_RGB10_A2UI |
GL_RGBA |
ui10 | ui10 | ui10 | ui2 | |
GL_RGBA12 |
GL_RGBA |
12 | 12 | 12 | 12 | |
GL_RGBA16 |
GL_RGBA |
16 | 16 | 16 | 16 | |
GL_SRGB8 |
GL_RGB |
8 | 8 | 8 | ||
GL_SRGB8_ALPHA8 |
GL_RGBA |
8 | 8 | 8 | 8 | |
GL_R16F |
GL_RED |
f16 | ||||
GL_RG16F |
GL_RG |
f16 | f16 | |||
GL_RGB16F |
GL_RGB |
f16 | f16 | f16 | ||
GL_RGBA16F |
GL_RGBA |
f16 | f16 | f16 | f16 | |
GL_R32F |
GL_RED |
f32 | ||||
GL_RG32F |
GL_RG |
f32 | f32 | |||
GL_RGB32F |
GL_RGB |
f32 | f32 | f32 | ||
GL_RGBA32F |
GL_RGBA |
f32 | f32 | f32 | f32 | |
GL_R11F_G11F_B10F |
GL_RGB |
f11 | f11 | f10 | ||
GL_RGB9_E5 |
GL_RGB |
9 | 9 | 9 | 5 | |
GL_R8I |
GL_RED |
i8 | ||||
GL_R8UI |
GL_RED |
ui8 | ||||
GL_R16I |
GL_RED |
i16 | ||||
GL_R16UI |
GL_RED |
ui16 | ||||
GL_R32I |
GL_RED |
i32 | ||||
GL_R32UI |
GL_RED |
ui32 | ||||
GL_RG8I |
GL_RG |
i8 | i8 | |||
GL_RG8UI |
GL_RG |
ui8 | ui8 | |||
GL_RG16I |
GL_RG |
i16 | i16 | |||
GL_RG16UI |
GL_RG |
ui16 | ui16 | |||
GL_RG32I |
GL_RG |
i32 | i32 | |||
GL_RG32UI |
GL_RG |
ui32 | ui32 | |||
GL_RGB8I |
GL_RGB |
i8 | i8 | i8 | ||
GL_RGB8UI |
GL_RGB |
ui8 | ui8 | ui8 | ||
GL_RGB16I |
GL_RGB |
i16 | i16 | i16 | ||
GL_RGB16UI |
GL_RGB |
ui16 | ui16 | ui16 | ||
GL_RGB32I |
GL_RGB |
i32 | i32 | i32 | ||
GL_RGB32UI |
GL_RGB |
ui32 | ui32 | ui32 | ||
GL_RGBA8I |
GL_RGBA |
i8 | i8 | i8 | i8 | |
GL_RGBA8UI |
GL_RGBA |
ui8 | ui8 | ui8 | ui8 | |
GL_RGBA16I |
GL_RGBA |
i16 | i16 | i16 | i16 | |
GL_RGBA16UI |
GL_RGBA |
ui16 | ui16 | ui16 | ui16 | |
GL_RGBA32I |
GL_RGBA |
i32 | i32 | i32 | i32 | |
GL_RGBA32UI |
GL_RGBA |
ui32 | ui32 | ui32 | ui32 |
压缩内部格式 Compressed Internal Formats
| 压缩内部格式 | 基础内部格式 | 类型 |
|---|---|---|
GL_COMPRESSED_RED |
GL_RED |
Generic |
GL_COMPRESSED_RG |
GL_RG |
Generic |
GL_COMPRESSED_RGB |
GL_RGB |
Generic |
GL_COMPRESSED_RGBA |
GL_RGBA |
Generic |
GL_COMPRESSED_SRGB |
GL_RGB |
Generic |
GL_COMPRESSED_SRGB_ALPHA |
GL_RGBA |
Generic |
GL_COMPRESSED_RED_RGTC1 |
GL_RED |
Specific |
GL_COMPRESSED_SIGNED_RED_RGTC1 |
GL_RED |
Specific |
GL_COMPRESSED_RG_RGTC2 |
GL_RG |
Specific |
GL_COMPRESSED_SIGNED_RG_RGTC2 |
GL_RG |
Specific |
GL_COMPRESSED_RGBA_BPTC_UNORM |
GL_RGBA |
Specific |
GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM |
GL_RGBA |
Specific |
GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT |
GL_RGB |
Specific |
GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT |
GL_RGB |
Specific |