| Name |
| |
| NV_texture_env_combine4 |
| |
| Name Strings |
| |
| GL_NV_texture_env_combine4 |
| |
| Contact |
| |
| Michael Gold, NVIDIA Corporation (gold 'at' nvidia.com) |
| |
| Notice |
| |
| Copyright NVIDIA Corporation, 1999, 2000, 2001. |
| |
| IP Status |
| |
| NVIDIA Proprietary. |
| |
| Version |
| |
| NVIDIA date: January 18, 2001 |
| Version: 14 |
| |
| Number |
| |
| 195 |
| |
| Dependencies |
| |
| EXT_texture_env_combine is required and is modified by this extension |
| ARB_multitexture affects the definition of this extension |
| |
| Overview |
| |
| New texture environment function COMBINE4_NV allows programmable |
| texture combiner operations, including |
| |
| ADD Arg0 * Arg1 + Arg2 * Arg3 |
| ADD_SIGNED_EXT Arg0 * Arg1 + Arg2 * Arg3 - 0.5 |
| |
| where Arg0, Arg1, Arg2 and Arg3 are derived from |
| |
| ZERO the value 0 |
| PRIMARY_COLOR_EXT primary color of incoming fragment |
| TEXTURE texture color of corresponding texture unit |
| CONSTANT_EXT texture environment constant color |
| PREVIOUS_EXT result of previous texture environment; on |
| texture unit 0, this maps to PRIMARY_COLOR_EXT |
| TEXTURE<n>_ARB texture color of the <n>th texture unit |
| |
| In addition, the result may be scaled by 1.0, 2.0 or 4.0. |
| |
| Issues |
| |
| None |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, and |
| TexEnviv when the <pname> parameter value is TEXTURE_ENV_MODE |
| |
| COMBINE4_NV 0x8503 |
| |
| Accepted by the <pname> parameter of GetTexEnvfv, GetTexEnviv, |
| TexEnvf, TexEnvi, TexEnvfv, and TexEnviv when the <target> parameter |
| value is TEXTURE_ENV |
| |
| SOURCE3_RGB_NV 0x8583 |
| SOURCE3_ALPHA_NV 0x858B |
| OPERAND3_RGB_NV 0x8593 |
| OPERAND3_ALPHA_NV 0x859B |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, and |
| TexEnviv when the <pname> parameter value is SOURCE0_RGB_EXT, |
| SOURCE1_RGB_EXT, SOURCE2_RGB_EXT, SOURCE3_RGB_NV, SOURCE0_ALPHA_EXT, |
| SOURCE1_ALPHA_EXT, SOURCE2_ALPHA_EXT, or SOURCE3_ALPHA_NV |
| |
| ZERO |
| TEXTURE<n>_ARB |
| |
| where <n> is in the range 0 to NUMBER_OF_TEXTURE_UNITS_ARB-1. |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, and |
| TexEnviv when the <pname> parameter value is OPERAND0_RGB_EXT, |
| OPERAND1_RGB_EXT, OPERAND2_RGB_EXT or OPERAND3_RGB_NV |
| |
| SRC_COLOR |
| ONE_MINUS_SRC_COLOR |
| SRC_ALPHA |
| ONE_MINUS_SRC_ALPHA |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, and |
| TexEnviv when the <pname> parameter value is OPERAND0_ALPHA_EXT, |
| OPERAND1_ALPHA_EXT, OPERAND2_ALPHA_EXT, or OPERAND3_ALPHA_NV |
| |
| SRC_ALPHA |
| ONE_MINUS_SRC_ALPHA |
| |
| Additions to Chapter 2 of the OpenGL 1.2 Specification (OpenGL Operation) |
| |
| None |
| |
| Additions to Chapter 3 of the OpenGL 1.2 Specification (Rasterization) |
| |
| Added to subsection 3.8.9, before the paragraph describing the state |
| requirements: |
| |
| If the value of TEXTURE_ENV_MODE is COMBINE4_NV, the form of the |
| texture function depends on the values of COMBINE_RGB_EXT and |
| COMBINE_ALPHA_EXT, according to table 3.21. The RGB and ALPHA results |
| of the texture function are then multiplied by the values of |
| RGB_SCALE_EXT and ALPHA_SCALE, respectively. The results are clamped |
| to [0,1]. If the value of COMBINE_RGB_EXT or COMBINE_ALPHA_EXT is not |
| one of the listed values, the result is undefined. |
| |
| COMBINE_RGB_EXT or |
| COMBINE_ALPHA_EXT Texture Function |
| ------------------ ---------------- |
| ADD Arg0 * Arg1 + Arg2 * Arg3 |
| ADD_SIGNED_EXT Arg0 * Arg1 + Arg2 * Arg3 - 0.5 |
| |
| Table 3.21: COMBINE4_NV texture functions |
| |
| The arguments Arg0, Arg1, Arg2 and Arg3 are determined by the values |
| of SOURCE<n>_RGB_EXT, SOURCE<n>_ALPHA_EXT, OPERAND<n>_RGB_EXT and |
| OPERAND<n>_ALPHA_EXT. In the following two tables, Ct and At are the |
| filtered texture RGB and alpha values; Cc and Ac are the texture |
| environment RGB and alpha values; Cf and Af are the RGB and alpha of |
| the primary color of the incoming fragment; and Cp and Ap are the RGB |
| and alpha values resulting from the previous texture environment. On |
| texture environment 0, Cp and Ap are identical to Cf and Af, |
| respectively. Ct<n> and At<n> are the filtered texture RGB and alpha |
| values from the texture bound to the <n>th texture unit. If the <n>th |
| texture unit is disabled, the value of each component is 1. The |
| relationship is described in tables 3.22 and 3.23. |
| |
| SOURCE<n>_RGB_EXT OPERAND<n>_RGB_EXT Argument |
| ----------------- -------------- -------- |
| ZERO SRC_COLOR 0 |
| ONE_MINUS_SRC_COLOR 1 |
| SRC_ALPHA 0 |
| ONE_MINUS_SRC_ALPHA 1 |
| TEXTURE SRC_COLOR Ct |
| ONE_MINUS_SRC_COLOR (1-Ct) |
| SRC_ALPHA At |
| ONE_MINUS_SRC_ALPHA (1-At) |
| CONSTANT_EXT SRC_COLOR Cc |
| ONE_MINUS_SRC_COLOR (1-Cc) |
| SRC_ALPHA Ac |
| ONE_MINUS_SRC_ALPHA (1-Ac) |
| PRIMARY_COLOR_EXT SRC_COLOR Cf |
| ONE_MINUS_SRC_COLOR (1-Cf) |
| SRC_ALPHA Af |
| ONE_MINUS_SRC_ALPHA (1-Af) |
| PREVIOUS_EXT SRC_COLOR Cp |
| ONE_MINUS_SRC_COLOR (1-Cp) |
| SRC_ALPHA Ap |
| ONE_MINUS_SRC_ALPHA (1-Ap) |
| TEXTURE<n>_ARB SRC_COLOR Ct<n> |
| ONE_MINUS_SRC_COLOR (1-Ct<n>) |
| SRC_ALPHA At<n> |
| ONE_MINUS_SRC_ALPHA (1-At<n>) |
| |
| Table 3.22: Arguments for COMBINE_RGB_EXT functions |
| |
| SOURCE<n>_ALPHA_EXT OPERAND<n>_ALPHA_EXT Argument |
| ----------------- -------------- -------- |
| ZERO SRC_ALPHA 0 |
| ONE_MINUS_SRC_ALPHA 1 |
| TEXTURE SRC_ALPHA At |
| ONE_MINUS_SRC_ALPHA (1-At) |
| CONSTANT_EXT SRC_ALPHA Ac |
| ONE_MINUS_SRC_ALPHA (1-Ac) |
| PRIMARY_COLOR_EXT SRC_ALPHA Af |
| ONE_MINUS_SRC_ALPHA (1-Af) |
| PREVIOUS_EXT SRC_ALPHA Ap |
| ONE_MINUS_SRC_ALPHA (1-Ap) |
| TEXTURE<n>_ARB SRC_ALPHA At<n> |
| ONE_MINUS_SRC_ALPHA (1-At<n>) |
| |
| Table 3.23: Arguments for COMBINE_ALPHA_EXT functions |
| |
| Additions to Chapter 4 of the OpenGL 1.2 Specification (Per-Fragment Operations |
| and the Framebuffer) |
| |
| None |
| |
| Additions to Chapter 5 of the OpenGL 1.2 Specification (Special Functions) |
| |
| None |
| |
| Additions to Chapter 6 of the OpenGL 1.2 Specification (State and State Requests) |
| |
| None |
| |
| Additions to the AGL/GLX/WGL Specifications |
| |
| None |
| |
| GLX Protocol |
| |
| None |
| |
| Errors |
| |
| INVALID_ENUM is generated if <params> value for SOURCE0_RGB_EXT, |
| SOURCE1_RGB_EXT, SOURCE2_RGB_EXT, SOURCE3_RGB_NV, SOURCE0_ALPHA_EXT, |
| SOURCE1_ALPHA_EXT, SOURCE2_ALPHA_EXT or SOURCE3_ALPHA_NV is not one of |
| ZERO, TEXTURE, CONSTANT_EXT, PRIMARY_COLOR_EXT, PREVIOUS_EXT or |
| TEXTURE<n>_ARB, where <n> is in the range 0 to |
| NUMBER_OF_TEXTURE_UNITS_ARB-1. |
| |
| INVALID_ENUM is generated if <params> value for OPERAND0_RGB_EXT, |
| OPERAND1_RGB_EXT, OPERAND2_RGB_EXT or OPERAND3_RGB_NV is not one of |
| SRC_COLOR, ONE_MINUS_SRC_COLOR, SRC_ALPHA or ONE_MINUS_SRC_ALPHA. |
| |
| INVALID_ENUM is generated if <params> value for OPERAND0_ALPHA_EXT |
| OPERAND1_ALPHA_EXT, OPERAND2_ALPHA_EXT, or OPERAND3_ALPHA_NV is not |
| one of SRC_ALPHA or ONE_MINUS_SRC_ALPHA. |
| |
| Modifications to EXT_texture_env_combine |
| |
| This extension relaxes the restrictions on SOURCE<n>_RGB_EXT, |
| SOURCE<n>_ALPHA_EXT, OPERAND<n>_RGB_EXT and OPERAND<n>_ALPHA_EXT for |
| use with EXT_texture_env_combine. All params specified by Table 3.22 |
| and Table 3.23 are valid. |
| |
| Dependencies on ARB_multitexture |
| |
| If ARB_multitexture is not implemented, all references to |
| TEXTURE<n>_ARB and NUMBER_OF_TEXTURE_UNITS_ARB are deleted. |
| |
| New State |
| |
| Get Value Get Command Type Initial Value Attribute |
| --------- ----------- ---- ------------- --------- |
| SOURCE3_RGB_NV GetTexEnviv n x Z5+n ZERO texture |
| SOURCE3_ALPHA_NV GetTexEnviv n x Z5+n ZERO texture |
| OPERAND3_RGB_NV GetTexEnviv n x Z2 ONE_MINUS_SRC_COLOR texture |
| OPERAND3_ALPHA_NV GetTexEnviv n x Z2 ONE_MINUS_SRC_ALPHA texture |
| |
| New Implementation Dependent State |
| |
| None |
| |
| NVIDIA Implementation Details |
| |
| Because of a hardware limitation, TNT, TNT2, GeForce, and Quadro |
| treat "scale by 4.0" with the COMBINE_RGB_EXT or COMBINE_ALPHA_EXT |
| mode of ADD_SIGNED_EXT as "scale by 2.0". |
| |
| Revision History |
| |
| 2/22/00 mjk - added NVIDIA Implementation Details |
| |