1Name 2 3 ARB_seamless_cubemap_per_texture 4 5Name Strings 6 7 GL_ARB_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 19Notice 20 21 Copyright (c) 2013 The Khronos Group Inc. Copyright terms at 22 http://www.khronos.org/registry/speccopyright.html 23 24Specification Update Policy 25 26 Khronos-approved extension specifications are updated in response to 27 issues and bugs prioritized by the Khronos OpenGL Working Group. For 28 extensions which have been promoted to a core Specification, fixes will 29 first appear in the latest version of that core Specification, and will 30 eventually be backported to the extension document. This policy is 31 described in more detail at 32 https://www.khronos.org/registry/OpenGL/docs/update_policy.php 33 34Status 35 36 Complete. Approved by the ARB on June 3, 2013. 37 Ratified by the Khronos Board of Promoters on July 19, 2013. 38 39Version 40 41 Last Modified Date: 15/05/2013 42 Author revision: 1 43 44Number 45 46 ARB Extension #155 47 48Dependencies 49 50 OpenGL 3.2 is required. 51 52 This extension is written against the OpenGL 4.3 (Core Profile) 53 Specification. 54 55Overview 56 57 In unextended OpenGL, cube maps are treated as sets of six, independent 58 texture images. Once a face is selected from the set, it is treated exactly 59 as any other two-dimensional texture would be. When sampling linearly from 60 the texture, all of the individual texels that would be used to to create 61 the final, bilinear sample values are taken from the same cube face. The 62 normal, two-dimensional texture coordinate wrapping modes are honored. 63 This sometimes causes seams to appear in cube maps. 64 65 ARB_seamless_cube_map (and subsequently, OpenGL 3.2) addresses this issue 66 by providing a mechanism whereby an implementation could take each of the 67 taps of a bilinear sample from a different face, spanning face boundaries 68 and providing seamless filtering from cube map textures. However, in 69 ARB_seamless_cube_map, this feature was exposed as a global state, 70 affecting all bound cube map textures. It was not possible to mix seamless 71 and per-face cube map sampling modes during sampling. Furthermore, if an 72 application included cube maps that were meant to be sampled seamlessly 73 and non-seamlessly, it would have to track this state and enable or disable 74 seamless cube map sampling as needed. 75 76 This extension addresses this issue and provides an orthogonal method for 77 allowing an implementation to provide a per-texture setting for enabling 78 seamless sampling from cube maps. 79 80IP Status 81 82 None. 83 84New Procedures and Functions 85 86 None. 87 88New Tokens 89 90 Accepted by the <pname> parameter of TexParameter{if}, 91 TexParameter{if}v, GetTexParameter{if}v, SamplerParameter{if}, 92 SamplerParameter{if}v, and GetSamplerParameter{if}v: 93 94 TEXTURE_CUBE_MAP_SEAMLESS 0x884F 95 96Additions to Chapter 8 of the OpenGL Core Profile Specification (Textures and 97Samplers) 98 99 Modify the first paragraph of Section 8.13.1, "Seamless Cubemap Filtering" 100 as follows: 101 102 Seamless cubemap filtering is enabled or disabled globally by calling 103 Enable or Disable, respectively, with the symbolic constant 104 TEXTURE_CUBE_MAP_SEAMLESS. It may also be enabled for a specific texture 105 unit by setting the TEXTURE_CUBE_MAP_SEAMLESS sampler parameter to TRUE 106 for the sampler object bound to that texture unit (or for the texture object 107 itself, if no sampler object is bound). The default for both the global 108 and per-sampler seamless filtering state is FALSE. The value of 109 TEXTURE_CUBE_MAP_SEAMLESS is ignored for textures that are note cube maps 110 (TEXTURE_CUBE_MAP or TEXTURE_CUBE_MAP_ARRAY). 111 112 Add one bit per sampler object to represent the seamless cubemap filtering 113 state to the required state. 114 115Additions to the GLX Specification 116 117 None. 118 119Errors 120 121 None. 122 123New State 124 125 Append the following to Table 23.14, Textures (state per texture object): 126 127 Get Value Type Get Command Initial Value Description Sec. Attribute 128 ------------------------------ ------ -------------------- -------- -------------------------- ------ --------- 129 TEXTURE_CUBE_MAP_SEAMLESS n x B GetTexParameter[if]v FALSE Seamless cubemap sampling 8.13.1 texture 130 is enabled. 131 132 Append the following to Table 23.18, Textures (State per Sampler Object): 133 134 Get Value Type Get Command Initial Value Description Sec. 135 ------------------------------ ------ -------------------- -------- -------------------------- ------ 136 TEXTURE_CUBE_MAP_SEAMLESS n x B GetSamplerParameter[if]v FALSE Seamless cubemap sampling 8.13.1 137 is enabled. 138 139New Implementation Dependent State 140 141 None. 142 143Issues 144 145 1) How does this extension interact with the existing global seamless 146 cubemap feature? Explain, in plain English, how seamless filtering gets 147 enabled. 148 149 RESOLVED: These two features are orthogonal and neither requires the 150 other to function. Seamless filtering is enabled for a cube map texture 151 either when TEXTURE_CUBE_MAP_SEAMLESS is enabled globally or when the 152 value of the individual samper's (or texture's) TEXTURE_CUBE_MAP_SEAMLESS 153 parameter is TRUE. The default for both extensions is to leave cube map 154 sampling as described in unextended OpenGL. Thus, an application may use 155 either extension and its behavior will be the same, regardless of the 156 presence of support for or use of the other. 157 158 2) The original AMD extension disallowed TEXTURE_CUBE_MAP_SEAMLESS with 159 textures that aren't CUBE_MAP{_ARRAY}. How does this work with sampler 160 objects that don't have texture types? 161 162 RESOLVED: Removed the error. State is now stored but ignored for non- 163 cube map textures. 164 165Revision History 166 167 Rev. Date Author Changes 168 ---- -------- -------- ----------------------------------------- 169 170 1 15/05/2013 gsellers Create ARB version from AMD version. Update 171 against OpenGL 4.3 core profile 172 specification. Changes from AMD version 173 include: 174 * TEXTURE_CUBE_MAP_SEAMLESS accepted by 175 SamplerParameter* 176 * TEXTURE_CUBE_MAP_SEAMLESS now legal for 177 any texture, but is ignored for 178 non-cube maps. This is required because 179 samplers don't have a target. 180