
Name
    
    EXT_texture_lod_bias

Name Strings

    GL_EXT_texture_lod_bias

Notice

    Copyright NVIDIA Corporation, 1999, 2000.

Contact

    Mark Kilgard, NVIDIA (mjk 'at' nvidia.com)

Status

    Shipping since late 1999.

    The texture LOD bias functionality in OpenGL 1.4 is based on this
    extension though the OpenGL 1.4 functionality added the ability to
    specify a second per-texture object bias term.  The OpenGL 1.4 enum
    values match the EXT enum values.

Version

    Last Modified Date: June 23, 2009

Number

    OpenGL Extension #186
    OpenGL ES Extension #60

Dependencies

    Written based on the wording of the OpenGL 1.2 specification.

    Affects ARB_multitexture.
    
    Interacts with OpenGL ES 1.1.

Overview

    OpenGL computes a texture level-of-detail parameter, called lambda
    in the GL specification, that determines which mipmap levels and
    their relative mipmap weights for use in mipmapped texture filtering.

    This extension provides a means to bias the lambda computation
    by a constant (signed) value.  This bias can provide a way to blur
    or pseudo-sharpen OpenGL's standard texture filtering.

    This blurring or pseudo-sharpening may be useful for special effects
    (such as depth-of-field effects) or image processing techniques
    (where the mipmap levels act as pre-downsampled image versions).
    On some implementations, increasing the texture lod bias may improve
    texture filtering performance (at the cost of texture bluriness).

    The extension mimics functionality found in Direct3D.

Issues

    Should the texture LOD bias be settable per-texture object or
    per-texture stage?

      RESOLUTION:  Per-texture stage.  This matches the Direct3D
      semantics for texture lod bias.  Note that this differs from
      the semantics of SGI's SGIX_texture_lod_bias extension that
      has the biases per-texture object.

      This also allows the same texture object to be used by two different
      texture units for different blurring.  This is useful for
      extrapolating detail between various levels of detail in a
      mipmapped texture.

      For example, you can extrapolate texture detail with
      ARB_multitexture and EXT_texture_env_combine by computing

        (B0 - B2) * 2 + B2

      where B0 is a non-biased texture (normal sharpness) and B2 is
      the same texture but bias by 2 levels-of-detail (fairly blurry).
      This has the effect of increasing the high-frequency information
      in the texture.  There are immediate Earth Sciences and medical
      imaging applications for this technique.

      Per-texture stage control of the LOD bias is also useful for
      allowing an application to control overall texture bluriness.
      This can be used in games to simulate disorientation (note that
      only textures will blur, not edges).  It can also be used to
      globally control texturing performance.  An application may be
      able to sustain a constant frame rate by avoiding texture fetch
      stalls by using slightly blurrier textures.

    How does EXT_texture_lod_bias differ from SGIX_texture_lod bias?

      EXT_texture_lod_bias adds a bias to lambda.  The
      SGIX_texture_lod_bias extension changes the computation of rho (the
      log2 of which is lambda).  The SGIX extension provides separate
      biases in each texture dimension.  The EXT extension does not
      provide an "directionality" in the LOD control.

    Does the texture lod bias occur before or after the TEXTURE_MAX_LOD
    and TEXTURE_MIN_LOD clamping?

      RESOLUTION:  BEFORE.  This allows the texture lod bias to still
      be clamped within the max/min lod range.

    Does anything special have to be said to keep the biased lambda value
    from being less than zero or greater than the maximum number of
    mipmap levels?

      RESOLUTION:  NO.  The existing clamping in the specification
      handles these situations.

    The texture lod bias is specified to be a float.  In practice, what
    sort of range is assumed for the texture lod bias?

      RESOLUTION:  The MAX_TEXTURE_LOD_BIAS_EXT implementation constant
      advertises the maximum absolute value of the supported texture
      lod bias.  The value is recommended to be at least the maximum
      mipmap level supported by the implementation.

    The texture lod bias is specified to be a float.  In practice, what
    sort of precision is assumed for the texture lod bias?

      RESOLUTION;  This is implementation dependent.  Presumably,
      hardware would implement the texture lod bias as a fractional bias
      but the exact fractional precision supported is implementation
      dependent.  At least 4 fractional bits is recommended.

New Procedures and Functions

    None

New Tokens

    Accepted by the <target> parameters of GetTexEnvfv, GetTexEnviv,
    TexEnvi, TexEnvf, Texenviv, and TexEnvfv:

        TEXTURE_FILTER_CONTROL_EXT          0x8500

    When the <target> parameter of GetTexEnvfv, GetTexEnviv, TexEnvi,
    TexEnvf, TexEnviv, and TexEnvfv is TEXTURE_FILTER_CONTROL_EXT, then
    the value of <pname> may be:
        
        TEXTURE_LOD_BIAS_EXT                0x8501

    Accepted by the <pname> parameters of GetBooleanv, GetIntegerv,
    GetFloatv, and GetDoublev:

        MAX_TEXTURE_LOD_BIAS_EXT            0x84FD

Additions to Chapter 2 of the 1.2 Specification (OpenGL Operation)

     None

Additions to Chapter 3 of the 1.2 Specification (Rasterization)

 --  Section 3.8.5 "Texture Minification"
 
     Change the first formula under "Scale Factor and Level of Detail" to read:

     "The choice is governed by a scale factor p(x,y), the level of detail
     parameter lambda(x,y), defined as

                 lambda'(x,y) = log2[p(x,y)] + lodBias

     where lodBias is the texture unit's (signed) texture lod bias parameter
     (as described in Section 3.8.9) clamped between the positive and negative
     values of the implementation defined constant MAX_TEXTURE_LOD_BIAS_EXT."

 --  Section 3.8.9 "Texture Environments and Texture Functions"

     Change the first paragraph to read:

     "The command

        void TexEnv{if}(enum target, enum pname, T param);
        void TexEnv{if}v(enum target, enum pname, T params);

     sets parameters of the texture environment that specifies how texture
     values are interepreted when texturing a fragment or sets per-texture
     unit texture filtering parameters.  The possible target parameters
     are TEXTURE_ENV or TEXTURE_FILTER_CONTROL_EXT.  ...  When target is
     TEXTURE_ENV, the possible environment parameters are TEXTURE_ENV_MODE
     and TEXTURE_ENV_COLOR. ... When target is TEXTURE_FILTER_CONTROL_EXT,
     the only possible texture filter parameter is TEXTURE_LOD_BIAS_EXT.
     TEXTURE_LOD_BIAS_EXT is set to a signed floating point value that
     is used to bias the level of detail parameter, lambda, as described
     in Section 3.8.5."

     Add a final paragraph at the end of the section:

     "The state required for the per-texture unit filtering parameters
     consists of one floating-point value."

Additions to Chapter 4 of the 1.2 Specification (Per-Fragment Operations
and the Frame Buffer)

     None

Additions to Chapter 5 of the 1.2 Specification (Special Functions)

     None

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

 --  Section 6.1.3 "Texture Environments and Texture Functions"

     Change the third sentence of the third paragraph to read:

     "The env argument to GetTexEnv must be either TEXTURE_ENV or
     TEXTURE_FILTER_CONTROL_EXT."

Additions to the GLX Specification

     None

Dependencies on OpenGL ES 1.1

     If the GL is OpenGL ES 1.1, omit reference to GetDoublev.

Errors

     INVALID_ENUM is generated when TexEnv is called with a <pname> of
     TEXTURE_FILTER_CONTROL_EXT and the value of <param> or what is pointed to
     by <params> is not TEXTURE_LOD_BIAS_EXT.

New State

(table 6.14, p204) add the entry:

Get Value                 Type   Get Command  Initial Value     Description      Sec     Attribute
-----------------------   ----   -----------  --------------    ---------------  -----   ---------
TEXTURE_LOD_BIAS_EXT      R      GetTexEnvfv  0.0               Biases texture   3.8.9    texture
                                                                level of detail

(When ARB_multitexture is supported, the TEXTURE_LOD_BIAS_EXT state is per-texture unit.)

New Implementation State

(table 6.24, p214) add the following entries:

Get Value                    Type    Get Command   Minimum Value   Description         Sec     Attribute
--------------------------   ----    -----------   -------------   -----------------   ------  --------------
MAX_TEXTURE_LOD_BIAS_EXT     R+      GetFloatv     4.0             Maximum             3.8.9   -
                                                                   absolute texture
                                                                   lod bias

Revision History

    6/23/09 (Jon Leech) - assign OpenGL ES extension number.

    4/29/09 (Benj Lipchak) - add interaction with OpenGL ES 1.1.

    8/27/03 - updated status to mention OpenGL 1.4 functionality.

    8/26/03 - fixed incorrect enum name (TEXTURE_FILTER_CONTROL_EXT is
    correct) in the Errors section.

    6/2/00 - add spec language to allow GetTexEnv to accept
    TEXTURE_FILTER_CONTROL_EXT.

