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.
