| Name |
| |
| EXT_texture_env_combine |
| |
| Name Strings |
| |
| GL_EXT_texture_env_combine |
| |
| Contact |
| |
| Michael Gold (gold 'at' nvidia.com) |
| Tom Frisinger, AMD (tom.frisinger 'at' amd.com) |
| |
| Status |
| |
| Shipping (NVIDIA, ATI) |
| |
| Version |
| |
| $Date$ $Revision$ |
| Last Modified Date: 2006/11/04 02:49:00 Revision: 1.8 |
| |
| Number |
| |
| 158 |
| |
| Dependencies |
| |
| SGI_texture_color_table affects the definition of this extension |
| SGIX_texture_scale_bias affects the definition of this extension |
| |
| Overview |
| |
| New texture environment function COMBINE_EXT allows programmable |
| texture combiner operations, including: |
| |
| REPLACE Arg0 |
| MODULATE Arg0 * Arg1 |
| ADD Arg0 + Arg1 |
| ADD_SIGNED_EXT Arg0 + Arg1 - 0.5 |
| INTERPOLATE_EXT Arg0 * (Arg2) + Arg1 * (1-Arg2) |
| |
| where Arg0, Arg1 and Arg2 are derived from |
| |
| 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 |
| |
| and Arg2 is restricted to the alpha component of the corresponding source. |
| |
| In addition, the result may be scaled by 1.0, 2.0 or 4.0. |
| |
| Issues |
| |
| Should the explicit bias be removed in favor of an implcit bias as |
| part of a ADD_SIGNED_EXT function? |
| |
| - Yes. This pre-scale bias is a special case and will be treated |
| as such. |
| |
| Should the primary color of the incoming fragment be available to |
| all texture environments? Currently it is only available to the |
| texture environment of texture unit 0. |
| |
| - Yes, PRIMARY_COLOR_EXT has been added as an input source. |
| |
| Should textures from other texture units be allowed as sources? |
| |
| - No, not in the base spec. Too many vendors have expressed |
| concerns about the scalability of such functionality. This can |
| be added as a subsequent extension. |
| |
| All of the 1.2 modes except BLEND can be expressed in terms of |
| this extension. Should texture color be allowed as a source for |
| Arg2, so all of the 1.2 modes can be expressed? If so, should all |
| color sources be allowed, to maintain orthogonality? |
| |
| - No, not in the base spec. This can be added as a subsequent |
| extension. |
| |
| 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 |
| |
| COMBINE_EXT 0x8570 |
| |
| Accepted by the <pname> parameter of TexEnvf, TexEnvi, TexEnvfv, |
| and TexEnviv when the <target> parameter value is TEXTURE_ENV |
| |
| COMBINE_RGB_EXT 0x8571 |
| COMBINE_ALPHA_EXT 0x8572 |
| SOURCE0_RGB_EXT 0x8580 |
| SOURCE1_RGB_EXT 0x8581 |
| SOURCE2_RGB_EXT 0x8582 |
| SOURCE0_ALPHA_EXT 0x8588 |
| SOURCE1_ALPHA_EXT 0x8589 |
| SOURCE2_ALPHA_EXT 0x858A |
| OPERAND0_RGB_EXT 0x8590 |
| OPERAND1_RGB_EXT 0x8591 |
| OPERAND2_RGB_EXT 0x8592 |
| OPERAND0_ALPHA_EXT 0x8598 |
| OPERAND1_ALPHA_EXT 0x8599 |
| OPERAND2_ALPHA_EXT 0x859A |
| RGB_SCALE_EXT 0x8573 |
| ALPHA_SCALE |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, |
| and TexEnviv when the <pname> parameter value is COMBINE_RGB_EXT |
| or COMBINE_ALPHA_EXT |
| |
| REPLACE |
| MODULATE |
| ADD |
| ADD_SIGNED_EXT 0x8574 |
| INTERPOLATE_EXT 0x8575 |
| |
| 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, SOURCE0_ALPHA_EXT, |
| SOURCE1_ALPHA_EXT, or SOURCE2_ALPHA_EXT |
| |
| TEXTURE |
| CONSTANT_EXT 0x8576 |
| PRIMARY_COLOR_EXT 0x8577 |
| PREVIOUS_EXT 0x8578 |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, |
| and TexEnviv when the <pname> parameter value is |
| OPERAND0_RGB_EXT or OPERAND1_RGB_EXT |
| |
| 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 or OPERAND1_ALPHA_EXT |
| |
| SRC_ALPHA |
| ONE_MINUS_SRC_ALPHA |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, |
| and TexEnviv when the <pname> parameter value is |
| OPERAND2_RGB_EXT or OPERAND2_ALPHA_EXT |
| |
| SRC_ALPHA |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, |
| and TexEnviv when the <pname> parameter value is RGB_SCALE_EXT or |
| ALPHA_SCALE |
| |
| 1.0 |
| 2.0 |
| 4.0 |
| |
| Additions to Chapter 2 of the GL Specification (OpenGL Operation) |
| |
| None |
| |
| Additions to Chapter 3 of the GL Specification (Rasterization) |
| |
| Added to subsection 3.8.9, before the paragraph describing the |
| state requirements: |
| |
| If the value of TEXTURE_ENV_MODE is COMBINE_EXT, the form of the |
| texture function depends on the values of COMBINE_RGB_EXT and |
| COMBINE_ALPHA_EXT, according to table 3.20. 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]. |
| |
| |
| COMBINE_RGB_EXT or |
| COMBINE_ALPHA_EXT Texture Function |
| ------------------ ---------------- |
| REPLACE Arg0 |
| MODULATE Arg0 * Arg1 |
| ADD Arg0 + Arg1 |
| ADD_SIGNED_EXT Arg0 + Arg1 - 0.5 |
| INTERPOLATE_EXT Arg0 * (Arg2) + Arg1 * (1-Arg2) |
| |
| Table 3.20: COMBINE_EXT texture functions |
| |
| The arguments Arg0, Arg1 and Arg2 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. The relationship is |
| described in tables 3.21 and 3.22. |
| |
| SOURCE<n>_RGB_EXT OPERAND<n>_RGB_EXT Argument |
| ----------------- -------------- -------- |
| 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) |
| |
| Table 3.21: Arguments for COMBINE_RGB_EXT functions |
| |
| SOURCE<n>_ALPHA_EXT OPERAND<n>_ALPHA_EXT Argument |
| ----------------- -------------- -------- |
| 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) |
| |
| Table 3.22: Arguments for COMBINE_ALPHA_EXT functions |
| |
| The mapping of texture components to source components is |
| summarized in Table 3.23. In the following table, At, Lt, It, Rt, |
| Gt and Bt are the filtered texel values. |
| |
| Base Internal Format RGB Values Alpha Value |
| -------------------- ---------- ----------- |
| ALPHA 0, 0, 0 At |
| LUMINANCE Lt, Lt, Lt 1 |
| LUMINANCE_ALPHA Lt, Lt, Lt At |
| INTENSITY It, It, It It |
| RGB Rt, Gt, Bt 1 |
| RGBA Rt, Gt, Bt At |
| |
| Table 3.23: Correspondence of texture components to source |
| components for COMBINE_RGB_EXT and COMBINE_ALPHA_EXT arguments |
| |
| Additions to Chapter 4 of the GL Specification (Per-Fragment Operations |
| and the Framebuffer) |
| |
| None |
| |
| Additions to Chapter 5 of the GL Specification (Special Functions) |
| |
| None |
| |
| Additions to Chapter 6 of the GL Specification (State and State Requests) |
| |
| None |
| |
| Additions to the GLX Specification |
| |
| None |
| |
| GLX Protocol |
| |
| None |
| |
| Errors |
| |
| INVALID_ENUM is generated if <params> value for COMBINE_RGB_EXT or |
| COMBINE_ALPHA_EXT is not one of REPLACE, MODULATE, ADD, |
| ADD_SIGNED_EXT, or INTERPOLATE_EXT. |
| |
| INVALID_ENUM is generated if <params> value for SOURCE0_RGB_EXT, |
| SOURCE1_RGB_EXT, SOURCE2_RGB_EXT, SOURCE0_ALPHA_EXT, |
| SOURCE1_ALPHA_EXT or SOURCE2_ALPHA_EXT is not one of TEXTURE, |
| CONSTANT_EXT, PRIMARY_COLOR_EXT or PREVIOUS_EXT. |
| |
| INVALID_ENUM is generated if <params> value for OPERAND0_RGB_EXT |
| or OPERAND1_RGB_EXT 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 |
| or OPERAND1_ALPHA_EXT is not one of SRC_ALPHA or |
| ONE_MINUS_SRC_ALPHA. |
| |
| INVALID_ENUM is generated if <params> value for OPERAND2_RGB_EXT |
| or OPERAND2_ALPHA_EXT is not SRC_ALPHA. |
| |
| INVALID_VALUE is generated if <params> value for RGB_SCALE_EXT or |
| ALPHA_SCALE is not one of 1.0, 2.0, or 4.0. |
| |
| Dependencies on SGI_texture_color_table |
| |
| If SGI_texture_color_table is implemented, the expanded Rt, Gt, |
| Bt, and At values are used directly instead of the expansion |
| described by Table 3.23. |
| |
| Dependencies on SGIX_texture_scale_bias |
| |
| If SGIX_texture_scale_bias is implemented, the expanded Rt, Gt, |
| Bt, and At values are used directly instead of the expansion |
| described by Table 3.23. |
| |
| New State |
| |
| Get Value Get Command Type Initial Value Attribute |
| --------- ----------- ---- ------------- --------- |
| COMBINE_RGB_EXT GetTexEnviv n x Z4 MODULATE texture |
| COMBINE_ALPHA_EXT GetTexEnviv n x Z4 MODULATE texture |
| SOURCE0_RGB_EXT GetTexEnviv n x Z3 TEXTURE texture |
| SOURCE1_RGB_EXT GetTexEnviv n x Z3 PREVIOUS_EXT texture |
| SOURCE2_RGB_EXT GetTexEnviv n x Z3 CONSTANT_EXT texture |
| SOURCE0_ALPHA_EXT GetTexEnviv n x Z3 TEXTURE texture |
| SOURCE1_ALPHA_EXT GetTexEnviv n x Z3 PREVIOUS_EXT texture |
| SOURCE2_ALPHA_EXT GetTexEnviv n x Z3 CONSTANT_EXT texture |
| OPERAND0_RGB_EXT GetTexEnviv n x Z6 SRC_COLOR texture |
| OPERAND1_RGB_EXT GetTexEnviv n x Z6 SRC_COLOR texture |
| OPERAND2_RGB_EXT GetTexEnviv n x Z1 SRC_ALPHA texture |
| OPERAND0_ALPHA_EXT GetTexEnviv n x Z4 SRC_ALPHA texture |
| OPERAND1_ALPHA_EXT GetTexEnviv n x Z4 SRC_ALPHA texture |
| OPERAND2_ALPHA_EXT GetTexEnviv n x Z1 SRC_ALPHA texture |
| RGB_SCALE_EXT GetTexEnvfv n x R3 1.0 texture |
| ALPHA_SCALE GetTexEnvfv n x R3 1.0 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". |
| |
| GeForce 6 Series and later GPUs (NV40 and on) support "scale by 4.0" |
| properly. |
| |
| Revision History |
| |
| 2/22/00 mjk - added NVIDIA Implementation Details |