Opentk/Source/Bind/Specifications/Docs/ES31/glBlendFuncSeparate.xml
2014-03-28 20:06:55 +01:00

1153 lines
62 KiB
XML

<!DOCTYPE refentry [ <!ENTITY % mathent SYSTEM "math.ent"> %mathent; ]>
<!-- Converted by db4-upgrade version 1.1 -->
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="glBlendFuncSeparate">
<info>
<copyright>
<year>1991-2006</year>
<holder>Silicon Graphics, Inc.</holder>
</copyright>
<copyright>
<year>2010-2014</year>
<holder>Khronos Group</holder>
</copyright>
</info>
<refmeta>
<refentrytitle>glBlendFuncSeparate</refentrytitle>
<manvolnum>3G</manvolnum>
</refmeta>
<refnamediv>
<refname>glBlendFuncSeparate</refname>
<refpurpose>specify pixel arithmetic for RGB and alpha components separately</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>C Specification</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>glBlendFuncSeparate</function></funcdef>
<paramdef>GLenum <parameter>srcRGB</parameter></paramdef>
<paramdef>GLenum <parameter>dstRGB</parameter></paramdef>
<paramdef>GLenum <parameter>srcAlpha</parameter></paramdef>
<paramdef>GLenum <parameter>dstAlpha</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
<refsect1 xml:id="parameters"><title>Parameters</title>
<variablelist>
<varlistentry>
<term><parameter>srcRGB</parameter></term>
<listitem>
<para>
Specifies how the red, green, and blue blending factors are computed.
The initial value is <constant>GL_ONE</constant>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>dstRGB</parameter></term>
<listitem>
<para>
Specifies how the red, green, and blue destination blending factors are
computed.
The initial value is <constant>GL_ZERO</constant>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>srcAlpha</parameter></term>
<listitem>
<para>
Specified how the alpha source blending factor is computed.
The initial value is <constant>GL_ONE</constant>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>dstAlpha</parameter></term>
<listitem>
<para>
Specified how the alpha destination blending factor is computed.
The initial value is <constant>GL_ZERO</constant>.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 xml:id="description"><title>Description</title>
<para>
Pixels can be drawn using a function that blends
the incoming (source) RGBA values with the RGBA values
that are already in the frame buffer (the destination values).
Blending is initially disabled.
Use <citerefentry><refentrytitle>glEnable</refentrytitle></citerefentry> and <citerefentry><refentrytitle>glDisable</refentrytitle></citerefentry> with argument <constant>GL_BLEND</constant>
to enable and disable blending.
</para>
<para>
<function>glBlendFuncSeparate</function> defines the operation of blending when it is enabled.
<parameter>srcRGB</parameter> specifies which method is used to scale the
source RGB-color components.
<parameter>dstRGB</parameter> specifies which method is used to scale the
destination RGB-color components.
Likewise, <parameter>srcAlpha</parameter> specifies which method is used to scale the source alpha
color component, and <parameter>dstAlpha</parameter> specifies which method is used to scale the
destination alpha component.
The possible methods are described in the following table.
Each method defines four scale factors,
one each for red, green, blue, and alpha.
</para>
<para>
In the table and in subsequent equations, source and destination
color components are referred to as
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( R sub s , G sub s , B sub s , A sub s ): -->
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:math></inlineequation>,
and
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( R sub d , G sub d , B sub d , A sub d ): -->
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:math></inlineequation>, respectively.
The color specified by <citerefentry><refentrytitle>glBlendColor</refentrytitle></citerefentry> is referred to as
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( R sub c , G sub c , B sub c , A sub c ): -->
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:math></inlineequation>.
</para>
<para>
Source and destination scale factors are referred to as
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( s sub R , s sub G , s sub B , s sub A ): -->
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">G</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:math></inlineequation>
and
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( d sub R , d sub G , d sub B , d sub A ): -->
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">d</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">d</mml:mi>
<mml:mi mathvariant="italic">G</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">d</mml:mi>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">d</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:math></inlineequation>.
All scale factors have range
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: [0,1]: -->
<mml:mfenced open="[" close="]">
<mml:mn>0</mml:mn>
<mml:mn>1</mml:mn>
</mml:mfenced>
</mml:math></inlineequation>.
</para>
<para>
Prior to blending, unsigned normalized fixed-point color components undergo
an implied conversion to floating-point using equation 2.1. This conversion must
leave the values 0 and 1 invariant. Blending computations are treated as if carried
out in floating-point and will be performed with a precision and dynamic range no
lower than that used to represent destination components.
If the value of <constant>GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING</constant> for the
framebuffer attachment corresponding to the destination buffer is <constant>GL_SRGB</constant>,
the R, G, and B destination color values (after conversion from fixed-point
to floating-point) are considered to be encoded for the sRGB color space and
hence must be linearized prior to their use in blending. Each R, G, and B component
is converted in the same fashion described for sRGB texture components.
</para>
<para>
</para>
<informaltable>
<tgroup cols="4" align="left">
<colspec colwidth="3*"/>
<colspec colwidth="2*"/>
<colspec colwidth="1*"/>
<thead>
<row>
<entry>
<emphasis role="bold"> Parameter </emphasis>
</entry>
<entry>
<emphasis role="bold"> RGB Factor </emphasis>
</entry>
<entry>
<emphasis role="bold"> Alpha Factor </emphasis>
</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<constant>GL_ZERO</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( 0, 0, 0 ): -->
<mml:mfenced open="(" close=")">
<mml:mn>0</mml:mn>
<mml:mn>0</mml:mn>
<mml:mn>0</mml:mn>
</mml:mfenced>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: 0: -->
<mml:mn>0</mml:mn>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_ONE</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( 1, 1, 1 ): -->
<mml:mfenced open="(" close=")">
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
</mml:mfenced>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: 1: -->
<mml:mn>1</mml:mn>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_SRC_COLOR</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( R sub s / k sub R , G sub s / k sub G , B sub s / k sub B ): -->
<mml:mfenced open="(" close=")">
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">G</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mfenced>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: A sub s / k sub A: -->
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_ONE_MINUS_SRC_COLOR</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( 1, 1, 1 ) - ( R sub s / k sub R , G sub s / k sub G , B sub 0s / k sub B ): -->
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
</mml:mfenced>
<mml:mo>-</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">G</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mfenced>
</mml:mrow>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: 1 - A sub s / k sub A: -->
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>-</mml:mo>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mrow>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_DST_COLOR</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( R sub d / k sub R , G sub d / k sub G , B sub d / k sub B ): -->
<mml:mfenced open="(" close=")">
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">G</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mfenced>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: A sub d / k sub A: -->
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_ONE_MINUS_DST_COLOR</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( 1, 1, 1 ) - ( R sub d / k sub R , G sub d / k sub G , B sub d / k sub B ): -->
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
</mml:mfenced>
<mml:mo>-</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">G</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mfenced>
</mml:mrow>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: 1 - A sub d / k sub A: -->
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>-</mml:mo>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mrow>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_SRC_ALPHA</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( A sub s / k sub A , A sub s / k sub A , A sub s / k sub A ): -->
<mml:mfenced open="(" close=")">
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mfenced>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: A sub s / k sub A: -->
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_ONE_MINUS_SRC_ALPHA</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( 1, 1, 1 ) - ( A sub s / k sub A , A sub s / k sub A , A sub s / k sub A ): -->
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
</mml:mfenced>
<mml:mo>-</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mfenced>
</mml:mrow>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: 1 - A sub s / k sub A: -->
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>-</mml:mo>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mrow>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_DST_ALPHA</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( A sub d / k sub A , A sub d / k sub A , A sub d / k sub A ): -->
<mml:mfenced open="(" close=")">
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mfenced>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: A sub d / k sub A: -->
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_ONE_MINUS_DST_ALPHA</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( 1, 1, 1 ) - ( A sub d / k sub A , A sub d / k sub A , A sub d / k sub A ): -->
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
</mml:mfenced>
<mml:mo>-</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mfenced>
</mml:mrow>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: 1 - A sub d / k sub A: -->
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>-</mml:mo>
<mml:mfrac>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mrow>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_CONSTANT_COLOR</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( R sub c, G sub c, B sub c ): -->
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: A sub c: -->
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_ONE_MINUS_CONSTANT_COLOR</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( 1, 1, 1 ) - ( R sub c, G sub c, B sub c ): -->
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
</mml:mfenced>
<mml:mo>-</mml:mo>
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:mrow>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: 1 - A sub c: -->
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>-</mml:mo>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_CONSTANT_ALPHA</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( A sub c, A sub c, A sub c ): -->
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: A sub c: -->
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_ONE_MINUS_CONSTANT_ALPHA</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( 1, 1, 1 ) - ( A sub c, A sub c, A sub c ): -->
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn>
</mml:mfenced>
<mml:mo>-</mml:mo>
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:mrow>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: 1 - A sub c: -->
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>-</mml:mo>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math></inlineequation>
</entry>
</row>
<row>
<entry>
<constant>GL_SRC_ALPHA_SATURATE</constant>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: ( i, i, i ): -->
<mml:mfenced open="(" close=")">
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mfenced>
</mml:math></inlineequation>
</entry>
<entry>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: 1: -->
<mml:mn>1</mml:mn>
</mml:math></inlineequation>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
In the table,
</para>
<para>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: i = min (A sub s , 1 - {A sub d}): -->
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mi mathvariant="italic">min</mml:mi>
<mml:mo>&af;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>-</mml:mo>
<mml:mfenced open="" close="">
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math></inlineequation>
</para>
<para>
To determine the blended RGBA values of a pixel,
the system uses the following equations:
</para>
<para>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: R sub d = min ( k sub R, R sub s s sub R + R sub d d sub R ): -->
<mml:mrow>
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mi mathvariant="italic">min</mml:mi>
<mml:mo>&af;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
</mml:msub>
<mml:mrow>
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:mo>&it;</mml:mo>
<mml:msub><mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub><mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:mo>&it;</mml:mo>
<mml:msub><mml:mi mathvariant="italic">d</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math></inlineequation>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: G sub d = min ( k sub G, G sub s s sub G + G sub d d sub G ): -->
<mml:mrow>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mi mathvariant="italic">min</mml:mi>
<mml:mo>&af;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">G</mml:mi>
</mml:msub>
<mml:mrow>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:mo>&it;</mml:mo>
<mml:msub><mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">G</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub><mml:mi mathvariant="italic">G</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:mo>&it;</mml:mo>
<mml:msub><mml:mi mathvariant="italic">d</mml:mi>
<mml:mi mathvariant="italic">G</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math></inlineequation>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: B sub d = min ( k sub B, B sub s s sub B + B sub d d sub B ): -->
<mml:mrow>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mi mathvariant="italic">min</mml:mi>
<mml:mo>&af;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:msub>
<mml:mrow>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:mo>&it;</mml:mo>
<mml:msub><mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub><mml:mi mathvariant="italic">B</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:mo>&it;</mml:mo>
<mml:msub><mml:mi mathvariant="italic">d</mml:mi>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math></inlineequation>
<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: A sub d = min ( k sub A, A sub s s sub A + A sub d d sub A ): -->
<mml:mrow>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mi mathvariant="italic">min</mml:mi>
<mml:mo>&af;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:msub><mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
<mml:mrow>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:msub>
<mml:mo>&it;</mml:mo>
<mml:msub><mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub><mml:mi mathvariant="italic">A</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:msub>
<mml:mo>&it;</mml:mo>
<mml:msub><mml:mi mathvariant="italic">d</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math></inlineequation>
</para>
<para>
If the value of <constant>GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING</constant> for the framebuffer
attachment corresponding to the destination buffer is <constant>GL_SRGB</constant>, the R, G, and B
values after blending are converted into the non-linear sRGB color space by computing
<!-- Missing equation! -->
where cl is the R, G, or B element and cs is the result (effectively converted into an
sRGB color space).
If <constant>GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING</constant> is not <constant>GL_SRGB</constant>, then
cs = cl:
The resulting cs values for R, G, and B, and the unmodified A form a new
RGBA color value. If the color buffer is fixed-point, each component is clamped
to the range [0; 1] and then converted to a fixed-point value using equation
</para>
</refsect1>
<refsect1 xml:id="notes"><title>Notes</title>
<para>
Incoming (source) alpha is correctly thought of as a material opacity,
ranging from 1.0
(<inlineequation><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll">
<!-- eqn: K sub A: -->
<mml:msub><mml:mi mathvariant="italic">K</mml:mi>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:msub>
</mml:math></inlineequation>),
representing complete opacity,
to 0.0 (0), representing complete
transparency.
</para>
<para>
When more than one color buffer is enabled for drawing,
the GL performs blending separately for each enabled buffer,
using the contents of that buffer for destination color.
(See <citerefentry><refentrytitle>glDrawBuffers</refentrytitle></citerefentry>.)
</para>
</refsect1>
<refsect1 xml:id="errors"><title>Errors</title>
<para>
<constant>GL_INVALID_ENUM</constant> is generated if either <parameter>srcRGB</parameter> or <parameter>dstRGB</parameter> is not an
accepted value.
</para>
</refsect1>
<refsect1 xml:id="associatedgets"><title>Associated Gets</title>
<para>
<citerefentry><refentrytitle>glGet</refentrytitle></citerefentry> with argument <constant>GL_BLEND_SRC_RGB</constant>
</para>
<para>
<citerefentry><refentrytitle>glGet</refentrytitle></citerefentry> with argument <constant>GL_BLEND_SRC_ALPHA</constant>
</para>
<para>
<citerefentry><refentrytitle>glGet</refentrytitle></citerefentry> with argument <constant>GL_BLEND_DST_RGB</constant>
</para>
<para>
<citerefentry><refentrytitle>glGet</refentrytitle></citerefentry> with argument <constant>GL_BLEND_DST_ALPHA</constant>
</para>
<para>
<citerefentry><refentrytitle>glIsEnabled</refentrytitle></citerefentry> with argument <constant>GL_BLEND</constant>
</para>
<para>
</para>
</refsect1>
<refsect1 xml:id="versions">
<title>API Version Support</title>
<informaltable>
<tgroup cols="4" align="left">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="apifunchead.xml" xpointer="xpointer(/*/*)"/>
<tbody>
<row>
<entry>glBlendFuncSeparate</entry>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="apiversion.xml" xpointer="xpointer(/*/*[@role='es20']/*)"/>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 xml:id="seealso"><title>See Also</title>
<para>
<citerefentry><refentrytitle>glBlendColor</refentrytitle></citerefentry>,
<citerefentry><refentrytitle>glBlendFunc</refentrytitle></citerefentry>,
<citerefentry><refentrytitle>glBlendEquation</refentrytitle></citerefentry>,
<citerefentry><refentrytitle>glBlendEquationSeparate</refentrytitle></citerefentry>,
<citerefentry><refentrytitle>glClear</refentrytitle></citerefentry>,
<citerefentry><refentrytitle>glDrawBuffers</refentrytitle></citerefentry>,
<citerefentry><refentrytitle>glEnable</refentrytitle></citerefentry>,
</para>
</refsect1>
<refsect1 xml:id="Copyright"><title>Copyright</title>
<para>
Copyright <trademark class="copyright"/> 1991-2006 Silicon Graphics, Inc.
Copyright <trademark class="copyright"/> 2010-2014 Khronos Group.
This document is licensed under the SGI Free Software B License.
For details, see
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://oss.sgi.com/projects/FreeB/">http://oss.sgi.com/projects/FreeB/</link>.
</para>
</refsect1>
</refentry>