|Cogl 2.0 Reference Manual|
|| Cogl Blend Strings|
Blend Strings — A simple syntax and grammar for describing blending and texture combining functions.
Describing GPU blending and texture combining states is rather awkward to do in a consise but also readable fashion. Cogl helps by supporting string based descriptions using a simple syntax.
Here is an example used for blending:
"RGBA = ADD (SRC_COLOR * (SRC_COLOR[A]), DST_COLOR * (1-SRC_COLOR[A]))"
In OpenGL terms this replaces glBlendFunc[Separate] and glBlendEquation[Separate]
Actually in this case it's more verbose than the GL equivalent:
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
But unless you are familiar with OpenGL or refer to its API documentation you wouldn't know that the default function used by OpenGL is GL_FUNC_ADD nor would you know that the above arguments determine what the source color and destination color will be multiplied by before being adding.
Here is an example used for texture combining:
"RGB = REPLACE (PREVIOUS)" "A = MODULATE (PREVIOUS, TEXTURE)"
In OpenGL terms this replaces glTexEnv, and the above example is equivalent to this OpenGL code:
glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE); glTexEnvi (GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS); glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE); glTexEnvi (GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS); glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_COLOR); glTexEnvi (GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_TEXTURE); glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_COLOR);
<statement>: <channel-mask>=<function-name>(<arg-list>) You can either use a single statement with an RGBA channel-mask or you can use two statements; one with an A channel-mask and the other with an RGB channel-mask. <channel-mask>: A or RGB or RGBA <function-name>: [A-Za-z_]* <arg-list>: <arg>,<arg> or <arg> or "" I.e. functions may take 0 or more arguments <arg>: <color-source> 1 - <color-source> : Only intended for texture combining <color-source> * ( <factor> ) : Only intended for blending 0 : Only intended for blending See the blending or texture combining sections for further notes and examples. <color-source>: <source-name>[<channel-mask>] <source-name> See the blending or texture combining sections for the list of source-names valid in each context. If a channel mask is not given then the channel mask of the statement is assumed instead. <factor>: 0 1 <color-source> 1-<color-source> SRC_ALPHA_SATURATE