| Name |
| |
| NV_texture_expand_normal |
| |
| Name Strings |
| |
| GL_NV_texture_expand_normal |
| |
| Contact |
| |
| Pat Brown, NVIDIA Corporation (pbrown 'at' nvidia.com) |
| |
| Notice |
| |
| Copyright NVIDIA Corporation, 2002. |
| |
| IP Status |
| |
| NVIDIA Proprietary. |
| |
| Status |
| |
| Implemented, November 2002 |
| Shipping in Release 40 NVIDIA driver for CineFX hardware, January 2003. |
| |
| Version |
| |
| Last Modified: 2005/06/16 |
| NVIDIA Revision: 4 |
| |
| Number |
| |
| 286 |
| |
| Support |
| |
| NVIDIA plans to discontinue this extension for future GPU |
| architectures. Support for NV3x (GeForce FX), NV4x (GeForce 6 |
| Series), and G7x (GeForce 7x00) architectures will continue. |
| |
| As an alternative to the EXT_texture_expand_normal functionality, |
| developers can either use the signed fixed-point texture formats |
| provided by NV_texture_shader (such as GL_SIGNED_RGBA8_NV) or perform |
| the "expand normal" operation with shader instructions (typically |
| just a MAD).. |
| |
| Dependencies |
| |
| OpenGL 1.1 is required. |
| |
| Overview |
| |
| This extension provides a remapping mode where unsigned texture |
| components (in the range [0,1]) can be treated as though they |
| contained signed data (in the range [-1,+1]). This allows |
| applications to easily encode signed data into unsigned texture |
| formats. |
| |
| The functionality of this extension is nearly identical to the |
| EXPAND_NORMAL_NV remapping mode provided in the NV_register_combiners |
| extension, although it applies even if register combiners are used. |
| |
| Issues |
| |
| (1) When is the remapping applied? |
| |
| RESOLVED: It would be possible to remap after loading each texel, |
| remap after all filtering is done, or something in between. |
| Ignoring implementation-dependent rounding errors, it really |
| doesn't matter. |
| |
| The spec language says that the remapping is applied after filtering |
| texel values within each level. For LINEAR_MIPMAP_LINEAR, this |
| means that the remapping is "done" twice. This approach was chosen |
| solely to simplify the spec language, and does not necessarily |
| reflect NVIDIA's implementation. |
| |
| (2) Should the remapping mode apply to textures with signed |
| components? |
| |
| RESOLVED: No -- the EXPAND_NORMAL_NV mapping is ignored for |
| such textures. |
| |
| (3) NV_texture_shader provides several internal formats with a mix |
| of signed and unsigned components. For example, the base formats |
| DSDT_MAG_NV, and DSDT_MAG_INTENSITY_NV have this property, and |
| there is a variant of RGBA where the RGB components are signed, |
| but the A component is unsigned. What should happen in this case? |
| |
| RESOLVED: The unsigned components are remapped; the signed |
| components are unmodified. |
| |
| (4) What should be said about signed fixed-point precision and range |
| of actual implementations? |
| |
| RESOLVED: The fundamental problem is that it is not possible |
| to derive a linear mapping taking unsigned values that exactly |
| represents -1.0, 0.0, and +1.0. |
| |
| The mapping chosen for current NVIDIA implementations does not |
| exactly represent +1.0. For an n-bit fixed-point component, |
| 0 maps to -1.0, 2^(n-1) maps to 0.0, and 2^n-1 (maximum value) |
| maps to 1.0 - 1/(2^(n-1)). This same conversion is applied to |
| stored textures using the signed texture types in NV_texture_shader. |
| |
| This specification is written using the conventional OpenGL mapping |
| where -1.0 and +1.0 can be represented exactly, but 0.0 can not. |
| The specification is simpler and avoids precision-dependent language |
| describing the mapping. We expect some leeway in how the remapping |
| is applied. |
| |
| This issue is discussed in more detail in the issues section |
| of the NV_texture_shader specification (the question is phrased |
| identically). |
| |
| (5) Are texture border color components remapped? |
| |
| RESOLVED: Yes -- if the border values are used for filtering, |
| border color components are remapped identically to normal texel |
| components. |
| |
| New Procedures and Functions |
| |
| None. |
| |
| New Tokens |
| |
| Accepted by the <pname> parameters of TexParameteri, |
| TexParameteriv, TexParameterf, TexParameterfv, GetTexParameteri, |
| and GetTexParameteriv: |
| |
| TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F |
| |
| |
| Additions to Chapter 2 of the OpenGL 1.4 Specification (OpenGL Operation) |
| |
| None. |
| |
| |
| Additions to Chapter 3 of the OpenGL 1.4 Specification (Rasterization) |
| |
| Modify Section 3.8.4, Texture Parameters, p.135 |
| |
| (modify Table 3.19, p. 137) |
| |
| Name Type Legal Values |
| ----------------- ---- ---------------------- |
| TEXTURE_UNSIGNED_ enum EXPAND_NORMAL_NV, NONE |
| REMAP_MODE_NV |
| |
| |
| Modify Section 3.8.8, Texture Minification, p.140 |
| |
| (add after the last paragraph before the "Mipmapping" subsection, |
| p. 144) |
| |
| After the texture filter is applied, the filtered texture values are |
| optionally rescaled, converting unsigned texture components encoded |
| in the range [0,1] to signed values in the range [-1,+1]. If the |
| texture parameter TEXTURE_UNSIGNED_REMAP_MODE_NV is EXPAND_NORMAL_NV, |
| the filtered values for each unsigned component of the texture is |
| transformed by |
| |
| tau = 2 * tau - 1. |
| |
| For components |
| |
| Additions to Chapter 4 of the OpenGL 1.4 Specification (Per-Fragment |
| Operations and the Frame Buffer) |
| |
| None. |
| |
| |
| Additions to Chapter 5 of the OpenGL 1.4 Specification (Special Functions) |
| |
| None. |
| |
| |
| Additions to Chapter 6 of the OpenGL 1.4 Specification (State and |
| State Requests) |
| |
| None. |
| |
| |
| Additions to Appendix A of the OpenGL 1.4 Specification (Invariance) |
| |
| None. |
| |
| |
| Additions to the AGL/GLX/WGL Specifications |
| |
| None. |
| |
| GLX Protocol |
| |
| None. |
| |
| |
| Errors |
| |
| None. |
| |
| |
| New State |
| |
| (add to table 6.15, p. 230) |
| Initial |
| Get Value Type Get Command Value Description Sec. Attribute |
| ------------------------------ ---- ----------------- ------- ------------------ ----- --------- |
| TEXTURE_UNSIGNED_REMAP_MODE_NV nxZ2 GetTexParameteriv NONE unsigned component 3.8.8 texture |
| remapping |
| |
| |
| Revision History |
| |
| Rev. Date Author Changes |
| ---- -------- -------- -------------------------------------------- |
| 4 06/14/05 mjk Add to-be-discontinued "Status" message and |
| discussion of alternatives. |
| |
| 3 10/07/02 pbrown Minor wording changes on precision issues -- this |
| remapping should produce roughly the same results |
| as storing the texture in signed form. |
| |
| 2 10/07/02 pbrown Added issue about where the remapping is applied, |
| and what happens to border colors. |
| |
| 1 10/07/02 pbrown Initial revision. |