blob: 6404019d1e287fac546ddf984be02a4933d32080 [file] [log] [blame]
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