Name ARB_seamless_cubemap_per_texture Name Strings GL_ARB_seamless_cubemap_per_texture Contributors Pierre Boudier Graham Sellers Ahmet Oguz Akyuz Contact Graham Sellers, AMD (graham.sellers 'at' amd.com) 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: 15/05/2013 Author revision: 1 Number ARB Extension #155 Dependencies OpenGL 3.2 is required. This extension is written against the OpenGL 4.3 (Core Profile) Specification. Overview In unextended OpenGL, cube maps are treated as sets of six, independent texture images. Once a face is selected from the set, it is treated exactly as any other two-dimensional texture would be. When sampling linearly from the texture, all of the individual texels that would be used to to create the final, bilinear sample values are taken from the same cube face. The normal, two-dimensional texture coordinate wrapping modes are honored. This sometimes causes seams to appear in cube maps. ARB_seamless_cube_map (and subsequently, OpenGL 3.2) addresses this issue by providing a mechanism whereby an implementation could take each of the taps of a bilinear sample from a different face, spanning face boundaries and providing seamless filtering from cube map textures. However, in ARB_seamless_cube_map, this feature was exposed as a global state, affecting all bound cube map textures. It was not possible to mix seamless and per-face cube map sampling modes during sampling. Furthermore, if an application included cube maps that were meant to be sampled seamlessly and non-seamlessly, it would have to track this state and enable or disable seamless cube map sampling as needed. This extension addresses this issue and provides an orthogonal method for allowing an implementation to provide a per-texture setting for enabling seamless sampling from cube maps. IP Status None. New Procedures and Functions None. New Tokens Accepted by the parameter of TexParameter{if}, TexParameter{if}v, GetTexParameter{if}v, SamplerParameter{if}, SamplerParameter{if}v, and GetSamplerParameter{if}v: TEXTURE_CUBE_MAP_SEAMLESS 0x884F Additions to Chapter 8 of the OpenGL Core Profile Specification (Textures and Samplers) Modify the first paragraph of Section 8.13.1, "Seamless Cubemap Filtering" as follows: Seamless cubemap filtering is enabled or disabled globally by calling Enable or Disable, respectively, with the symbolic constant TEXTURE_CUBE_MAP_SEAMLESS. It may also be enabled for a specific texture unit by setting the TEXTURE_CUBE_MAP_SEAMLESS sampler parameter to TRUE for the sampler object bound to that texture unit (or for the texture object itself, if no sampler object is bound). The default for both the global and per-sampler seamless filtering state is FALSE. The value of TEXTURE_CUBE_MAP_SEAMLESS is ignored for textures that are note cube maps (TEXTURE_CUBE_MAP or TEXTURE_CUBE_MAP_ARRAY). Add one bit per sampler object to represent the seamless cubemap filtering state to the required state. Additions to the GLX Specification None. Errors None. New State Append the following to Table 23.14, Textures (state per texture object): Get Value Type Get Command Initial Value Description Sec. Attribute ------------------------------ ------ -------------------- -------- -------------------------- ------ --------- TEXTURE_CUBE_MAP_SEAMLESS n x B GetTexParameter[if]v FALSE Seamless cubemap sampling 8.13.1 texture is enabled. Append the following to Table 23.18, Textures (State per Sampler Object): Get Value Type Get Command Initial Value Description Sec. ------------------------------ ------ -------------------- -------- -------------------------- ------ TEXTURE_CUBE_MAP_SEAMLESS n x B GetSamplerParameter[if]v FALSE Seamless cubemap sampling 8.13.1 is enabled. New Implementation Dependent State None. Issues 1) How does this extension interact with the existing global seamless cubemap feature? Explain, in plain English, how seamless filtering gets enabled. RESOLVED: These two features are orthogonal and neither requires the other to function. Seamless filtering is enabled for a cube map texture either when TEXTURE_CUBE_MAP_SEAMLESS is enabled globally or when the value of the individual samper's (or texture's) TEXTURE_CUBE_MAP_SEAMLESS parameter is TRUE. The default for both extensions is to leave cube map sampling as described in unextended OpenGL. Thus, an application may use either extension and its behavior will be the same, regardless of the presence of support for or use of the other. 2) The original AMD extension disallowed TEXTURE_CUBE_MAP_SEAMLESS with textures that aren't CUBE_MAP{_ARRAY}. How does this work with sampler objects that don't have texture types? RESOLVED: Removed the error. State is now stored but ignored for non- cube map textures. Revision History Rev. Date Author Changes ---- -------- -------- ----------------------------------------- 1 15/05/2013 gsellers Create ARB version from AMD version. Update against OpenGL 4.3 core profile specification. Changes from AMD version include: * TEXTURE_CUBE_MAP_SEAMLESS accepted by SamplerParameter* * TEXTURE_CUBE_MAP_SEAMLESS now legal for any texture, but is ignored for non-cube maps. This is required because samplers don't have a target.