Name
AMD_seamless_cubemap_per_texture
Name Strings
GL_AMD_seamless_cubemap_per_texture
Contributors
Pierre Boudier
Graham Sellers
Ahmet Oguz Akyuz
Contact
Graham Sellers, AMD (graham.sellers 'at' amd.com)
Status
In Progress.
Version
Last Modified Date: 08/18/2009
Author revision: 6
Number
383
Dependencies
OpenGL 1.1 is required.
ARB_texture_cube_map is required.
ARB_seamless_cube_map affects the definition of this extension.
This extension is written against the OpenGL 1.5 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 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
multisampling. 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 TexParameterf, TexParameteri,
TexParameterfv, TexParameteriv, GetTexParameterfv, and GetTexParameteriv:
TEXTURE_CUBE_MAP_SEAMLESS_ARB 0x884F (Previously defined in
ARB_seamless_cubemap)
Additions to Chapter 2 of the 1.5 Specification (OpenGL Operation)
None.
Additions to Chapter 3 of the 1.5 Specification (Rasterization)
Section 3.8.4, Texture Parameters, p. 144, append table 3.19 with the
following:
Name Type Legal Values
------------------------------ ----- --------------------
TEXTURE_CUBE_MAP_SEAMLESS_ARB boolean FALSE,
TRUE
Section 3.8.4, Texture Parameters, p. 143, append the last paragraph with:
"The TEXTURE_CUBE_MAP_SEAMLESS_ARB parameter is specific to cube maps
and may be used to control the way that the GL handles sampling from
coordinates that lie outside the determined cube map face (see section
3.8.6)."
Section 3.8.6, Cube Map Texture Selection, p. 145, change the last
paragraph from
"This new ( s t ) is used to find a texture value in the determined face's
two-dimensional texture image using the rules given in sections 3.8.7
through 3.8.9."
to:
"If TEXTURE_CUBE_MAP_SEAMLESS_ARB is disabled globally and the value of the
the texture's TEXTURE_CUBE_MAP_SEAMLESS_ARB parameter is FALSE, the new
( s t ) is used to find a texture value in the determined face's
two-dimensional image using the rules given in sections 3.8.7 through
3.8.9. If TEXTURE_CUBE_MAP_SEAMLESS_ARB is emabled globally or the value
of the texture's TEXTURE_CUBE_MAP_SEAMLESS_ARB parameter is TRUE, seamless
cube map sampling is enabled, and texels are read from adjacent faces as
described in the ARB_seamless_cube_map extension."
Additions to Chapter 4 of the 1.5 Specification (Per-Fragment Operations
and the Frame Buffer)
None.
Additions to Chapter 5 of the 1.5 Specification (Special Functions)
None.
Additions to Chapter 6 of the 1.5 Specification (State and State Requests)
Section 6.1.3, Enumerated Queries, p. 216, modify the first paragraph
on page 216 to read:
"... For GetTexParameter, value must be either TEXTURE_RESIDENT or one
of the symbolic values in table 3.19. The TEXTURE_CUBE_MAP_SEAMLESS_ARB
value may only be used when target is TEXTURE_CUBE_MAP. The lod argument
to GetTexLevelParameter ..."
Additions to the GLX Specification
None.
Errors
INVALID_ENUM is generated by TexParameter if is
TEXTURE_CUBE_MAP_SEAMLESS_ARB and is not TEXTURE_CUBE_MAP.
INVALID_ENUM is generated by TexParameter if is TEXTURE_CUBE_MAP,
is TEXTURE_CUBE_MAP_SEAMLESS_ARB and is not either TRUE
or FALSE.
INVALID_ENUM is generated by GetTexParameter if is
TEXTURE_CUBE_MAP_SEAMLESS_ARB and is not TEXTURE_CUBE_MAP.
Dependencies on ARB_seamless_cube_map
If ARB_seamless_cube_map is not supported, the value of the
TEXTURE_CUBE_MAP_SEAMLESS_ARB token is still used by this extension.
However, seamless cubemap filtering can only be enabled or disabled on a
per-texture basis as glEnable and glDisable will not accept
TEXTURE_CUBE_MAP_SEAMLESS_ARB. Even if ARB_seamless_cube_map is not
supported, the behavior of seamless cube map sampling is as described in
that extension. The logic to enable seamless filtering will behave as if
TEXTURE_CUBE_MAP_SEAMLESS_ARB were disabled (the default state).
New State
In table 6.16, Texture Objects, p. 242, add the following:
Get Value Type Get Command Init Val Description Sec. Attribute
------------------------------ ------ -------------------- -------- -------------------------- ------ ---------
TEXTURE_CUBE_MAP_SEAMLESS_ARB n x B GetTexParameter[if]v FALSE Seamless cubemap sampling 3.8.6 texture
is enabled.
New Implementation Dependent State
None.
Issues
1) How does this extension affect ARB_seamless_cube_map? Which takes
priority? Explain, in plain English, how seamless filtering gets enabled.
RESOLVED: These two extensions are orthogonal and neither requires the
other to function. Seamless filtering is enabled for a cube map texture
either when TEXTURE_CUBE_MAP_SEAMLESS_ARB is enabled globally or when the
value of the individual texture's TEXTURE_CUBE_MAP_SEAMLESS_ARB 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.
Revision History
Rev. Date Author Changes
---- -------- -------- -----------------------------------------
6 08/18/09 gsellers Renamed from AMD_texture_cube_face_select to
AMD_seamless_cubemap_per_texture to better follow
ARB version.
Use ARB token, GL_TRUE and GL_FALSE rather than
SAME_FACE and NEXT_FACE.
Change type of texture parameter to boolean.
Change wording of resolution to issue 1 to reflect
the new token names.
5 05/08/09 gsellers Large rewrite after splitting global and
per-texture support into two extensions.
4 05/05/09 gsellers Change token names for consistency. Include
interaction with EXT_texture_filter_anisotropic.
3 04/09/09 gsellers Fix 'selected' language. Suggest behavior for
cases where ( s, t ) lies directly at a cube map
corner
2 04/07/09 gsellers Minor updates
1 04/06/09 gsellers Initial draft