Name

    OES_texture_mirrored_repeat

Name Strings

    GL_OES_texture_mirrored_repeat

Contact


Notice

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

Status


Version

    Last modified date: May 18, 2005

Number

    OpenGL ES Extension #22

Dependencies

    OpenGL ES 1.0 is required.

    This extension is based on the ARB_texture_mirrored_repeat
    extension specification.

Overview

    This extension extends the set of texture wrap modes to
    include a mode (GL_MIRRORED_REPEAT) that effectively uses a texture
    map twice as large at the original image in which the additional half,
    for each coordinate, 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

    Please refer to the ARB_textured_mirrored_repeat extension specification

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:

      GL_MIRRORED_REPEAT                        0x8370

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

    None.

Additions to Chapter 3 of the GL Specification (Rasterization)

  Modify Table 3.19, editing only the following lines:

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

  Add to end of Section 3.8.5 (Subsection "Texture Wrap Modes")

    If TEXTURE_WRAP_S, TEXTURE_WRAP_T, or TEXTURE_WRAP_R is set to
    MIRRORED_REPEAT , 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.

    The converted s (or t or r) coordinate is then clamped
    as described for CLAMP_TO_EDGE texture coordinate clamping.

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

    None

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 Appendix F of the GL Specification (ARB Extensions)

    None

Additions to the GLX Specification

    None

GLX Protocol

    None.

Errors

    None

New State

    Only the type information changes for these parameters:

                                                        Initial
    Get Value       Get Command     Type    Value   Description          Sec.   Attrib
    ---------       -----------     ----    ------- -----------          ----   ------
    TEXTURE_WRAP_S  GetTexParameteriv   n x Z5 REPEAT  Texture Wrap Mode S  3.8    texture
    TEXTURE_WRAP_T  GetTexParameteriv   n x Z5 REPEAT  Texture Wrap Mode T  3.8    texture
    TEXTURE_WRAP_R  GetTexParameteriv   n x Z5 REPEAT  Texture Wrap Mode R  3.8    texture

New Implementation Dependent State

    None
