1Name 2 3 AMD_seamless_cubemap_per_texture 4 5Name Strings 6 7 GL_AMD_seamless_cubemap_per_texture 8 9Contributors 10 11 Pierre Boudier 12 Graham Sellers 13 Ahmet Oguz Akyuz 14 15Contact 16 17 Graham Sellers, AMD (graham.sellers 'at' amd.com) 18 19Status 20 21 In Progress. 22 23Version 24 25 Last Modified Date: February 3, 2017 26 Author revision: 7 27 28Number 29 30 383 31 32Dependencies 33 34 OpenGL 1.1 is required. 35 36 ARB_texture_cube_map is required. 37 38 ARB_seamless_cube_map affects the definition of this extension. 39 40 This extension is written against the OpenGL 1.5 Specification. 41 42Overview 43 44 In unextended OpenGL, cube maps are treated as sets of six, independent 45 texture images. Once a face is selected from the set, it is treated exactly 46 as any other two-dimensional texture would be. When sampling linearly from 47 the texture, all of the individual texels that would be used to to create 48 the final, bilinear sample values are taken from the same cube face. The 49 normal, two-dimensional texture coordinate wrapping modes are honored. 50 This sometimes causes seams to appear in cube maps. 51 52 ARB_seamless_cube_map addresses this issue by providing a mechanism whereby 53 an implementation could take each of the taps of a bilinear sample from 54 a different face, spanning face boundaries and providing seamless filtering 55 from cube map textures. However, in ARB_seamless_cube_map, this feature was 56 exposed as a global state, affecting all bound cube map textures. It was not 57 possible to mix seamless and per-face cube map sampling modes during 58 multisampling. Furthermore, if an application included cube maps that were 59 meant to be sampled seamlessly and non-seamlessly, it would have to track 60 this state and enable or disable seamless cube map sampling as needed. 61 62 This extension addresses this issue and provides an orthogonal method for 63 allowing an implementation to provide a per-texture setting for enabling 64 seamless sampling from cube maps. 65 66IP Status 67 68 None. 69 70New Procedures and Functions 71 72 None. 73 74New Tokens 75 76 Accepted by the <pname> parameter of TexParameterf, TexParameteri, 77 TexParameterfv, TexParameteriv, GetTexParameterfv, and GetTexParameteriv: 78 79 TEXTURE_CUBE_MAP_SEAMLESS 0x884F (Previously defined in 80 ARB_seamless_cubemap) 81 82Additions to Chapter 2 of the 1.5 Specification (OpenGL Operation) 83 84 None. 85 86Additions to Chapter 3 of the 1.5 Specification (Rasterization) 87 88 Section 3.8.4, Texture Parameters, p. 144, append table 3.19 with the 89 following: 90 91 Name Type Legal Values 92 ------------------------------ ----- -------------------- 93 TEXTURE_CUBE_MAP_SEAMLESS boolean FALSE, 94 TRUE 95 96 Section 3.8.4, Texture Parameters, p. 143, append the last paragraph with: 97 98 "The TEXTURE_CUBE_MAP_SEAMLESS parameter is specific to cube maps 99 and may be used to control the way that the GL handles sampling from 100 coordinates that lie outside the determined cube map face (see section 101 3.8.6)." 102 103 Section 3.8.6, Cube Map Texture Selection, p. 145, change the last 104 paragraph from 105 106 "This new ( s t ) is used to find a texture value in the determined face's 107 two-dimensional texture image using the rules given in sections 3.8.7 108 through 3.8.9." 109 110 to: 111 112 "If TEXTURE_CUBE_MAP_SEAMLESS is disabled globally and the value of the 113 the texture's TEXTURE_CUBE_MAP_SEAMLESS parameter is FALSE, the new 114 ( s t ) is used to find a texture value in the determined face's 115 two-dimensional image using the rules given in sections 3.8.7 through 116 3.8.9. If TEXTURE_CUBE_MAP_SEAMLESS is emabled globally or the value 117 of the texture's TEXTURE_CUBE_MAP_SEAMLESS parameter is TRUE, seamless 118 cube map sampling is enabled, and texels are read from adjacent faces as 119 described in the ARB_seamless_cube_map extension." 120 121Additions to Chapter 4 of the 1.5 Specification (Per-Fragment Operations 122and the Frame Buffer) 123 124 None. 125 126Additions to Chapter 5 of the 1.5 Specification (Special Functions) 127 128 None. 129 130Additions to Chapter 6 of the 1.5 Specification (State and State Requests) 131 132 Section 6.1.3, Enumerated Queries, p. 216, modify the first paragraph 133 on page 216 to read: 134 135 "... For GetTexParameter, value must be either TEXTURE_RESIDENT or one 136 of the symbolic values in table 3.19. The TEXTURE_CUBE_MAP_SEAMLESS 137 value may only be used when target is TEXTURE_CUBE_MAP. The lod argument 138 to GetTexLevelParameter ..." 139 140Additions to the GLX Specification 141 142 None. 143 144Errors 145 146 INVALID_ENUM is generated by TexParameter if <pname> is 147 TEXTURE_CUBE_MAP_SEAMLESS and <target> is not TEXTURE_CUBE_MAP. 148 149 INVALID_ENUM is generated by TexParameter if <target> is TEXTURE_CUBE_MAP, 150 <pname> is TEXTURE_CUBE_MAP_SEAMLESS and <value> is not either TRUE 151 or FALSE. 152 153 INVALID_ENUM is generated by GetTexParameter if <pname> is 154 TEXTURE_CUBE_MAP_SEAMLESS and <target> is not TEXTURE_CUBE_MAP. 155 156Dependencies on ARB_seamless_cube_map 157 158 If ARB_seamless_cube_map is not supported, the value of the 159 TEXTURE_CUBE_MAP_SEAMLESS token is still used by this extension. 160 However, seamless cubemap filtering can only be enabled or disabled on a 161 per-texture basis as glEnable and glDisable will not accept 162 TEXTURE_CUBE_MAP_SEAMLESS. Even if ARB_seamless_cube_map is not 163 supported, the behavior of seamless cube map sampling is as described in 164 that extension. The logic to enable seamless filtering will behave as if 165 TEXTURE_CUBE_MAP_SEAMLESS were disabled (the default state). 166 167New State 168 169 In table 6.16, Texture Objects, p. 242, add the following: 170 171 Get Value Type Get Command Init Val Description Sec. Attribute 172 ------------------------- ------ -------------------- -------- -------------------------- ------ --------- 173 TEXTURE_CUBE_MAP_SEAMLESS n x B GetTexParameter[if]v FALSE Seamless cubemap sampling 3.8.6 texture 174 is enabled. 175 176New Implementation Dependent State 177 178 None. 179 180Issues 181 182 1) How does this extension affect ARB_seamless_cube_map? Which takes 183 priority? Explain, in plain English, how seamless filtering gets enabled. 184 185 RESOLVED: These two extensions are orthogonal and neither requires the 186 other to function. Seamless filtering is enabled for a cube map texture 187 either when TEXTURE_CUBE_MAP_SEAMLESS is enabled globally or when the 188 value of the individual texture's TEXTURE_CUBE_MAP_SEAMLESS parameter 189 is TRUE. The default for both extensions is to leave cube map sampling as 190 described in unextended OpenGL. Thus, an application may use either 191 extension and its behavior will be the same, regardless of the presence 192 of support for or use of the other. 193 194Revision History 195 196 Rev. Date Author Changes 197 ---- -------- -------- ----------------------------------------- 198 7 02/03/17 Jon Leech Remove ARB suffix from TEXTURE_CUBE_MAP_SEAMLESS 199 (public bug 337). 200 6 08/18/09 gsellers Renamed from AMD_texture_cube_face_select to 201 AMD_seamless_cubemap_per_texture to better follow 202 ARB version. 203 Use ARB token, GL_TRUE and GL_FALSE rather than 204 SAME_FACE and NEXT_FACE. 205 Change type of texture parameter to boolean. 206 Change wording of resolution to issue 1 to reflect 207 the new token names. 208 5 05/08/09 gsellers Large rewrite after splitting global and 209 per-texture support into two extensions. 210 4 05/05/09 gsellers Change token names for consistency. Include 211 interaction with EXT_texture_filter_anisotropic. 212 3 04/09/09 gsellers Fix 'selected' language. Suggest behavior for 213 cases where ( s, t ) lies directly at a cube map 214 corner 215 2 04/07/09 gsellers Minor updates 216 1 04/06/09 gsellers Initial draft 217