1Name 2 3 ARB_seamless_cube_map 4 5Name Strings 6 7 GL_ARB_seamless_cube_map 8 9Contributors 10 11 Bill Licea-Kane, AMD 12 Bruce Merry, ARM 13 Graham Sellers, AMD 14 Ian Romanick, Intel 15 Jeff Bolz, NVIDIA 16 Pat Brown, NVIDIA 17 Pierre Boudier, AMD 18 19Contact 20 21 Graham Sellers, AMD (graham.sellers 'at' amd.com) 22 23Notice 24 25 Copyright (c) 2009-2013 The Khronos Group Inc. Copyright terms at 26 http://www.khronos.org/registry/speccopyright.html 27 28Specification Update Policy 29 30 Khronos-approved extension specifications are updated in response to 31 issues and bugs prioritized by the Khronos OpenGL Working Group. For 32 extensions which have been promoted to a core Specification, fixes will 33 first appear in the latest version of that core Specification, and will 34 eventually be backported to the extension document. This policy is 35 described in more detail at 36 https://www.khronos.org/registry/OpenGL/docs/update_policy.php 37 38Status 39 40 Complete. Approved by the ARB on July 3, 2009. 41 42Version 43 44 Last Modified Date: 07/21/2009 45 Author revision: 4 46 47Number 48 49 ARB Extension #65 50 51Dependencies 52 53 OpenGL 1.1 is required. 54 55 ARB_texture_cube_map is required. 56 57 EXT_texture_filter_anisotropic affects the definition of this extension. 58 59 This extension is written against the OpenGL 3.1 Specification. 60 61Overview 62 63 When sampling from cube map textures, a three-dimensional texture 64 coordinate is used to select one of the cube map faces and generate 65 a two dimensional texture coordinate ( s t ), at which a texel is 66 sampled from the determined face of the cube map texture. Each face 67 of the texture is treated as an independent two-dimensional texture, 68 and the generated ( s t ) coordinate is subjected to the same 69 clamping and wrapping rules as for any other two dimensional texture 70 fetch. 71 72 Although it is unlikely that the generated ( s t ) coordinate lies 73 significantly outside the determined cube map face, it is often the 74 case that the locations of the individual elements required during a 75 linear sampling do not lie within the determined face, and their 76 coordinates will therefore be modified by the selected clamping and 77 wrapping rules. This often has the effect of producing seams or 78 other discontinuities in the sampled texture. 79 80 This extension allows implementations to take samples from adjacent 81 cube map faces, providing the ability to create seamless cube maps. 82 83IP Status 84 85 None. 86 87New Procedures and Functions 88 89 None. 90 91New Tokens 92 93 Accepted by the <cap> parameter of Enable, Disable and IsEnabled, 94 and by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv 95 and GetDoublev: 96 97 TEXTURE_CUBE_MAP_SEAMLESS 0x884F 98 99 100Additions to Chapter 3 of the 3.1 Specification (Rasterization) 101 102 Section 3.8.7, Cube Map Texture Selection, p. 143, change the last 103 paragraph from 104 105 "This new ( s t ) is used to find a texture value in the determined 106 face's two-dimensional texture image using the rules given in 107 sections 3.8.7 through 3.8.9." 108 109 to: 110 111 Seamless Cube Map Filtering 112 --------------------------- 113 114 Seamless cube map filtering is enabled or disabled by calling Enable 115 or Disable, respectively, with the symbolic constant 116 TEXTURE_CUBE_MAP_SEAMLESS. 117 118 When seamless cube map filtering is disabled, the new (s t) is used 119 to find a texture value in the determined face's two-dimensional 120 image using the rules given in sections 3.8.9 through 3.8.10. 121 122 When seamless cube map filtering is enabled, the rules for texel 123 selection in sections 3.8.9 through 3.8.10 are modified so that 124 texture wrap modes are ignored. Instead, 125 126 * If NEAREST filtering is done within a miplevel, always apply wrap 127 mode CLAMP_TO_EDGE. 128 * If LINEAR filtering is done within a miplevel, always apply wrap mode 129 CLAMP_TO_BORDER. Then, 130 o If a texture sample location would lie in the texture border in 131 either u or v, instead select the corresponding texel from the 132 appropriate neighboring face. 133 o If a texture sample location would lie in the texture border in 134 both u and v (in one of the corners of the cube), there is no 135 unique neighboring face from which to extract one texel. The 136 recommended method is to average the values of the three 137 available samples. However, implementations are free to 138 construct this fourth texel in another way, so long as, when the 139 three available samples have the same value, this texel also has 140 that value. 141 142 The required state is one bit indicating whether seamless cube map 143 filtering is enabled or disabled. Initially, it is disabled. 144 145 Add final paragraphs to Section 3.8.7 146 147 "When TEXTURE_MAX_ANISOTROPY_EXT is greater than 1.0, an 148 implementation may sample from the texture at multiple locations in 149 order to produce a filtered texel value. In this case, some of the 150 required samples may lie outside the determined cube map face. If 151 TEXTURE_CUBE_MAP_SEAMLESS is enabled, it is implementation defined 152 as to whether these samples are taken from the determined face, or 153 from the appropriate adjacent cube map face." 154 155Errors 156 157 None. 158 159Dependencies on EXT_texture_filter_anisotropic 160 161 If EXT_texture_filter_anisotropic is not supported, remove the 162 final paragraph added to Section 3.8.6 which references 163 TEXTURE_MAX_ANISOTROPY_EXT. 164 165New State 166 167 In table 6.42, Miscellaneous, p. 279, add the following: 168 169 Get Value Type Get Command Init Val Description Sec. Attribute 170 --------------------------- ------ -------------------- -------- -------------------------- ------ --------- 171 TEXTURE_CUBE_MAP_SEAMLESS B IsEnabled FALSE Seamless cube map filtering 3.8.6 - 172 173New Implementation Dependent State 174 175 None. 176 177Issues 178 179 1) Should this be a new wrap mode, or a separate state? 180 181 RESOLVED: It cannot be a normal wrap mode because it does not 182 apply per dimension, but rather to a texture as a whole. 183 Therefore, it is a separate state item. 184 185 2) What is the interaction with anisotropic filtering as described 186 in EXT_texture_filter_anisotropic? 187 188 RESOLVED: EXT_texture_filter_anisotropic leaves the 189 implementation of anisotropic filtering implementation defined. 190 Therefore, this extension does the same. 191 192 3) Should this be per-texture, or a global state? 193 194 RESOLVED: While in some cases it may be desirable to mix seamless 195 and non-seamless cube map texture sampling, it is sufficient to 196 leave this spec defining a global state and provide per-texture 197 support in another extension. 198 199Revision History 200 201 Rev. Date Author Changes 202 ---- -------- -------- ----------------------------------------- 203 4 07/21/09 Jon Leech Reformat to 80 columns and update 204 ambiguous sample location to match 205 the 3.2 spec (bug 5357). 206 207 3 07/20/09 Jon Leech Assign enum value and remove _ARB suffix. 208 209 2 07/01/09 wwlk Updated per bug 5292. 210 Re-written against the OpenGL 3.1 specification. 211 212 1 05/07/09 gsellers Initial draft based on 213 AMD_texture_cube_face_select 214