Name

    ARB_texture_border_clamp

Name Strings

    GL_ARB_texture_border_clamp

Contact

    Patrick R. Brown, Intel Corporation (patrick.r.brown 'at' intel.com)

Notice

    Copyright (c) 2000-2013 The Khronos Group Inc. Copyright terms at
        http://www.khronos.org/registry/speccopyright.html

Status

    Complete.  Approved by the ARB, 20 June 2000

Version

    1.0, 22 June 2000

Number

    ARB Extension #13

Dependencies

    OpenGL 1.0 is required.

    This extension is written against the OpenGL 1.2.1 Specification.

    This extension is based on and intended to replace
    GL_SGIS_texture_border_clamp.

Overview

    The base OpenGL provides clamping such that the texture coordinates are
    limited to exactly the range [0,1].  When a texture coordinate is clamped
    using this algorithm, the texture sampling filter straddles the edge of
    the texture image, taking 1/2 its sample values from within the texture
    image, and the other 1/2 from the texture border.  It is sometimes
    desirable for a texture to be clamped to the border color, rather than to
    an average of the border and edge colors.

    This extension defines an additional texture clamping algorithm.
    CLAMP_TO_BORDER_ARB clamps texture coordinates at all mipmap levels such
    that NEAREST and LINEAR filters return only the color of the border
    texels.

IP Status

    No known IP issues.

Issues

    (1) Is this formulation correct for higher-order texture filters 
        (e.g., cubic or anisotropic filters)?
        
       RESOLVED:  No.  A more appropriate formulation would clamp the texture
       coordinates in texel space. 

New Procedures and Functions

    None.

New Tokens

    Accepted by the <param> parameter of TexParameteri and TexParameterf, and
    by the <params> parameter of TexParameteriv and TexParameterfv, when their
    <pname> parameter is TEXTURE_WRAP_S, TEXTURE_WRAP_T, or TEXTURE_WRAP_R:

        CLAMP_TO_BORDER_ARB                             0x812D

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

    None.

Additions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization)

    Modify Table 3.17, p. 124, editing only the following lines:

    Name              Type      Legal Values
    ==============    =======   ====================
    TEXTURE_WRAP_S    integer   CLAMP, CLAMP_TO_EDGE, REPEAT,
                                CLAMP_TO_BORDER_ARB 
    TEXTURE_WRAP_T    integer   CLAMP, CLAMP_TO_EDGE, REPEAT,
                                CLAMP_TO_BORDER_ARB 
    TEXTURE_WRAP_R    integer   CLAMP, CLAMP_TO_EDGE, REPEAT,
                                CLAMP_TO_BORDER_ARB 


    Modify Section 3.8.4, Texture Wrap Modes, p.124

    (add at the end of the section, p. 125)

    CLAMP_TO_BORDER_ARB clamps texture coordinates at all mipmaps such that
    the texture filter always samples border texels for fragments whose
    corresponding texture coordinate is sufficiently far outside the range
    [0,1].  The color returned when clamping is derived only from the border
    texels of the texture image, or from the constant border color if the
    texture image does not have a border.

    Texture coordinates are clamped to the range [min, max].  The minimum
    value is defined as

        min = -1 / 2N

    where N is the size (not including borders) of the one-, two-, or
    three-dimensional texture image in the direction of clamping.  The maximum
    value is defined as

        max = 1 - min

    so that clamping is always symmetric about the [0,1] mapped range of a
    texture coordinate.

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

    None.

Additions to Chapter 5 of the OpenGL 1.2.1 Specification (Special Functions)

    None.

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

    None.

Additions to Appendix A of the OpenGL 1.2.1 Specification (Invariance)

    None.

Additions to the AGL/GLX/WGL Specifications

    None.

GLX Protocol

    None.

Errors

    None.

New State

    Only the type information changes for these parameters.

    (table 6.13, p. 203)
                                                                Initial
    Get Value                           Type    Get Command     Value   Description Sec.    Attribute
    ---------                           ----    -----------     ------- ----------- ----    ---------
    TEXTURE_WRAP_S                      3+ x Z4 GetTexParameter  REPEAT Texture wrap  3.8   texture
    TEXTURE_WRAP_T                      3+ x Z4 GetTexParameter  REPEAT Texture wrap  3.8   texture
    TEXTURE_WRAP_R                      3+ x Z4 GetTexParameter  REPEAT Texture wrap  3.8   texture

Revision History

    1.0,  06/22/2000 prbrown1:   Added issue w.r.t. higher order filters.
    
    0.2,  05/23/2000 prbrown1:   Removed dependency on SGIS_texture_filter4
                                 per ARB guidelines.

    0.1,  05/02/2000 prbrown1:   Initial revision -- mostly stolen from
                                 GL_SGIS_texture_border_clamp.

