diff options
author | Robert Bragg <robert@linux.intel.com> | 2011-09-01 17:16:23 +0100 |
---|---|---|
committer | Robert Bragg <robert@linux.intel.com> | 2011-09-05 17:54:46 +0100 |
commit | 9b56ce4d5b4d61aa4ef9f0ecfb2f914262f4bd73 (patch) | |
tree | b2a4b3e4a00dffb376b9c71f565b8302848a8495 | |
parent | c36652a4c3948956965405d5be23fcb466f7ff55 (diff) | |
download | cogl-9b56ce4d5b4d61aa4ef9f0ecfb2f914262f4bd73.tar.gz |
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>
-rw-r--r-- | cogl/cogl-blend-string.c | 31 | ||||
-rw-r--r-- | cogl/cogl-pipeline.h | 3 |
2 files changed, 27 insertions, 7 deletions
diff --git a/cogl/cogl-blend-string.c b/cogl/cogl-blend-string.c index 92c4cb14..d5f48af8 100644 --- a/cogl/cogl-blend-string.c +++ b/cogl/cogl-blend-string.c @@ -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"; diff --git a/cogl/cogl-pipeline.h b/cogl/cogl-pipeline.h index 9e68e839..15b100cd 100644 --- a/cogl/cogl-pipeline.h +++ b/cogl/cogl-pipeline.h @@ -522,9 +522,6 @@ cogl_pipeline_get_alpha_test_reference (CoglPipeline *pipeline); * <channel-mask>=ADD(SRC_COLOR*(<factor>), DST_COLOR*(<factor>)) * ]| * - * <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> |