• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name
2
3    ARB_seamless_cube_map
4
5Name Strings
6
7    GL_ARB_seamless_cube_map
8
9Contributors
10
11    Bill Licea-Kane, AMD
12    Bruce Merry, ARM
13    Graham Sellers, AMD
14    Ian Romanick, Intel
15    Jeff Bolz, NVIDIA
16    Pat Brown, NVIDIA
17    Pierre Boudier, AMD
18
19Contact
20
21    Graham Sellers, AMD (graham.sellers 'at' amd.com)
22
23Notice
24
25    Copyright (c) 2009-2013 The Khronos Group Inc. Copyright terms at
26        http://www.khronos.org/registry/speccopyright.html
27
28Specification Update Policy
29
30    Khronos-approved extension specifications are updated in response to
31    issues and bugs prioritized by the Khronos OpenGL Working Group. For
32    extensions which have been promoted to a core Specification, fixes will
33    first appear in the latest version of that core Specification, and will
34    eventually be backported to the extension document. This policy is
35    described in more detail at
36        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
37
38Status
39
40    Complete. Approved by the ARB on July 3, 2009.
41
42Version
43
44    Last Modified Date:         07/21/2009
45    Author revision:            4
46
47Number
48
49    ARB Extension #65
50
51Dependencies
52
53    OpenGL 1.1 is required.
54
55    ARB_texture_cube_map is required.
56
57    EXT_texture_filter_anisotropic affects the definition of this extension.
58
59    This extension is written against the OpenGL 3.1 Specification.
60
61Overview
62
63    When sampling from cube map textures, a three-dimensional texture
64    coordinate is used to select one of the cube map faces and generate
65    a two dimensional texture coordinate ( s t ), at which a texel is
66    sampled from the determined face of the cube map texture. Each face
67    of the texture is treated as an independent two-dimensional texture,
68    and the generated ( s t ) coordinate is subjected to the same
69    clamping and wrapping rules as for any other two dimensional texture
70    fetch.
71
72    Although it is unlikely that the generated ( s t ) coordinate lies
73    significantly outside the determined cube map face, it is often the
74    case that the locations of the individual elements required during a
75    linear sampling do not lie within the determined face, and their
76    coordinates will therefore be modified by the selected clamping and
77    wrapping rules. This often has the effect of producing seams or
78    other discontinuities in the sampled texture.
79
80    This extension allows implementations to take samples from adjacent
81    cube map faces, providing the ability to create seamless cube maps.
82
83IP Status
84
85    None.
86
87New Procedures and Functions
88
89    None.
90
91New Tokens
92
93    Accepted by the <cap> parameter of Enable, Disable and IsEnabled,
94    and by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv
95    and GetDoublev:
96
97    TEXTURE_CUBE_MAP_SEAMLESS                   0x884F
98
99
100Additions to Chapter 3 of the 3.1 Specification (Rasterization)
101
102    Section 3.8.7, Cube Map Texture Selection, p. 143, change the last
103    paragraph from
104
105    "This new ( s t ) is used to find a texture value in the determined
106     face's two-dimensional texture image using the rules given in
107     sections 3.8.7 through 3.8.9."
108
109    to:
110
111    Seamless Cube Map Filtering
112    ---------------------------
113
114    Seamless cube map filtering is enabled or disabled by calling Enable
115    or Disable, respectively, with the symbolic constant
116    TEXTURE_CUBE_MAP_SEAMLESS.
117
118    When seamless cube map filtering is disabled, the new (s t) is used
119    to find a texture value in the determined face's two-dimensional
120    image using the rules given in sections 3.8.9 through 3.8.10.
121
122    When seamless cube map filtering is enabled, the rules for texel
123    selection in sections 3.8.9 through 3.8.10 are modified so that
124    texture wrap modes are ignored. Instead,
125
126    * If NEAREST filtering is done within a miplevel, always apply wrap
127      mode CLAMP_TO_EDGE.
128    * If LINEAR filtering is done within a miplevel, always apply wrap mode
129      CLAMP_TO_BORDER. Then,
130      o If a texture sample location would lie in the texture border in
131        either u or v, instead select the corresponding texel from the
132        appropriate neighboring face.
133      o If a texture sample location would lie in the texture border in
134        both u and v (in one of the corners of the cube), there is no
135        unique neighboring face from which to extract one texel. The
136        recommended method is to average the values of the three
137        available samples. However, implementations are free to
138        construct this fourth texel in another way, so long as, when the
139        three available samples have the same value, this texel also has
140        that value.
141
142    The required state is one bit indicating whether seamless cube map
143    filtering is enabled or disabled. Initially, it is disabled.
144
145    Add final paragraphs to Section 3.8.7
146
147    "When TEXTURE_MAX_ANISOTROPY_EXT is greater than 1.0, an
148     implementation may sample from the texture at multiple locations in
149     order to produce a filtered texel value. In this case, some of the
150     required samples may lie outside the determined cube map face. If
151     TEXTURE_CUBE_MAP_SEAMLESS is enabled, it is implementation defined
152     as to whether these samples are taken from the determined face, or
153     from the appropriate adjacent cube map face."
154
155Errors
156
157    None.
158
159Dependencies on EXT_texture_filter_anisotropic
160
161    If EXT_texture_filter_anisotropic is not supported, remove the
162    final paragraph added to Section 3.8.6 which references
163    TEXTURE_MAX_ANISOTROPY_EXT.
164
165New State
166
167    In table 6.42, Miscellaneous, p. 279, add the following:
168
169    Get Value                     Type    Get Command           Init Val      Description                  Sec.   Attribute
170    ---------------------------   ------  --------------------  --------      --------------------------   ------ ---------
171    TEXTURE_CUBE_MAP_SEAMLESS       B     IsEnabled             FALSE         Seamless cube map filtering  3.8.6  -
172
173New Implementation Dependent State
174
175    None.
176
177Issues
178
179    1) Should this be a new wrap mode, or a separate state?
180
181       RESOLVED: It cannot be a normal wrap mode because it does not
182       apply per dimension, but rather to a texture as a whole.
183       Therefore, it is a separate state item.
184
185    2) What is the interaction with anisotropic filtering as described
186       in EXT_texture_filter_anisotropic?
187
188       RESOLVED: EXT_texture_filter_anisotropic leaves the
189       implementation of anisotropic filtering implementation defined.
190       Therefore, this extension does the same.
191
192    3) Should this be per-texture, or a global state?
193
194       RESOLVED: While in some cases it may be desirable to mix seamless
195       and non-seamless cube map texture sampling, it is sufficient to
196       leave this spec defining a global state and provide per-texture
197       support in another extension.
198
199Revision History
200
201    Rev.    Date    Author    Changes
202    ----  --------  --------  -----------------------------------------
203     4    07/21/09  Jon Leech Reformat to 80 columns and update
204                              ambiguous sample location to match
205                              the 3.2 spec (bug 5357).
206
207     3    07/20/09  Jon Leech Assign enum value and remove _ARB suffix.
208
209     2    07/01/09  wwlk      Updated per bug 5292.
210                              Re-written against the OpenGL 3.1 specification.
211
212     1    05/07/09  gsellers  Initial draft based on
213                              AMD_texture_cube_face_select
214