Name

    IBM_texture_mirrored_repeat

Name Strings

    GL_IBM_texture_mirrored_repeat

Version

    $Date: 1999/12/28 01:40:35 $ $Revision: 1.2 $
    IBM Id: texture_mirrored_repeat.spec,v 1.5 1998/01/16 18:09:31 pbrown Exp

Number

    224

Dependencies

    EXT_texture_3D
    IBM_texture_edge_clamp

Overview

    IBM_texture_mirrored_repeat extends the set of texture wrap modes to
    include a mode (GL_MIRRORED_REPEAT_IBM) that effectively uses a texture
    map twice as large at the original image in which the additional half of
    the new image is a mirror image of the original image.

    This new mode relaxes the need to generate images whose opposite edges
    match by using the original image to generate a matching "mirror image".

Issues

  * The spec clamps the final (u,v) coordinates to the range [0.5, 2^n-0.5].
    This will produce the same effect as trapping a sample of the border texel
    and using the corresponding edge texel.  The choice of technique is purely
    an implementation detail.

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_EXT:

      GL_MIRRORED_REPEAT_IBM           0x8370

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

    None.

Additions to Chapter 3 of the GL Specification (Rasterization)

    None

Additions to Chapter 4 of the GL Specification (Per-Fragment Operations
and the Framebuffer)

  Change to Section 3.8 (Subsection "Texture Wrap Modes")

    If TEXTURE_WRAP_S, TEXTURE_WRAP_T, or TEXTURE_WRAP_R_EXT is set to
    MIRRORED_REPEAT_IBM, the s (or t or r) coordinate is converted to:

        s - floor(s),           if floor(s) is even, or
        1 - (s - floor(s)),     if floor(s) is odd.


  Change to Section 3.8.1, Texture Minification

    Let:
        u(x,y) = 2^n * s(x,y),
        v(x,y) = 2^m * t(x,y), and
        w(x,y) = 2^l * r(x,y).

    If the TEXTURE_WRAP_S, TEXTURE_WRAP_T, or TEXTURE_WRAP_R_EXT is set to
    either MIRRORED_REPEAT_IBM or CLAMP_TO_EDGE_IBM, the resulting u, v, or
    w coordinates (respectively) are clamped to the range [0.5, 2^n-0.5].

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

    None

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

    None

Additions to the GLX Specification

    None

GLX Protocol

    None.

Errors

    None

Dependencies on EXT_texture3D

    If EXT_texture3D is not implemented, then the references clamping of 3D
    textures in this file are invalid, and references to TEXTURE_WRAP_R_EXT
    should be ignored.

Dependencies on IBM_texture_edge_clamp

    If IBM_texture_edge_clamp is not implemented, then the references to
    CLAMP_TO_EDGE_IBM should be ignored.

New State

    Only the type information changes for these parameters:

    Get Value           Get Command             Type    Initial Value   Attrib
    ---------           -----------             ----    -------------   ------
    TEXTURE_WRAP_S      GetTexParameteriv       n x Z5  REPEAT          texture
    TEXTURE_WRAP_T      GetTexParameteriv       n x Z5  REPEAT          texture
    TEXTURE_WRAP_R_EXT  GetTexParameteriv       n x Z5  REPEAT          texture

New Implementation Dependent State

    None
