| 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 |
| |
| 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 <pname> 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. |