blob: 8891e9d8b7994c8c897990fd6322190fbf46edec [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
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.