blob: bfae1b6e3a1ed81ea1de03cff4177469561dd343 [file] [log] [blame]
Name
NV_generate_mipmap_sRGB
Name Strings
GL_NV_generate_mipmap_sRGB
Contributors
Contributors to EXT_sRGB
Contributors to EXT_texture_sRGB
Contact
Mathias Heyer, NVIDIA (mheyer 'at' nvidia.com
Status
Complete.
Version
Date: Sept 14, 2012
Number
OpenGL ES Extension #144
Dependencies
This extension requires OpenGL ES 1.0 or greater. It is written based on
the wording of the OpenGL ES 2.0.25 (November 2nd 2010) specification.
This extension requires EXT_sRGB.
Overview
EXT_sRGB requires GenerateMipmap() to throw INVALID_OPERATION on textures
with sRGB encoding. NV_generate_mipmap_sRGB lifts this restriction.
New Procedures and Functions
None
New Tokens
None
Additions to Chapter 3 of the OpenGL ES2.0 Specification (Rasterization)
Modify Section 3.7.11: Mipmap Generation
Remove the following sentence from the end of this section:
"If the format of a texture is sRGB, the error INVALID_OPERATION is
generated."
Errors
Relaxation of INVALID_OPERATION errors
---------------------------------
GenerateMipmap does not throw an error if the format of the texture is sRGB
New Implementation Dependent State
None
Issues
1) How should mipmap generation work for sRGB textures?
RESOLVED: The best way to perform mipmap generation for sRGB
textures is by downsampling the sRGB image in a linear color
space.
This involves converting the RGB components of sRGB texels
in a given texture image level to linear RGB space, filtering
appropriately in that linear RGB space, and then converting the
linear RGB values to sRGB for storage in the downsampled texture
level image.
(Remember alpha, when present, is linear even in sRGB texture
formats.)
The OpenGL specification says "No particular filter algorithm
is required, though a box filter is recommended as the default
filter" meaning there is no requirement for how even non-sRGB
mipmaps should be generated. So while the resolution to this
issue is technically a recommendation, it is however a strongly
advised recommendation.
The rationale for why sRGB textures should be converted to
linear space prior to filtering and converted back to sRGB after
filtering is clear. If an implementation naively simply performed
linear filtering on (non-linear) sRGB components as if they were
in a linear space, the result tends to be a subtle darkening of
the texture images as mipmap generation continues recursively.
This darkening is an inappropriate basis that the resolved
"best way" above would avoid.
Revision History
#01 9/14/2012 Mathias Heyer First draft.