1Name 2 3 SGIX_texture_mipmap_anisotropic 4 5Name Strings 6 7 GL_SGIX_texture_mipmap_anisotropic 8 9Version 10 11 $Date: 1998/10/21 00:42:24 $ $Revision: 1.4 $ 12 13Number 14 15 XXX 16 17Dependencies 18 19 EXT_texture3D affects the definition of this extension 20 SGIX_texture_lod_bias affects the definition of this extension 21 22Overview 23 24 This extension improves the filtering quality over the standard mipmap 25 algorithm. The limitation of the standard mipmap algorithm is that a 26 pixel's footprint in texture space is approximated by a symmetrically 27 filtered sample. The approximation becomes worse as the pixel footprint 28 becomes more anisotropic. The poor approximation usually results in 29 the mapped image appearing excessively blurry. This extension replaces 30 a single symmetric sample with the average of distributed smaller samples, 31 which better approximates the pixel footprint shape. This anisotropic 32 filtering method uses the existing mipmap and clipmap structures. 33 34Issues 35 36 * Should this extension handle all anisotropic filtering methods? 37 -- No. Since all other known anisotropic filter methods (summed-area, 38 ripmap, non-mip supersampling) use different data structures, 39 the control mechanisms will be different and therefore should 40 be separate extensions. 41 42New Procedures and Functions 43 44 None 45 46New Tokens 47 48 Accepted by the <pname> parameter of TexParameteri, TexParameterf, 49 TexParameteriv, TexParameterfv, GetTexParameteriv, and GetTexParameterfv: 50 51 TEXTURE_MIPMAP_ANISOTROPY_SGIX 0x832E 52 53 Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, 54 GetFloatv, and GetDoublev: 55 56 MAX_MIPMAP_ANISOTROPY_SGIX 0x832F 57 58 59Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation) 60 61 None 62 63Additions to Chapter 3 of the 1.1 Specification (Rasterization) 64 65 GL Specification Table 3.9 is updated as follows: 66 67 Name Type Legal Values 68 ---- ---- ------------ 69 TEXTURE_WRAP_S integer CLAMP, REPEAT 70 TEXTURE_WRAP_T integer CLAMP, REPEAT 71 TEXTURE_WRAP_R_EXT integer CLAMP, REPEAT 72 TEXTURE_MIN_FILTER integer NEAREST, LINEAR, 73 NEAREST_MIPMAP_NEAREST, 74 NEAREST_MIPMAP_LINEAR, 75 LINEAR_MIPMAP_NEAREST, 76 LINEAR_MIPMAP_LINEAR, 77 FILTER4_SGIS, 78 LINEAR_CLIPMAP_LINEAR_SGIX, 79 TEXTURE_MAG_FILTER integer NEAREST, LINEAR, 80 FILTER4_SGIS, 81 LINEAR_DETAIL_SGIS, 82 LINEAR_DETAIL_ALPHA_SGIS, 83 LINEAR_DETAIL_COLOR_SGIS, 84 LINEAR_SHARPEN_SGIS, 85 LINEAR_SHARPEN_ALPHA_SGIS, 86 LINEAR_SHARPEN_COLOR_SGIS 87 TEXTURE_BORDER_COLOR 4 floats any 4 values in [0,1] 88 DETAIL_TEXTURE_LEVEL_SGIS integer any non-negative integer 89 DETAIL_TEXTURE_MODE_SGIS integer ADD, MODULATE 90 TEXTURE_MIN_LOD_SGIS float any value 91 TEXTURE_MAX_LOD_SGIS float any value 92 TEXTURE_BASE_LEVEL_SGIS integer any non-negative integer 93 TEXTURE_MAX_LEVEL_SGIS integer any non-negative integer 94 GENERATE_MIPMAP_SGIS boolean TRUE or FALSE 95 TEXTURE_CLIPMAP_FRAME_SGIX float any non-negative value 96 TEXTURE_CLIPMAP_CENTER_SGIX 2 integers any 2 non-negative integers 97 TEXTURE_CLIPMAP_OFFSET_SGIX 2 integers any 2 non-negative integers 98 TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 3 integers any 3 non-negative integer 99 TEXTURE_LOD_BIAS_S_SGIX float any value 100 TEXTURE_LOD_BIAS_T_SGIX float any value 101 TEXTURE_LOD_BIAS_R_SGIX float any value 102 TEXTURE_MIPMAP_ANISOTROPY int any value >= 1 103 104 Table 3.9: Texture parameters and their values. 105 106 Texture Minification 107 ------------------------ 108 109 This extensions substantially changes Section 3.8.1. Previously 110 a single scale factor P was determined based on the pixel's projection 111 into texture space. Now two scale factors, Px and Py, are computed. 112 113 Px = sqrt(dudx^2 + dvdx^2) 114 Py = sqrt(dudy^2 + dvdy^2) 115 116 Pmax = max(Px,Py) 117 Pmin = min(Px,Py) 118 119 N = min(ceil(Pmax/Pmin),TEXTURE_MIPMAP_ANISOTROPY_SGIX); 120 Lamda = log2(Pmax/N) 121 122 123 It is acceptable for implementation to round 'N' up to the nearest supported 124 sampling rate. For example an implementation may only support power-of-two 125 sampling rates. 126 127 It is also acceptable for an implementation to approximate the ideal 128 functions Px and Py with functions Fx and Fy subject to the following 129 conditions: 130 131 1. Fx is continuous and monotonically increasing in |du/dx| and |dv/dx|. 132 Fy is continuous and monotonically increasing in |du/dy| and |dv/dy|. 133 134 2. max(|du/dx|,|dv/dx|} <= Fx <= |du/dx| + |dv/dx|. 135 max(|du/dy|,|dv/dy|} <= Fy <= |du/dy| + |dv/dy|. 136 137 Instead of a single sample, Tau, at (u,v,Lamda), 'N' locations in the mipmap 138 at LOD Lamda, are sampled within the texture footprint of the pixel. 139 140 i=N 141 --- 142 Tau = 1/N \ Tau(u(x - 1/2 + i/(N+1), y), v(x - 1/2 + i/(N+1), y)), Px > Py 143 / 144 --- 145 i=1 146 147 i=N 148 --- 149 Tau = 1/N \ Tau(u(x, y - 1/2 + i/(N+1)), v(x, y - 1/2 + i/(N+1))), Py >= Px 150 / 151 --- 152 i=1 153 154 155 It is acceptable to approximate the u and v functions with equally spaced 156 samples in texture space at LOD Lamda: 157 158 i=N 159 --- 160 Tau = 1/N \ Tau(u(x,y)+dudx(i/(N+1)-1/2), v(x,y)+dvdx(i/(N+1)-1/2)), Px > Py 161 / 162 --- 163 i=1 164 165 i=N 166 --- 167 Tau = 1/N \ Tau(u(x,y)+dudy(i/(N+1)-1/2), v(x,y)+dvdy(i/(N+1)-1/2)), Py >= Px 168 / 169 --- 170 i=1 171 172 173 174Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations 175and the Frame Buffer) 176 177 None 178 179Additions to Chapter 5 of the 1.1 Specification (Special Functions) 180 181 None 182 183Additions to Chapter 6 of the 1.1 Specification (State and State Requests) 184 185 None 186 187Additions to the GLX Specification 188 189 None 190 191Dependencies on EXT_texture3D 192 193 If EXT_texture3D is supported, the functions Px, Py, and Tau are modified 194 to include dwdx, dwdy, and w. 195 196 197Dependencies on SGIX_texture_lod_bias 198 199 If SGIX_texture_lod_bias is supported, dudx, dvdx, dwdx, dudy, dvdy, dwdy 200 are replaced with dlodudx, dlodvdx, dlodwdx, dlodudy, dlodvdy, dlodwdy in 201 the Px and Py functions. 202 203Errors 204 205 None 206 207New State 208 209 Initial 210 Get Value Get Command Type Value Attrib 211 --------- ----------- ---- ------- ------ 212 TEXTURE_MIPMAP_ANISOTROPY_SGIX GetTexParameteriv Z1* 1 texture 213 214New Implementation Dependent State 215 216 Minimum 217 Get Value Get Command Type Value 218 --------- ----------- ---- ------- 219 MAX_MIPMAP_ANISOTROPY_SGIX GetIntegerv Z1* 2 220