blend-strings: Make braces around blend factor optional

for a blend string like:
"RGBA=ADD(SRC_COLOR, SRC_COLOR * (DST_COLOR[A]))"
it was awkward that we were requiring developers to explicitly put
redundant brackets around the DST_COLOR[A] blend factor. The parser has
been updated so now braces are only required for factors like
"(1-SRC_COLOR[A])"

Reviewed-by: Neil Roberts <neil@linux.intel.com>
This commit is contained in:
Robert Bragg 2011-09-01 17:16:23 +01:00
parent c36652a4c3
commit 9b56ce4d5b
2 changed files with 27 additions and 7 deletions

View File

@ -482,6 +482,7 @@ parse_argument (const char *string, /* original user string */
const char *error_string = NULL;
ParserArgState state = PARSER_ARG_STATE_START;
gboolean parsing_factor = FALSE;
gboolean implicit_factor_brace;
arg->source.is_zero = FALSE;
arg->source.info = NULL;
@ -631,11 +632,21 @@ parse_argument (const char *string, /* original user string */
case PARSER_ARG_STATE_EXPECT_OPEN_PAREN:
if (*p != '(')
{
error_string = "Expected '(' before blend factor - the parser "
"currently requires that all blend factors "
"following a '*' be surrounded in brackets";
goto error;
if (is_alphanum_char (*p))
{
p--; /* compensate for implicit brace and ensure this
* char gets considered part of the blend factor */
implicit_factor_brace = TRUE;
}
else
{
error_string = "Expected '(' around blend factor or alpha "
"numeric character for blend factor name";
goto error;
}
}
else
implicit_factor_brace = FALSE;
parsing_factor = TRUE;
state = PARSER_ARG_STATE_EXPECT_FACTOR;
continue;
@ -676,6 +687,12 @@ parse_argument (const char *string, /* original user string */
case PARSER_ARG_STATE_MAYBE_MINUS:
if (*p == '-')
{
if (implicit_factor_brace)
{
error_string = "Expected ( ) braces around blend factor with "
"a subtraction";
goto error;
}
arg->factor.source.one_minus = TRUE;
state = PARSER_ARG_STATE_EXPECT_COLOR_SRC_NAME;
}
@ -687,6 +704,12 @@ parse_argument (const char *string, /* original user string */
continue;
case PARSER_ARG_STATE_EXPECT_CLOSE_PAREN:
if (implicit_factor_brace)
{
p--;
state = PARSER_ARG_STATE_EXPECT_END;
continue;
}
if (*p != ')')
{
error_string = "Expected closing parenthesis after blend factor";

View File

@ -522,9 +522,6 @@ cogl_pipeline_get_alpha_test_reference (CoglPipeline *pipeline);
* &lt;channel-mask&gt;=ADD(SRC_COLOR*(&lt;factor&gt;), DST_COLOR*(&lt;factor&gt;))
* ]|
*
* <warning>The brackets around blend factors are currently not
* optional!</warning>
*
* This is the list of source-names usable as blend factors:
* <itemizedlist>
* <listitem><para>SRC_COLOR: The color of the in comming fragment</para></listitem>