| 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. |