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.