| Name |
| |
| ARB_texture_env_combine |
| |
| Name Strings |
| |
| GL_ARB_texture_env_combine |
| |
| Contact |
| |
| Bimal Poddar, Intel (bimal.poddar 'at' intel.com) |
| Michael Gold, NVIDIA (gold 'at' nvidia.com) |
| Tom Frisinger, AMD (tom.frisinger 'at' amd.com) |
| Rick Hammerstone, AMD (rick.hammerstone 'at' amd.com) |
| |
| Notice |
| |
| Copyright (c) 2001-2013 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Specification Update Policy |
| |
| Khronos-approved extension specifications are updated in response to |
| issues and bugs prioritized by the Khronos OpenGL Working Group. For |
| extensions which have been promoted to a core Specification, fixes will |
| first appear in the latest version of that core Specification, and will |
| eventually be backported to the extension document. This policy is |
| described in more detail at |
| https://www.khronos.org/registry/OpenGL/docs/update_policy.php |
| |
| Status |
| |
| Complete. Approved by ARB on February 16, 2001. |
| |
| Version |
| |
| Last modified date: 2006/11/04 |
| |
| Number |
| |
| ARB Extension #17 |
| |
| Dependencies |
| |
| This extension is written against the OpenGL 1.2.1 Specification. |
| OpenGL 1.1 and ARB_multitexture are required for this extension. |
| |
| Overview |
| |
| New texture environment function COMBINE_ARB allows programmable |
| texture combiner operations, including: |
| |
| REPLACE Arg0 |
| MODULATE Arg0 * Arg1 |
| ADD Arg0 + Arg1 |
| ADD_SIGNED_ARB Arg0 + Arg1 - 0.5 |
| SUBTRACT_ARB Arg0 - Arg1 |
| INTERPOLATE_ARB Arg0 * (Arg2) + Arg1 * (1-Arg2) |
| |
| where Arg0, Arg1 and Arg2 are derived from |
| |
| PRIMARY_COLOR_ARB primary color of incoming fragment |
| TEXTURE texture color of corresponding texture unit |
| CONSTANT_ARB texture environment constant color |
| PREVIOUS_ARB result of previous texture environment; on |
| texture unit 0, this maps to PRIMARY_COLOR_ARB |
| |
| In addition, the result may be scaled by 1.0, 2.0 or 4.0. |
| |
| Issues |
| |
| 1. Should the explicit bias be removed in favor of an implcit bias as |
| part of a ADD_SIGNED_ARB function? |
| |
| - RESOLVED: Yes. This pre-scale bias is a special case and will |
| be treated as such. |
| |
| 2. 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. |
| |
| - RESOLVED: Yes. PRIMARY_COLOR_ARB has been added as an input |
| source. |
| |
| 3. Should textures from other texture units be allowed as sources? |
| |
| - RESOLVED: NO. Even though this adds a lot of flexibility that |
| folks can use today, there is not enough support amonst the |
| ARB participants to add it to the base spec. |
| |
| 4. 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? |
| |
| - RESOLVED: Yes. This seems to be a reasonable area to expand |
| functionality and remain backwards compatible with the EXT |
| version of the extension. |
| |
| 5. If the texture environment for a given texture unit does not |
| reference the texture object that is bound to that texture unit, |
| does a valid texture object need to be bound that unit? |
| |
| - RESOLVED: Yes. Each texture unit implicitly references the |
| texture object that is bound to that unit, regardless of the |
| texture environment function. This may require that |
| applications bind a dummy texture to the texture unit. |
| |
| 6. Should we allow the secondary color to take part in texture blending? |
| |
| - RESOLVED: Not in this extension. Secondary color was defined |
| as a specular part of the lit color and does not have associated |
| alpha. In order to do this right, the secondary color extension |
| needs to be fixed first to allow a full featured color and clearly |
| state the interaction of how it interacts with the color sum stage. |
| |
| 7. How exactly is this ARB extension different from the EXT version? |
| |
| - RESOLVED: |
| |
| 1) This extension adds the GL_SUBTRACT_ARB mode |
| |
| 2) OPERAND2_RGB_ARB can use SRC_COLOR, ONE_MINUS_SRC_COLOR, |
| SRC_ALPHA, and ONE_MINUS_SRC_ALPHA instead of just SRC_ALPHA |
| (NV_texture_env_combine4 already provides this). |
| |
| 3) OPERAND2_ALPHA_ARB can use SRC_ALPHA and ONE_MINUS_SRC_ALPHA |
| instead of just SRC_ALPHA (NV_texture_env_combine4 already |
| provides this). |
| |
| 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_ARB 0x8570 |
| |
| Accepted by the <pname> parameter of TexEnvf, TexEnvi, TexEnvfv, |
| and TexEnviv when the <target> parameter value is TEXTURE_ENV |
| |
| COMBINE_RGB_ARB 0x8571 |
| COMBINE_ALPHA_ARB 0x8572 |
| SOURCE0_RGB_ARB 0x8580 |
| SOURCE1_RGB_ARB 0x8581 |
| SOURCE2_RGB_ARB 0x8582 |
| SOURCE0_ALPHA_ARB 0x8588 |
| SOURCE1_ALPHA_ARB 0x8589 |
| SOURCE2_ALPHA_ARB 0x858A |
| OPERAND0_RGB_ARB 0x8590 |
| OPERAND1_RGB_ARB 0x8591 |
| OPERAND2_RGB_ARB 0x8592 |
| OPERAND0_ALPHA_ARB 0x8598 |
| OPERAND1_ALPHA_ARB 0x8599 |
| OPERAND2_ALPHA_ARB 0x859A |
| RGB_SCALE_ARB 0x8573 |
| ALPHA_SCALE |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, |
| and TexEnviv when the <pname> parameter value is COMBINE_RGB_ARB |
| or COMBINE_ALPHA_ARB |
| |
| REPLACE |
| MODULATE |
| ADD |
| ADD_SIGNED_ARB 0x8574 |
| INTERPOLATE_ARB 0x8575 |
| SUBTRACT_ARB 0x84E7 |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, |
| and TexEnviv when the <pname> parameter value is SOURCE0_RGB_ARB, |
| SOURCE1_RGB_ARB, SOURCE2_RGB_ARB, SOURCE0_ALPHA_ARB, |
| SOURCE1_ALPHA_ARB, or SOURCE2_ALPHA_ARB |
| |
| TEXTURE |
| CONSTANT_ARB 0x8576 |
| PRIMARY_COLOR_ARB 0x8577 |
| PREVIOUS_ARB 0x8578 |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, |
| and TexEnviv when the <pname> parameter value is |
| OPERAND0_RGB_ARB, OPERAND1_RGB_ARB, or OPERAND2_RGB_ARB |
| |
| 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_ARB, OPERAND1_ALPHA_ARB, or OPERAND2_ALPHA_ARB |
| |
| SRC_ALPHA |
| ONE_MINUS_SRC_ALPHA |
| |
| Accepted by the <params> parameter of TexEnvf, TexEnvi, TexEnvfv, |
| and TexEnviv when the <pname> parameter value is RGB_SCALE_ARB 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_ARB, the form of the |
| texture function depends on the values of COMBINE_RGB_ARB and |
| COMBINE_ALPHA_ARB, according to table 3.20. The RGB and ALPHA |
| results of the texture function are then multiplied by the values |
| of RGB_SCALE_ARB and ALPHA_SCALE, respectively. The results are |
| clamped to [0,1]. |
| |
| COMBINE_RGB_ARB Texture Function |
| ------------------ ---------------- |
| REPLACE Arg0 |
| MODULATE Arg0 * Arg1 |
| ADD Arg0 + Arg1 |
| ADD_SIGNED_ARB Arg0 + Arg1 - 0.5 |
| INTERPOLATE_ARB Arg0 * (Arg2) + Arg1 * (1-Arg2) |
| SUBTRACT_ARB Arg0 - Arg1 |
| |
| COMBINE_ALPHA_ARB Texture Function |
| ------------------ ---------------- |
| REPLACE Arg0 |
| MODULATE Arg0 * Arg1 |
| ADD Arg0 + Arg1 |
| ADD_SIGNED_ARB Arg0 + Arg1 - 0.5 |
| INTERPOLATE_ARB Arg0 * (Arg2) + Arg1 * (1-Arg2) |
| SUBTRACT_ARB Arg0 - Arg1 |
| |
| Table 3.20: COMBINE_ARB texture functions |
| |
| The arguments Arg0, Arg1 and Arg2 are determined by the values of |
| SOURCE<n>_RGB_ARB, SOURCE<n>_ALPHA_ARB, OPERAND<n>_RGB_ARB and |
| OPERAND<n>_ALPHA_ARB. 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_ARB OPERAND<n>_RGB_ARB Argument |
| ----------------- -------------- -------- |
| TEXTURE SRC_COLOR Ct |
| ONE_MINUS_SRC_COLOR (1-Ct) |
| SRC_ALPHA At |
| ONE_MINUS_SRC_ALPHA (1-At) |
| CONSTANT_ARB SRC_COLOR Cc |
| ONE_MINUS_SRC_COLOR (1-Cc) |
| SRC_ALPHA Ac |
| ONE_MINUS_SRC_ALPHA (1-Ac) |
| PRIMARY_COLOR_ARB SRC_COLOR Cf |
| ONE_MINUS_SRC_COLOR (1-Cf) |
| SRC_ALPHA Af |
| ONE_MINUS_SRC_ALPHA (1-Af) |
| PREVIOUS_ARB 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_ARB functions |
| |
| SOURCE<n>_ALPHA_ARB OPERAND<n>_ALPHA_ARB Argument |
| ----------------- -------------- -------- |
| TEXTURE SRC_ALPHA At |
| ONE_MINUS_SRC_ALPHA (1-At) |
| CONSTANT_ARB SRC_ALPHA Ac |
| ONE_MINUS_SRC_ALPHA (1-Ac) |
| PRIMARY_COLOR_ARB SRC_ALPHA Af |
| ONE_MINUS_SRC_ALPHA (1-Af) |
| PREVIOUS_ARB SRC_ALPHA Ap |
| ONE_MINUS_SRC_ALPHA (1-Ap) |
| |
| Table 3.22: Arguments for COMBINE_ALPHA_ARB 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_ARB and COMBINE_ALPHA_ARB 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 Appendix F of the GL Specification (ARB Extensions) |
| |
| Inserted after the second paragraph of F.2.12: |
| |
| If the value of TEXTURE_ENV_MODE is COMBINE_ARB, the texture |
| function associated with a given texture unit is computed using |
| the values specified by SOURCE<n>_RGB_ARB, SOURCE<n>_ALPHA_ARB, |
| OPERAND<n>_RGB_ARB and OPERAND<n>_ALPHA_ARB. If TEXTURE<n>_ARB is |
| specified as SOURCE<n>_RGB_ARB or SOURCE<n>_ALPHA_ARB, the texture |
| value from texture unit <n> will be used in computing the texture |
| function for this texture unit. |
| |
| Inserted after the third paragraph of F.2.12: |
| |
| If a texture environment for a given texture unit references a |
| texture unit that is disabled or does not have a valid texture |
| object bound to it, then it is as if texture is disabled for the |
| given texture unit. Every texture unit implicitly references the |
| texture object that is bound to it, regardless of the texture |
| function specified by COMBINE_RGB_ARB or COMBINE_ALPHA_ARB. |
| |
| Additions to the GLX Specification |
| |
| None |
| |
| GLX Protocol |
| |
| None |
| |
| Errors |
| |
| INVALID_ENUM is generated if <params> value for COMBINE_RGB_ARB or |
| COMBINE_ALPHA_ARB is not one of REPLACE, MODULATE, ADD, |
| ADD_SIGNED_ARB, INTERPOLATE_ARB, or SUBTRACT_ARB |
| |
| INVALID_ENUM is generated if <params> value for SOURCE0_RGB_ARB, |
| SOURCE1_RGB_ARB, SOURCE2_RGB_ARB, SOURCE0_ALPHA_ARB, |
| SOURCE1_ALPHA_ARB or SOURCE2_ALPHA_ARB is not one of TEXTURE, |
| CONSTANT_ARB, PRIMARY_COLOR_ARB, or PREVIOUS_ARB. |
| |
| INVALID_ENUM is generated if <params> value for OPERAND0_RGB_ARB, |
| OPERAND1_RGB_ARB, or OPERAND2_RGB_ARB 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_ARB, |
| OPERAND1_ALPHA_ARB, or OPERAND2_ALPHA_ARB is not one of SRC_ALPHA |
| or ONE_MINUS_SRC_ALPHA. |
| |
| INVALID_VALUE is generated if <params> value for RGB_SCALE_ARB or |
| ALPHA_SCALE is not one of 1.0, 2.0, or 4.0. |
| |
| New State |
| |
| Get Value Get Command Type Initial Value Attribute |
| --------- ----------- ---- ------------- --------- |
| COMBINE_RGB_ARB GetTexEnviv n x Z4 MODULATE texture |
| COMBINE_ALPHA_ARB GetTexEnviv n x Z4 MODULATE texture |
| SOURCE0_RGB_ARB GetTexEnviv n x Z3 TEXTURE texture |
| SOURCE1_RGB_ARB GetTexEnviv n x Z3 PREVIOUS_ARB texture |
| SOURCE2_RGB_ARB GetTexEnviv n x Z3 CONSTANT_ARB texture |
| SOURCE0_ALPHA_ARB GetTexEnviv n x Z3 TEXTURE texture |
| SOURCE1_ALPHA_ARB GetTexEnviv n x Z3 PREVIOUS_ARB texture |
| SOURCE2_ALPHA_ARB GetTexEnviv n x Z3 CONSTANT_ARB texture |
| OPERAND0_RGB_ARB GetTexEnviv n x Z6 SRC_COLOR texture |
| OPERAND1_RGB_ARB GetTexEnviv n x Z6 SRC_COLOR texture |
| OPERAND2_RGB_ARB GetTexEnviv n x Z1 SRC_ALPHA texture |
| OPERAND0_ALPHA_ARB GetTexEnviv n x Z4 SRC_ALPHA texture |
| OPERAND1_ALPHA_ARB GetTexEnviv n x Z4 SRC_ALPHA texture |
| OPERAND2_ALPHA_ARB GetTexEnviv n x Z1 SRC_ALPHA texture |
| RGB_SCALE_ARB GetTexEnvfv n x R3 1.0 texture |
| ALPHA_SCALE GetTexEnvfv n x R3 1.0 texture |
| |
| New Implementation Dependent State |
| |
| None |
| |
| Revision History |
| |
| 06/11/04 benj Updated contact info after ATI/AMD merger. |
| |
| 01/05/21 mjk Added ARB versus EXT differences issue |
| |
| 01/02/02 bpoddar Added original EXT/ARB contributors to the contact |
| list |
| |
| 00/12/13 bpoddar Added enum value for SUBTRACT_ARB |
| |
| 00/12/06 bpoddar Moved references to Ct<n> and At<n> to |
| ARB_texture_env_crossbar spec. |
| |
| 00/12/01 bpoddar Removed TEXTURE<n>_ARB since several companies |
| had problems with this addition in the base spec. |
| |
| 00/11/13 bpoddar Recreated 6/20 spec with language for dealing |
| with inconsistent textures moved to appendix F. |
| |
| 00/06/20 rhammers Changed behavior when dealing with references |
| do disabled and inconsistent textures. |
| |
| 00/05/23 rhammers Cleaned up for first draft of ARB version. |
| Added issue -- TEXTURE with TEXTURE<n>_ARB |
| Added issue .. "upstream" textures |
| Listed get functions with description of |
| enumerants. |
| Added 1.1 and multitexture to dependencies |
| |
| 00/05/18 rhammers First rev of ARB version of the spec. Based on |
| EXT_texture_env_combine. |
| Relaxed restriction on Arg2. |
| Added support for TEXTURE<n>_ARB. |
| Added SUBTRACT_ARB combiner function. |
| do disabled and inconsistent textures. |