summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Bragg <robert@linux.intel.com>2011-09-01 17:16:23 +0100
committerRobert Bragg <robert@linux.intel.com>2011-09-05 17:54:46 +0100
commit9b56ce4d5b4d61aa4ef9f0ecfb2f914262f4bd73 (patch)
treeb2a4b3e4a00dffb376b9c71f565b8302848a8495
parentc36652a4c3948956965405d5be23fcb466f7ff55 (diff)
downloadcogl-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.c31
-rw-r--r--cogl/cogl-pipeline.h3
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);
* &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>