• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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