[cogl] blend-strings: Make braces around blend factor optional



commit 9b56ce4d5b4d61aa4ef9f0ecfb2f914262f4bd73
Author: Robert Bragg <robert linux intel com>
Date:   Thu Sep 1 17:16:23 2011 +0100

    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>

 cogl/cogl-blend-string.c |   31 +++++++++++++++++++++++++++----
 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 92c4cb1..d5f48af 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 9e68e83..15b100c 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>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]