纹理参数 Texture Parameters
纹理参数用于控制 当指定或更改纹理对象的纹理图像,以及将其应用于片段 时的行为。每个参数都可通过以下命令进行设置:
void glTexParameter{if}( enum target, enum pname, T param );
void glTexParameter{if}v( enum target, enum pname, const T *params );
void glTexParameterI{i ui}v( enum target, enum pname, const T *params );
void glTextureParameter{if}( uint texture, enum pname, T param );
void glTextureParameter{if}v( uint texture, enum pname, const T *params );
void glTextureParameterI{i ui}v( uint texture, enum pname, const T *params );
对于TexParameter*
命令,纹理对象是指绑定到target
的对象。
对于TextureParameter*
命令,texture
是纹理对象的名称。
target
或texture
的有效目标必须是TEXTURE_1D
、TEXTURE_2D
、TEXTURE_3D
、TEXTURE_1D_ARRAY
、TEXTURE_2D_ARRAY
、TEXTURE_RECTANGLE
、TEXTURE_CUBE_MAP
、TEXTURE_CUBE_MAP_ARRAY
、TEXTURE_2D_MULTISAMPLE
或 TEXTURE_2D_MULTISAMPLE_ARRAY
。
pname
是一个符号常量,表示要设置的参数;可能的常量及其对应的参数在Table 8.17
中进行了总结。在命令的标量形式中,param
是要设置单值参数的一个值;而在向量形式中,params
是一个参数数组,其类型取决于被设置的参数。
数据转换按照第2.2.1节中指定的方式进行,但有以下例外:
- 如果使用
TexParameterIiv
或TexParameterIuiv
为TEXTURE_BORDER_COLOR
指定值,则它们保持不变,并以整数内部数据类型存储。如果使用TexParameteriv
指定,则会使用公式2.2将它们转换为浮点数。否则,这些值保持不变并作为浮点数存储。 - 如果
pname
是TEXTURE_SWIZZLE_RGBA
,则params
是一个包含四个枚举值的数组,分别同时设置TEXTURE_SWIZZLE_R
、TEXTURE_SWIZZLE_G
、TEXTURE_SWIZZLE_B
和TEXTURE_SWIZZLE_A
参数。
在第8章剩余部分中,用lodmin
、lodmax
、levelbase
和levelmax
分别表示纹理参数TEXTURE_MIN_LOD
、TEXTURE_MAX_LOD
、TEXTURE_BASE_LEVEL
和TEXTURE_MAX_LEVEL
的值。如果纹理是通过TextureView
创建的,则TEXTURE_BASE_LEVEL
和TEXTURE_MAX_LEVEL
参数是相对于视图而非原始数据存储区进行解释的。
立方体贴图纹理的纹理参数适用于整个立方体贴图;六个独立的二维纹理图像使用的是立方体贴图本身的纹理参数。
Name | Type | Legal Values |
---|---|---|
DEPTH_STENCIL_TEXTURE_MODE | enum | DEPTH_COMPONENT, STENCIL_INDEX |
TEXTURE_BASE_LEVEL | int | any non-negative integer |
TEXTURE_BORDER_COLOR | 4 floats, ints, or uints | any 4 values |
TEXTURE_COMPARE_MODE | enum | NONE, COMPARE_REF_TO_TEXTURE |
TEXTURE_COMPARE_FUNC | enum | LEQUAL, GEQUAL, LESS, GREATER, EQUAL, NOTEQUAL, ALWAYS, NEVER |
TEXTURE_LOD_BIAS | float | any value |
TEXTURE_MAG_FILTER | enum | NEAREST, LINEAR |
TEXTURE_MAX_ANISOTROPY | float | greater or equal to 1.0 |
TEXTURE_MAX_LEVEL | int | any non-negative integer |
TEXTURE_MAX_LOD | float | any value |
TEXTURE_MIN_FILTER | enum | NEAREST, LINEAR, NEAREST_MIPMAP_NEAREST, NEAREST_MIPMAP_LINEAR, LINEAR_MIPMAP_NEAREST, LINEAR_MIPMAP_LINEAR |
TEXTURE_MIN_LOD | float | any value |
TEXTURE_SWIZZLE_R | enum | RED, GREEN, BLUE, ALPHA, ZERO, ONE |
TEXTURE_SWIZZLE_G | enum | RED, GREEN, BLUE, ALPHA, ZERO, ONE |
TEXTURE_SWIZZLE_B | enum | RED, GREEN, BLUE, ALPHA, ZERO, ONE |
TEXTURE_SWIZZLE_A | enum | RED, GREEN, BLUE, ALPHA, ZERO, ONE |
TEXTURE_SWIZZLE_RGBA | 4 enums | RED, GREEN, BLUE, ALPHA, ZERO, ONE |
TEXTURE_WRAP_S | enum | CLAMP_TO_EDGE, REPEAT,CLAMP_TO_BORDER, MIRRORED_REPEAT, MIRROR_CLAMP_TO_EDGE |
TEXTURE_WRAP_T | enum | CLAMP_TO_EDGE, REPEAT, CLAMP_TO_BORDER, MIRRORED_REPEAT, MIRROR_CLAMP_TO_EDGE |
TEXTURE_WRAP_R | enum | CLAMP_TO_EDGE, REPEAT, CLAMP_TO_BORDER, MIRRORED_REPEAT, MIRROR_CLAMP_TO_EDGE |
Table 8.17: Texture parameters and their values