Changeset 1430


Ignore:
Timestamp:
May 31, 2012, 2:04:16 PM (7 years ago)
Author:
sam
Message:

orbital: another bug in the hex colour parser; now also support 3-component
values which will automatically set alpha to 1.

Location:
trunk/orbital
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/orbital/generated/mesh-parser.cpp

    r1429 r1430  
    7070
    7171/* Line 299 of lalr1.cc  */
    72 #line 62 "mesh-parser.y"
     72#line 63 "mesh-parser.y"
    7373
    7474#include "../mesh-compiler.h"
     
    466466
    467467/* Line 690 of lalr1.cc  */
    468 #line 88 "mesh-parser.y"
     468#line 89 "mesh-parser.y"
    469469    { mc.m_mesh.Flush(); }
    470470    break;
     
    473473
    474474/* Line 690 of lalr1.cc  */
    475 #line 89 "mesh-parser.y"
     475#line 90 "mesh-parser.y"
    476476    { mc.m_mesh.MeshConvert(); }
    477477    break;
     
    480480
    481481/* Line 690 of lalr1.cc  */
    482 #line 90 "mesh-parser.y"
     482#line 91 "mesh-parser.y"
    483483    { /* TODO */ }
    484484    break;
     
    487487
    488488/* Line 690 of lalr1.cc  */
    489 #line 94 "mesh-parser.y"
     489#line 95 "mesh-parser.y"
    490490    { mc.m_mesh.SetCurColor(vec4((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2, (yysemantic_stack_[(2) - (2)].args).f3)); }
    491491    break;
     
    494494
    495495/* Line 690 of lalr1.cc  */
    496 #line 95 "mesh-parser.y"
    497     { uint16_t x = (uint16_t)(yysemantic_stack_[(2) - (2)].fval);
     496#line 96 "mesh-parser.y"
     497    { uint16_t x = (uint16_t)(yysemantic_stack_[(2) - (2)].u32val);
    498498                      vec4 v(x >> 12, (x >> 8) & 0xf, (x >> 4) & 0xf, x & 0xf);
    499                       mc.m_mesh.SetCurColor(vec4(v) * (0.1 / 15)); }
     499                      mc.m_mesh.SetCurColor(vec4(v) * (1. / 15)); }
    500500    break;
    501501
     
    503503
    504504/* Line 690 of lalr1.cc  */
    505 #line 98 "mesh-parser.y"
     505#line 99 "mesh-parser.y"
    506506    { mc.m_mesh.SetCurColor2(vec4((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2, (yysemantic_stack_[(2) - (2)].args).f3)); }
    507507    break;
     
    510510
    511511/* Line 690 of lalr1.cc  */
    512 #line 99 "mesh-parser.y"
    513     { uint16_t x = (uint16_t)(yysemantic_stack_[(2) - (2)].fval);
     512#line 100 "mesh-parser.y"
     513    { uint16_t x = (uint16_t)(yysemantic_stack_[(2) - (2)].u32val);
    514514                      vec4 v(x >> 12, (x >> 8) & 0xf, (x >> 4) & 0xf, x & 0xf);
    515                       mc.m_mesh.SetCurColor(vec4(v) * (0.1 / 15)); }
     515                      mc.m_mesh.SetCurColor(vec4(v) * (1. / 15)); }
    516516    break;
    517517
     
    519519
    520520/* Line 690 of lalr1.cc  */
    521 #line 105 "mesh-parser.y"
     521#line 106 "mesh-parser.y"
    522522    { mc.m_mesh.Translate(vec3((yysemantic_stack_[(2) - (2)].args).f0, 0, 0)); }
    523523    break;
     
    526526
    527527/* Line 690 of lalr1.cc  */
    528 #line 106 "mesh-parser.y"
     528#line 107 "mesh-parser.y"
    529529    { mc.m_mesh.Translate(vec3(0, (yysemantic_stack_[(2) - (2)].args).f0, 0)); }
    530530    break;
     
    533533
    534534/* Line 690 of lalr1.cc  */
    535 #line 107 "mesh-parser.y"
     535#line 108 "mesh-parser.y"
    536536    { mc.m_mesh.Translate(vec3(0, 0, (yysemantic_stack_[(2) - (2)].args).f0)); }
    537537    break;
     
    540540
    541541/* Line 690 of lalr1.cc  */
    542 #line 108 "mesh-parser.y"
     542#line 109 "mesh-parser.y"
    543543    { mc.m_mesh.Translate(vec3((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2)); }
    544544    break;
     
    547547
    548548/* Line 690 of lalr1.cc  */
    549 #line 109 "mesh-parser.y"
     549#line 110 "mesh-parser.y"
    550550    { mc.m_mesh.RotateX((yysemantic_stack_[(2) - (2)].args).f0); }
    551551    break;
     
    554554
    555555/* Line 690 of lalr1.cc  */
    556 #line 110 "mesh-parser.y"
     556#line 111 "mesh-parser.y"
    557557    { mc.m_mesh.RotateY((yysemantic_stack_[(2) - (2)].args).f0); }
    558558    break;
     
    561561
    562562/* Line 690 of lalr1.cc  */
    563 #line 111 "mesh-parser.y"
     563#line 112 "mesh-parser.y"
    564564    { mc.m_mesh.RotateZ((yysemantic_stack_[(2) - (2)].args).f0); }
    565565    break;
     
    568568
    569569/* Line 690 of lalr1.cc  */
    570 #line 112 "mesh-parser.y"
     570#line 113 "mesh-parser.y"
    571571    { mc.m_mesh.TaperX((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2); }
    572572    break;
     
    575575
    576576/* Line 690 of lalr1.cc  */
    577 #line 113 "mesh-parser.y"
     577#line 114 "mesh-parser.y"
    578578    { mc.m_mesh.TaperY((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2); }
    579579    break;
     
    582582
    583583/* Line 690 of lalr1.cc  */
    584 #line 114 "mesh-parser.y"
     584#line 115 "mesh-parser.y"
    585585    { mc.m_mesh.TaperZ((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2); }
    586586    break;
     
    589589
    590590/* Line 690 of lalr1.cc  */
    591 #line 115 "mesh-parser.y"
     591#line 116 "mesh-parser.y"
    592592    { mc.m_mesh.Scale(vec3((yysemantic_stack_[(2) - (2)].args).f0, 0, 0)); }
    593593    break;
     
    596596
    597597/* Line 690 of lalr1.cc  */
    598 #line 116 "mesh-parser.y"
     598#line 117 "mesh-parser.y"
    599599    { mc.m_mesh.Scale(vec3(0, (yysemantic_stack_[(2) - (2)].args).f0, 0)); }
    600600    break;
     
    603603
    604604/* Line 690 of lalr1.cc  */
    605 #line 117 "mesh-parser.y"
     605#line 118 "mesh-parser.y"
    606606    { mc.m_mesh.Scale(vec3(0, 0, (yysemantic_stack_[(2) - (2)].args).f0)); }
    607607    break;
     
    610610
    611611/* Line 690 of lalr1.cc  */
    612 #line 118 "mesh-parser.y"
     612#line 119 "mesh-parser.y"
    613613    { mc.m_mesh.Scale(vec3((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2)); }
    614614    break;
     
    617617
    618618/* Line 690 of lalr1.cc  */
    619 #line 119 "mesh-parser.y"
     619#line 120 "mesh-parser.y"
    620620    { mc.m_mesh.MirrorX(); }
    621621    break;
     
    624624
    625625/* Line 690 of lalr1.cc  */
    626 #line 120 "mesh-parser.y"
     626#line 121 "mesh-parser.y"
    627627    { mc.m_mesh.MirrorY(); }
    628628    break;
     
    631631
    632632/* Line 690 of lalr1.cc  */
    633 #line 121 "mesh-parser.y"
     633#line 122 "mesh-parser.y"
    634634    { mc.m_mesh.MirrorZ(); }
    635635    break;
     
    638638
    639639/* Line 690 of lalr1.cc  */
    640 #line 125 "mesh-parser.y"
     640#line 126 "mesh-parser.y"
    641641    { mc.m_mesh.AppendCylinder((int)(yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1,
    642642                                                 (yysemantic_stack_[(2) - (2)].args).f2, (yysemantic_stack_[(2) - (2)].args).f3,
     
    647647
    648648/* Line 690 of lalr1.cc  */
    649 #line 128 "mesh-parser.y"
     649#line 129 "mesh-parser.y"
    650650    { mc.m_mesh.AppendBox(vec3((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2)); }
    651651    break;
     
    654654
    655655/* Line 690 of lalr1.cc  */
    656 #line 129 "mesh-parser.y"
     656#line 130 "mesh-parser.y"
    657657    { mc.m_mesh.AppendSmoothChamfBox(vec3((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1,
    658658                                                            (yysemantic_stack_[(2) - (2)].args).f2), (yysemantic_stack_[(2) - (2)].args).f3); }
     
    662662
    663663/* Line 690 of lalr1.cc  */
    664 #line 131 "mesh-parser.y"
     664#line 132 "mesh-parser.y"
    665665    { mc.m_mesh.AppendFlatChamfBox(vec3((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1,
    666666                                                          (yysemantic_stack_[(2) - (2)].args).f2), (yysemantic_stack_[(2) - (2)].args).f3); }
     
    670670
    671671/* Line 690 of lalr1.cc  */
    672 #line 133 "mesh-parser.y"
     672#line 134 "mesh-parser.y"
    673673    { mc.m_mesh.AppendSphere((yysemantic_stack_[(2) - (2)].args).f0,
    674674                                               vec3((yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2, (yysemantic_stack_[(2) - (2)].args).f3)); }
     
    678678
    679679/* Line 690 of lalr1.cc  */
    680 #line 135 "mesh-parser.y"
     680#line 136 "mesh-parser.y"
    681681    { mc.m_mesh.AppendStar((int)(yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2,
    682682                                             (int)(yysemantic_stack_[(2) - (2)].args).f3, (int)(yysemantic_stack_[(2) - (2)].args).f4); }
     
    686686
    687687/* Line 690 of lalr1.cc  */
    688 #line 137 "mesh-parser.y"
     688#line 138 "mesh-parser.y"
    689689    { mc.m_mesh.AppendExpandedStar((int)(yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1,
    690690                                                     (yysemantic_stack_[(2) - (2)].args).f2, (yysemantic_stack_[(2) - (2)].args).f3); }
     
    694694
    695695/* Line 690 of lalr1.cc  */
    696 #line 139 "mesh-parser.y"
     696#line 140 "mesh-parser.y"
    697697    { mc.m_mesh.AppendDisc((int)(yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (int)(yysemantic_stack_[(2) - (2)].args).f2); }
    698698    break;
     
    701701
    702702/* Line 690 of lalr1.cc  */
    703 #line 140 "mesh-parser.y"
     703#line 141 "mesh-parser.y"
    704704    { mc.m_mesh.AppendSimpleTriangle((yysemantic_stack_[(2) - (2)].args).f0, (int)(yysemantic_stack_[(2) - (2)].args).f1); }
    705705    break;
     
    708708
    709709/* Line 690 of lalr1.cc  */
    710 #line 141 "mesh-parser.y"
     710#line 142 "mesh-parser.y"
    711711    { mc.m_mesh.AppendSimpleQuad((yysemantic_stack_[(2) - (2)].args).f0, (int)(yysemantic_stack_[(2) - (2)].args).f1); }
    712712    break;
     
    715715
    716716/* Line 690 of lalr1.cc  */
    717 #line 142 "mesh-parser.y"
     717#line 143 "mesh-parser.y"
    718718    { mc.m_mesh.AppendCog((int)(yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2, (yysemantic_stack_[(2) - (2)].args).f3,
    719719                                            (yysemantic_stack_[(2) - (2)].args).f4, (yysemantic_stack_[(2) - (2)].args).f5, (yysemantic_stack_[(2) - (2)].args).f6, (int)(yysemantic_stack_[(2) - (2)].args).f7); }
     
    723723
    724724/* Line 690 of lalr1.cc  */
    725 #line 146 "mesh-parser.y"
     725#line 147 "mesh-parser.y"
    726726    { (yyval.args).f0 = (yysemantic_stack_[(1) - (1)].fval); }
    727727    break;
     
    730730
    731731/* Line 690 of lalr1.cc  */
    732 #line 147 "mesh-parser.y"
     732#line 148 "mesh-parser.y"
    733733    { (yyval.args) = (yysemantic_stack_[(3) - (1)].args); (yyval.args).f1 = (yysemantic_stack_[(3) - (3)].fval); }
    734734    break;
     
    737737
    738738/* Line 690 of lalr1.cc  */
    739 #line 148 "mesh-parser.y"
     739#line 149 "mesh-parser.y"
    740740    { (yyval.args) = (yysemantic_stack_[(3) - (1)].args); (yyval.args).f2 = (yysemantic_stack_[(3) - (3)].fval); }
    741741    break;
     
    744744
    745745/* Line 690 of lalr1.cc  */
    746 #line 149 "mesh-parser.y"
     746#line 150 "mesh-parser.y"
    747747    { (yyval.args) = (yysemantic_stack_[(3) - (1)].args); (yyval.args).f3 = (yysemantic_stack_[(3) - (3)].fval); }
    748748    break;
     
    751751
    752752/* Line 690 of lalr1.cc  */
    753 #line 150 "mesh-parser.y"
     753#line 151 "mesh-parser.y"
    754754    { (yyval.args) = (yysemantic_stack_[(3) - (1)].args); (yyval.args).f4 = (yysemantic_stack_[(3) - (3)].fval); }
    755755    break;
     
    758758
    759759/* Line 690 of lalr1.cc  */
    760 #line 151 "mesh-parser.y"
     760#line 152 "mesh-parser.y"
    761761    { (yyval.args) = (yysemantic_stack_[(3) - (1)].args); (yyval.args).f5 = (yysemantic_stack_[(3) - (3)].fval); }
    762762    break;
     
    765765
    766766/* Line 690 of lalr1.cc  */
    767 #line 152 "mesh-parser.y"
     767#line 153 "mesh-parser.y"
    768768    { (yyval.args) = (yysemantic_stack_[(3) - (1)].args); (yyval.args).f6 = (yysemantic_stack_[(3) - (3)].fval); }
    769769    break;
     
    772772
    773773/* Line 690 of lalr1.cc  */
    774 #line 153 "mesh-parser.y"
     774#line 154 "mesh-parser.y"
    775775    { (yyval.args) = (yysemantic_stack_[(3) - (1)].args); (yyval.args).f7 = (yysemantic_stack_[(3) - (3)].fval); }
    776776    break;
     
    779779
    780780/* Line 690 of lalr1.cc  */
    781 #line 156 "mesh-parser.y"
     781#line 157 "mesh-parser.y"
    782782    { (yyval.fval) = (yysemantic_stack_[(1) - (1)].fval); }
    783783    break;
     
    786786
    787787/* Line 690 of lalr1.cc  */
    788 #line 157 "mesh-parser.y"
     788#line 158 "mesh-parser.y"
    789789    { (yyval.fval) = -(yysemantic_stack_[(2) - (2)].fval); }
    790790    break;
     
    12641264  MeshParser::yyrline_[] =
    12651265  {
    1266          0,    72,    72,    76,    77,    81,    82,    83,    84,    88,
    1267       89,    90,    94,    95,    98,    99,   105,   106,   107,   108,
    1268      109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
    1269      119,   120,   121,   125,   128,   129,   131,   133,   135,   137,
    1270      139,   140,   141,   142,   146,   147,   148,   149,   150,   151,
    1271      152,   153,   156,   157
     1266         0,    73,    73,    77,    78,    82,    83,    84,    85,    89,
     1267      90,    91,    95,    96,    99,   100,   106,   107,   108,   109,
     1268     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
     1269     120,   121,   122,   126,   129,   130,   132,   134,   136,   138,
     1270     140,   141,   142,   143,   147,   148,   149,   150,   151,   152,
     1271     153,   154,   157,   158
    12721272  };
    12731273
     
    13661366
    13671367/* Line 1138 of lalr1.cc  */
    1368 #line 160 "mesh-parser.y"
     1368#line 161 "mesh-parser.y"
    13691369
    13701370
  • trunk/orbital/generated/mesh-parser.h

    r1428 r1430  
    8080
    8181    float fval;
     82    uint32_t u32val;
    8283    struct { float f0, f1, f2, f3, f4, f5, f6, f7; } args;
    8384
     
    8586
    8687/* Line 35 of lalr1.cc  */
    87 #line 88 "generated/mesh-parser.h"
     88#line 89 "generated/mesh-parser.h"
    8889    };
    8990#else
     
    312313
    313314/* Line 35 of lalr1.cc  */
    314 #line 315 "generated/mesh-parser.h"
     315#line 316 "generated/mesh-parser.h"
    315316
    316317
  • trunk/orbital/generated/mesh-scanner.cpp

    r1428 r1430  
    331331        (yy_c_buf_p) = yy_cp;
    332332
    333 #define YY_NUM_RULES 39
    334 #define YY_END_OF_BUFFER 40
     333#define YY_NUM_RULES 40
     334#define YY_END_OF_BUFFER 41
    335335/* This struct is not used in this scanner,
    336336   but its presence is necessary. */
     
    342342static yyconst flex_int16_t yy_accept[69] =
    343343    {   0,
    344         0,    0,   40,   39,   38,   39,   39,   37,   36,   38,
    345        35,   39,   39,   39,   39,   39,   19,    9,    0,    0,
    346        35,   35,    0,   24,   23,   30,    0,    0,   32,   28,
     344        0,    0,   41,   40,   39,   40,   40,   38,   37,   39,
     345       36,   40,   40,   40,   40,   40,   19,    9,    0,    0,
     346       36,   36,    0,   24,   23,   30,    0,    0,   32,   28,
    347347       31,    1,    0,    0,   20,   21,   22,   10,   11,   12,
    348348        4,   16,   17,   18,    0,    6,    7,    8,    0,    0,
    349        35,   33,   29,    0,    0,    0,    3,    2,    5,   13,
    350        14,   15,    0,   26,   25,   27,   34,    0
     349       36,   33,   29,    0,    0,    0,    3,    2,    5,   13,
     350       14,   15,   34,   26,   25,   27,   35,    0
    351351    } ;
    352352
     
    851851#line 82 "mesh-scanner.l"
    852852{
    853         char buf[] = "0x____";
    854         sprintf(buf + 2, "%s", yytext + 1);
    855         yylval->fval = atof(buf);
    856         return token::COLOR;
    857       }
     853        yylval->u32val = 0xf + 0x10 * strtol(yytext + 1, NULL, 16);
     854        return token::COLOR; }
    858855        YY_BREAK
    859856case 35:
    860857YY_RULE_SETUP
     858#line 85 "mesh-scanner.l"
     859{
     860        yylval->u32val = strtol(yytext + 1, NULL, 16);
     861        return token::COLOR; }
     862        YY_BREAK
     863case 36:
     864YY_RULE_SETUP
    861865#line 88 "mesh-scanner.l"
    862866{
    863867        yylval->fval = atof(yytext); return token::NUMBER; }
    864868        YY_BREAK
    865 case 36:
     869case 37:
    866870YY_RULE_SETUP
    867871#line 90 "mesh-scanner.l"
    868872{ return token_type('-'); }
    869873        YY_BREAK
    870 case 37:
     874case 38:
    871875YY_RULE_SETUP
    872876#line 91 "mesh-scanner.l"
    873877{ return token_type(','); }
    874878        YY_BREAK
    875 case 38:
    876 /* rule 38 can match eol */
     879case 39:
     880/* rule 39 can match eol */
    877881YY_RULE_SETUP
    878882#line 92 "mesh-scanner.l"
    879883{ /* ignore everything else */ }
    880884        YY_BREAK
    881 case 39:
     885case 40:
    882886YY_RULE_SETUP
    883887#line 94 "mesh-scanner.l"
    884888ECHO;
    885889        YY_BREAK
    886 #line 887 "generated/mesh-scanner.cpp"
     890#line 891 "generated/mesh-scanner.cpp"
    887891case YY_STATE_EOF(INITIAL):
    888892        yyterminate();
  • trunk/orbital/mesh-parser.y

    r1429 r1430  
    3535{
    3636    float fval;
     37    uint32_t u32val;
    3738    struct { float f0, f1, f2, f3, f4, f5, f6, f7; } args;
    3839}
     
    5556
    5657%token <fval> NUMBER
    57 %token <fval> COLOR
     58%token <u32val> COLOR
    5859
    5960%type <fval> number
     
    9596  | T_COLOR COLOR   { uint16_t x = (uint16_t)$2;
    9697                      vec4 v(x >> 12, (x >> 8) & 0xf, (x >> 4) & 0xf, x & 0xf);
    97                       mc.m_mesh.SetCurColor(vec4(v) * (0.1 / 15)); }
     98                      mc.m_mesh.SetCurColor(vec4(v) * (1. / 15)); }
    9899  | T_BGCOLOR args4 { mc.m_mesh.SetCurColor2(vec4($2.f0, $2.f1, $2.f2, $2.f3)); }
    99100  | T_BGCOLOR COLOR { uint16_t x = (uint16_t)$2;
    100101                      vec4 v(x >> 12, (x >> 8) & 0xf, (x >> 4) & 0xf, x & 0xf);
    101                       mc.m_mesh.SetCurColor(vec4(v) * (0.1 / 15)); }
     102                      mc.m_mesh.SetCurColor(vec4(v) * (1. / 15)); }
    102103    ;
    103104
  • trunk/orbital/mesh-scanner.l

    r1428 r1430  
    8080acg   { return token::T_COG; }
    8181
     82#[0-9a-f]{3} {
     83        yylval->u32val = 0xf + 0x10 * strtol(yytext + 1, NULL, 16);
     84        return token::COLOR; }
    8285#[0-9a-f]{4} {
    83         char buf[] = "0x____";
    84         sprintf(buf + 2, "%s", yytext + 1);
    85         yylval->fval = atof(buf);
    86         return token::COLOR;
    87       }
     86        yylval->u32val = strtol(yytext + 1, NULL, 16);
     87        return token::COLOR; }
    8888[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)? {
    8989        yylval->fval = atof(yytext); return token::NUMBER; }
Note: See TracChangeset for help on using the changeset viewer.