skia / external / github.com / KhronosGroup / OpenGL-Registry / refs/heads/11723-workgroup / . / extensions / SGIX / SGIX_texture_mipmap_anisotropic.txt

Name | |

SGIX_texture_mipmap_anisotropic | |

Name Strings | |

GL_SGIX_texture_mipmap_anisotropic | |

Version | |

$Date: 1998/10/21 00:42:24 $ $Revision: 1.4 $ | |

Number | |

XXX | |

Dependencies | |

EXT_texture3D affects the definition of this extension | |

SGIX_texture_lod_bias affects the definition of this extension | |

Overview | |

This extension improves the filtering quality over the standard mipmap | |

algorithm. The limitation of the standard mipmap algorithm is that a | |

pixel's footprint in texture space is approximated by a symmetrically | |

filtered sample. The approximation becomes worse as the pixel footprint | |

becomes more anisotropic. The poor approximation usually results in | |

the mapped image appearing excessively blurry. This extension replaces | |

a single symmetric sample with the average of distributed smaller samples, | |

which better approximates the pixel footprint shape. This anisotropic | |

filtering method uses the existing mipmap and clipmap structures. | |

Issues | |

* Should this extension handle all anisotropic filtering methods? | |

-- No. Since all other known anisotropic filter methods (summed-area, | |

ripmap, non-mip supersampling) use different data structures, | |

the control mechanisms will be different and therefore should | |

be separate extensions. | |

New Procedures and Functions | |

None | |

New Tokens | |

Accepted by the <pname> parameter of TexParameteri, TexParameterf, | |

TexParameteriv, TexParameterfv, GetTexParameteriv, and GetTexParameterfv: | |

TEXTURE_MIPMAP_ANISOTROPY_SGIX 0x832E | |

Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, | |

GetFloatv, and GetDoublev: | |

MAX_MIPMAP_ANISOTROPY_SGIX 0x832F | |

Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation) | |

None | |

Additions to Chapter 3 of the 1.1 Specification (Rasterization) | |

GL Specification Table 3.9 is updated as follows: | |

Name Type Legal Values | |

---- ---- ------------ | |

TEXTURE_WRAP_S integer CLAMP, REPEAT | |

TEXTURE_WRAP_T integer CLAMP, REPEAT | |

TEXTURE_WRAP_R_EXT integer CLAMP, REPEAT | |

TEXTURE_MIN_FILTER integer NEAREST, LINEAR, | |

NEAREST_MIPMAP_NEAREST, | |

NEAREST_MIPMAP_LINEAR, | |

LINEAR_MIPMAP_NEAREST, | |

LINEAR_MIPMAP_LINEAR, | |

FILTER4_SGIS, | |

LINEAR_CLIPMAP_LINEAR_SGIX, | |

TEXTURE_MAG_FILTER integer NEAREST, LINEAR, | |

FILTER4_SGIS, | |

LINEAR_DETAIL_SGIS, | |

LINEAR_DETAIL_ALPHA_SGIS, | |

LINEAR_DETAIL_COLOR_SGIS, | |

LINEAR_SHARPEN_SGIS, | |

LINEAR_SHARPEN_ALPHA_SGIS, | |

LINEAR_SHARPEN_COLOR_SGIS | |

TEXTURE_BORDER_COLOR 4 floats any 4 values in [0,1] | |

DETAIL_TEXTURE_LEVEL_SGIS integer any non-negative integer | |

DETAIL_TEXTURE_MODE_SGIS integer ADD, MODULATE | |

TEXTURE_MIN_LOD_SGIS float any value | |

TEXTURE_MAX_LOD_SGIS float any value | |

TEXTURE_BASE_LEVEL_SGIS integer any non-negative integer | |

TEXTURE_MAX_LEVEL_SGIS integer any non-negative integer | |

GENERATE_MIPMAP_SGIS boolean TRUE or FALSE | |

TEXTURE_CLIPMAP_FRAME_SGIX float any non-negative value | |

TEXTURE_CLIPMAP_CENTER_SGIX 2 integers any 2 non-negative integers | |

TEXTURE_CLIPMAP_OFFSET_SGIX 2 integers any 2 non-negative integers | |

TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 3 integers any 3 non-negative integer | |

TEXTURE_LOD_BIAS_S_SGIX float any value | |

TEXTURE_LOD_BIAS_T_SGIX float any value | |

TEXTURE_LOD_BIAS_R_SGIX float any value | |

TEXTURE_MIPMAP_ANISOTROPY int any value >= 1 | |

Table 3.9: Texture parameters and their values. | |

Texture Minification | |

------------------------ | |

This extensions substantially changes Section 3.8.1. Previously | |

a single scale factor P was determined based on the pixel's projection | |

into texture space. Now two scale factors, Px and Py, are computed. | |

Px = sqrt(dudx^2 + dvdx^2) | |

Py = sqrt(dudy^2 + dvdy^2) | |

Pmax = max(Px,Py) | |

Pmin = min(Px,Py) | |

N = min(ceil(Pmax/Pmin),TEXTURE_MIPMAP_ANISOTROPY_SGIX); | |

Lamda = log2(Pmax/N) | |

It is acceptable for implementation to round 'N' up to the nearest supported | |

sampling rate. For example an implementation may only support power-of-two | |

sampling rates. | |

It is also acceptable for an implementation to approximate the ideal | |

functions Px and Py with functions Fx and Fy subject to the following | |

conditions: | |

1. Fx is continuous and monotonically increasing in |du/dx| and |dv/dx|. | |

Fy is continuous and monotonically increasing in |du/dy| and |dv/dy|. | |

2. max(|du/dx|,|dv/dx|} <= Fx <= |du/dx| + |dv/dx|. | |

max(|du/dy|,|dv/dy|} <= Fy <= |du/dy| + |dv/dy|. | |

Instead of a single sample, Tau, at (u,v,Lamda), 'N' locations in the mipmap | |

at LOD Lamda, are sampled within the texture footprint of the pixel. | |

i=N | |

--- | |

Tau = 1/N \ Tau(u(x - 1/2 + i/(N+1), y), v(x - 1/2 + i/(N+1), y)), Px > Py | |

/ | |

--- | |

i=1 | |

i=N | |

--- | |

Tau = 1/N \ Tau(u(x, y - 1/2 + i/(N+1)), v(x, y - 1/2 + i/(N+1))), Py >= Px | |

/ | |

--- | |

i=1 | |

It is acceptable to approximate the u and v functions with equally spaced | |

samples in texture space at LOD Lamda: | |

i=N | |

--- | |

Tau = 1/N \ Tau(u(x,y)+dudx(i/(N+1)-1/2), v(x,y)+dvdx(i/(N+1)-1/2)), Px > Py | |

/ | |

--- | |

i=1 | |

i=N | |

--- | |

Tau = 1/N \ Tau(u(x,y)+dudy(i/(N+1)-1/2), v(x,y)+dvdy(i/(N+1)-1/2)), Py >= Px | |

/ | |

--- | |

i=1 | |

Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations | |

and the Frame Buffer) | |

None | |

Additions to Chapter 5 of the 1.1 Specification (Special Functions) | |

None | |

Additions to Chapter 6 of the 1.1 Specification (State and State Requests) | |

None | |

Additions to the GLX Specification | |

None | |

Dependencies on EXT_texture3D | |

If EXT_texture3D is supported, the functions Px, Py, and Tau are modified | |

to include dwdx, dwdy, and w. | |

Dependencies on SGIX_texture_lod_bias | |

If SGIX_texture_lod_bias is supported, dudx, dvdx, dwdx, dudy, dvdy, dwdy | |

are replaced with dlodudx, dlodvdx, dlodwdx, dlodudy, dlodvdy, dlodwdy in | |

the Px and Py functions. | |

Errors | |

None | |

New State | |

Initial | |

Get Value Get Command Type Value Attrib | |

--------- ----------- ---- ------- ------ | |

TEXTURE_MIPMAP_ANISOTROPY_SGIX GetTexParameteriv Z1* 1 texture | |

New Implementation Dependent State | |

Minimum | |

Get Value Get Command Type Value | |

--------- ----------- ---- ------- | |

MAX_MIPMAP_ANISOTROPY_SGIX GetIntegerv Z1* 2 |