blob: c94ecc5bd26c8a9e3eedf185caa4007216531565 [file] [log] [blame]
Name
ARB_texture_mirror_clamp_to_edge
Name Strings
GL_ARB_texture_mirror_clamp_to_edge
Contact
Daniel Koch, NVIDIA Corporation (dkoch 'at' nvidia.com)
Contributors
Contributors to ATI_texture_mirror_once
Contributors to EXT_texture_mirror_clamp
Ian Romanick, Intel
Members of the ARB working group
Notice
Copyright (c) 2013 The Khronos Group Inc. Copyright terms at
http://www.khronos.org/registry/speccopyright.html
Specification Update Policy
Khronos-approved extension specifications are updated in response to
issues and bugs prioritized by the Khronos OpenGL Working Group. For
extensions which have been promoted to a core Specification, fixes will
first appear in the latest version of that core Specification, and will
eventually be backported to the extension document. This policy is
described in more detail at
https://www.khronos.org/registry/OpenGL/docs/update_policy.php
Status
Complete. Approved by the ARB on June 3, 2013.
Ratified by the Khronos Board of Promoters on July 19, 2013.
Version
Last Modified Date: April 22, 2013
Revision 4
Number
ARB Extension #149
Dependencies
OpenGL 1.4 is required.
This extension is written against the OpenGL 4.3 (Core Profile)
Specification (October 18, 2012).
This extension interacts with EXT_texture3D.
This extension interacts with ARB_texture_rectangle.
This extension interacts with ARB_sampler_objects.
Overview
ARB_texture_mirror_clamp_to_edge extends the set of texture wrap modes to
include an additional mode (GL_MIRROR_CLAMP_TO_EDGE) that effectively uses
a texture map twice as large as 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".
This mode allows the texture to be mirrored only once in the negative
s, t, and r directions.
New Procedure and Functions
None
New Tokens
Accepted by the <param> parameter of TexParameter{if}, SamplerParameter{if}
and SamplerParameter{if}v, and by the <params> parameter of
TexParameter{if}v, TexParameterI{i ui}v and SamplerParameterI{i ui}v when
their <pname> parameter is TEXTURE_WRAP_S, TEXTURE_WRAP_T, or
TEXTURE_WRAP_R:
MIRROR_CLAMP_TO_EDGE 0x8743 (same value as MIRROR_CLAMP_TO_EDGE_ATI/EXT)
Additions to Chapter 8 if the OpenGL 4.3 (Core Profile) Specification
(Textures and Samplers)
In section 8.2 (Sampler Objects) modify the second sentence of the
sixth paragraph (reading "For example, if..") to read as follows:
"For example, if TEXTURE_WRAP_S or TEXTURE_WRAP_T is set to REPEAT,
MIRRORED_REPEAT, or MIRROR_CLAMP_TO_EDGE on the sampler object bound
to a texture unit and the texture bond to that unit is a rectangle
texture, the texture will be considered incomplete."
In section 8.10 (Texture Parameters) modify the table entries for Table 8.16
(Texture parameters and their values) for TEXTURE_WRAP_S, TEXTURE_WRAP_T,
and TEXTURE_WRAP_R and add the following to the "Legal Values" column:
Name Type Legal Values
--------------- ---- ------------
TEXTURE_WRAP_S enum (.. as before)
MIRROR_CLAMP_TO_EDGE
TEXTURE_WRAP_T enum (.. as before)
MIRROR_CLAMP_TO_EDGE
TEXTURE_WRAP_R enum (.. as before)
MIRROR_CLAMP_TO_EDGE
In section 8.14.2 (Coordinate Wrapping and Texel Selection) add the
following row to Table 8.19 (Texel location wrap mode application):
Wrap mode Result of wrap(coord)
--------- ---------------------
(previous entries..)
MIRROR_CLAMP_TO_EDGE min(1-1/(2*size), max(1/(2*size), abs(coord)))
Additions to the GLX Specification
None
GLX Protocol
None
Errors
The error INVALID_ENUM is generated when TexParameter* is called
with a target of TEXTURE_RECTANGLE and the TEXTURE_WRAP_S,
TEXTURE_WRAP_T, or TEXTURE_WRAP_R parameter is set to REPEAT,
MIRRORED_REPEAT, or MIRROR_CLAMP_TO_EDGE.
Dependencies on EXT_texture3D or equivalent
If EXT_texture3D or equivalent functionality is not implemented,
then the references to clamping of 3D textures in this file are
invalid, and references to TEXTURE_WRAP_R should be ignored.
Dependencies on ARB_texture_rectangle or equivalent
If ARB_texture_rectangle or equivalent functionality is not
implemented, then ignore all references to rectangle textures.
Dependencies on ARB_sampler_objects or equivalent
If ARB_sampler_objects or equivalent functionality is not supported,
then ignore all references to sampler objects and SamplerParameter*
functions.
New State
Only the type information changes for these parameters:
Update Table 23.14 (Textures - state per texture object)
Get Value Get Command Type Initial Value (...)
--------- ----------- ---- -------------
TEXTURE_WRAP_S GetTexParameter n x Z5 see sec 8.21 (...)
TEXTURE_WRAP_T GetTexParameter n x Z5 see sec 8.21 (...)
TEXTURE_WRAP_R GetTexParameter n x Z5 see sec 8.21 (...)
Update Table 23.18 (Textures - state per sampler object)
Get Value Get Command Type Initial Value (...)
--------- ----------- ---- -------------
TEXTURE_WRAP_S GetSamplerParameteriv n x Z5 see sec 8.21 (...)
TEXTURE_WRAP_T GetSamplerParameteriv n x Z5 see sec 8.21 (...)
TEXTURE_WRAP_R GetSamplerParameteriv n x Z5 see sec 8.21 (...)
New Implementation Dependent State
None
Issues
1. Should we include MIRROR_CLAMP for compatibility profiles?
What about MIRROR_CLAMP_TO_BORDER? (And more importantly can all
vendors support it?)
RESOLVED. No. Some vendors stated that they can't support
MIRROR_CLAMP_TO_BORDER and MIRROR_CLAMP (although it's not clear if
they'd ever ship a compatibility profile with this extension), but
regardless we'll leave them out of this extension.
Revision History
Revision 4, April 22, 2013 (Daniel Koch)
- fix interactions and remove ARB suffixes
Revision 3, April 21, 2013 (Daniel Koch)
- formatting, updates to Table 23.14
Revision 2, March 19, 2013 (Daniel Koch)
- remove MIRROR_CLAMP functionality and rename extension
Revision 1, January 20, 2013 (Daniel Koch)
- Initial ARB version based on ATI_texture_mirror_once and
EXT_texture_mirror_clamp.
Revision 0.9, January 3, 2013 (Ian Romanick)
- Add interactions with OpenGL contexts that have removed GL_CLAMP
and friends.