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 parameter of TexParameter{if}, SamplerParameter{if} and SamplerParameter{if}v, and by the parameter of TexParameter{if}v, TexParameterI{i ui}v and SamplerParameterI{i ui}v when their 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.