Name

    ARB_texture_mirrored_repeat

Name Strings

    GL_ARB_texture_mirrored_repeat

Contact

    Bimal Poddar, Intel, bimal.poddar at intel.com
    Dan Brokenshire, IBM, brokensh at us.ibm.com
    Pat Brown, Nvidia, pbrown at nvidia.com

Status

    Complete. Approved by ARB on October 16, 2001.

Version

    Last modified date: 2001/09/20

Number

    ARB Extension #21

Dependencies

    This extension is written against the OpenGL 1.3 Specification.
    However, this extension does not require OpenGL 1.3.

Overview

    ARB_texture_mirrored_repeat extends the set of texture wrap modes to
    include a mode (GL_MIRRORED_REPEAT_ARB) 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

 1. 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.


 2. The IBM_texture_mirrored_repeat extension inadvertantly used an HP
    enumerant value (0x8370) allocated by HP as an interleaved array format.
    Should the enumerant value be changed if this becomes an ARB extension?

    No, it is not worth the confusion created by having two different
    enumerant value for the same token.

 3. Should additional mirroring functions be added to this extension and
    perhaps rename it to ARB_texture_mirror. For example, include the two
    mirror modes (MIRROR_CLAMP_ATI and MIRROR_CLAMP_TO_EDGE_ATI) provided
    for in the GL_ATI_texture_mirror_once extension.

    No, these extensions are not interdependent and inclusion of the
    mirror once will likely hinder the adoption of this extension.

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_ARB			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_ARB, MIRRORED_REPEAT_ARB
    TEXTURE_WRAP_T    integer	CLAMP, CLAMP_TO_EDGE, REPEAT,
				CLAMP_TO_BORDER_ARB, MIRRORED_REPEAT_ARB
    TEXTURE_WRAP_R    integer	CLAMP, CLAMP_TO_EDGE, REPEAT,
				CLAMP_TO_BORDER_ARB, MIRRORED_REPEAT_ARB

  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_ARB, 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


Revision History
    01/09/20 bpoddar	- Moved description for section 3.8.5 to the end
			  to avoid a forward reference
			- Changed to using the old enumerant
			- Minor typo/email address fixes

    01/09/11 bpoddar	- Updated for OpenGL 1.3 spec.
			- Minor change to description of clamping.

    01/03/22 brokensh	Converted the IBM extension to a ARB extension
			written against the latest specification.
