blob: 0991afd62de4f8dcf75f64f15261d62b3ca1d32c [file] [log] [blame]
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
Specification Update Policy
Khronos-approved extension specifications are updated in response to
issues and bugs prioritized by the Khronos OpenGL Working Group. For
extensions which have been promoted to a core Specification, fixes will
first appear in the latest version of that core Specification, and will
eventually be backported to the extension document. This policy is
described in more detail at
https://www.khronos.org/registry/OpenGL/docs/update_policy.php
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.