` TEXTURE_MIN_FILTER` values ` NEAREST_MIPMAP_NEAREST`,
` NEAREST_MIPMAP_LINEAR`, ` LINEAR_MIPMAP_NEAREST`,
and ` LINEAR_MIPMAP_LINEAR`
each require the use of a * mipmap*.
A mipmap is an ordered set of arrays representing the same image;
each array has a resolution lower than the previous one.
If the texture has dimensions ,
then there are mipmap arrays.
The first array is the original texture with dimensions
.
Each subsequent array has dimensions where
are the dimensions of the previous array.
This is the case as long as both **k>0** and **l>0**.
Once either **k=0** or **l=0**,
each subsequent array has dimension
or ,
respectively,
until the last array is reached with dimension .

Each array in a mipmap is transmitted to the GL using ** TexImage2D**
or ** TexImage1D** ;
the array being set is indicated with the * level-of-detail*
argument.
Level-of-detail numbers proceed from **0** for the original
texture array through with each unit increase indicating
an array of half the dimensions of the previous one as already described.
If texturing is enabled
(and ` TEXTURE_MIN_FILTER` is one that requires a mipmap)
at the time a primitive is rasterized and if
the set of arrays **0** through **p** is incomplete,
based on the dimensions of array **0**,
then it is as if texture mapping were disabled.
The set of arrays **0** through **p** is incomplete if
the internal formats of all the mipmap arrays were not specified with the
same symbolic constant,
or if the border widths of the mipmap arrays are not the same,
or if the dimensions of the mipmap arrays do not follow the sequence
described above.
Arrays indexed greater than **p** are insignificant.

The mipmap is used in conjunction with the level of detail to approximate
the application of an appropriately filtered texture to a fragment.
Let and let **c** be the value of
at which the transition
from minification to magnification occurs (since this discussion pertains to
minification,
we are concerned only with values of where ).
For ` NEAREST_MIPMAP_NEAREST`,
if
then the mipmap array with level-of-detail of 0
is selected.
Otherwise,
the **d**th mipmap array is selected
when
as long as .
If ,
then the **p**th mipmap array is selected.
The rules for ` NEAREST` are then applied to the selected array.

The same mipmap array selection rules apply for
` LINEAR_MIPMAP_NEAREST`
as for ` NEAREST_MIPMAP_NEAREST`,
but the rules for ` LINEAR` are applied to the selected array.

For ` NEAREST_MIPMAP_LINEAR`,
the level **d-1** and the level **d** mipmap arrays are selected,
where ,
unless , in which case the **p**th mipmap
array is used for both arrays.
The rules for ` NEAREST` are then applied to each of these arrays,
yielding two corresponding texture values and .
The final texture value is then found as

` LINEAR_MIPMAP_LINEAR`
has the same effect as ` NEAREST_MIPMAP_LINEAR`
except that the rules for ` LINEAR` are applied for each of the
two mipmap arrays to generate and .

Sat Mar 29 02:23:21 PST 1997