Changeset 1008


Ignore:
Timestamp:
Aug 13, 2006, 7:30:34 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Factored some of the GL code.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/driver_gl.c

    r973 r1008  
    327327
    328328    /* 2nd pass, avoids changing render state too much */
     329    glEnable(GL_TEXTURE_2D);
    329330    glEnable(GL_BLEND);
    330     glEnable(GL_TEXTURE_2D);
    331331    glBlendFunc(GL_ONE, GL_ONE);
    332332
    333333    line = 0;
    334     for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height)
     334    for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height, line++)
    335335    {
    336336        uint32_t *attr = dp->cv->attr + line * dp->cv->width;
    337337        uint32_t *chars = dp->cv->chars + line * dp->cv->width;
    338338
    339         for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
     339        for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width, attr++)
    340340        {
    341341            uint32_t cv = *chars++;
     342            uint16_t fg;
     343
     344            if(cv == ' ')
     345                continue;
    342346
    343347            if(cv > 0x00000020 && cv < 0x00000080)
    344348            {
    345                 uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
    346349                glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[cv - 32]);
    347                 glColor3b(((fg & 0xf00) >> 8) * 8,
    348                           ((fg & 0x0f0) >> 4) * 8,
    349                           (fg & 0x00f) * 8);
    350                 glBegin(GL_QUADS);
    351                 glTexCoord2f(0, dp->drv.p->sh);
    352                 glVertex2f(x, y);
    353                 glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
    354                 glVertex2f(x + dp->drv.p->font_width, y);
    355                 glTexCoord2f(dp->drv.p->sw, 0);
    356                 glVertex2f(x + dp->drv.p->font_width,
    357                            y + dp->drv.p->font_height);
    358                 glTexCoord2f(0, 0);
    359                 glVertex2f(x, y + dp->drv.p->font_height);
    360                 glEnd();
    361350            }
    362             else if(cv!=' ')
     351            else switch(cv)
    363352            {
    364                 switch(cv)
    365                 {
    366353                case 0x00002580: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[0]); break;
    367354                case 0x00002584: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[1]); break;
     
    373360                case 0x00002593: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[7]); break;
    374361                default:         glBindTexture(GL_TEXTURE_2D, dp->drv.p->id['?' - 32]); break;
    375                 }
    376 
    377                 uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
    378                 glColor3b(((fg & 0xf00) >> 8) * 8,
    379                           ((fg & 0x0f0) >> 4) * 8,
    380                           (fg & 0x00f) * 8);
    381                 glBegin(GL_QUADS);
    382                 glTexCoord2f(0, dp->drv.p->sh);
    383                 glVertex2f(x, y);
    384                 glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
    385                 glVertex2f(x + dp->drv.p->font_width, y);
    386                 glTexCoord2f(dp->drv.p->sw, 0);
    387                 glVertex2f(x + dp->drv.p->font_width,
    388                            y + dp->drv.p->font_height);
    389                 glTexCoord2f(0, 0);
    390                 glVertex2f(x, y + dp->drv.p->font_height);
    391                 glEnd();
    392 
    393362            }
    394363
    395             attr++;
     364            fg = _cucul_argb32_to_rgb12fg(*attr);
     365            glColor3b(((fg & 0xf00) >> 8) * 8,
     366                      ((fg & 0x0f0) >> 4) * 8,
     367                      (fg & 0x00f) * 8);
     368            glBegin(GL_QUADS);
     369            glTexCoord2f(0, dp->drv.p->sh);
     370            glVertex2f(x, y);
     371            glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
     372            glVertex2f(x + dp->drv.p->font_width, y);
     373            glTexCoord2f(dp->drv.p->sw, 0);
     374            glVertex2f(x + dp->drv.p->font_width,
     375                       y + dp->drv.p->font_height);
     376            glTexCoord2f(0, 0);
     377            glVertex2f(x, y + dp->drv.p->font_height);
     378            glEnd();
    396379        }
    397         line++;
    398     }
     380    }
     381    glBlendFunc(GL_ONE, GL_ZERO);
    399382    glDisable(GL_BLEND);
    400383    glDisable(GL_TEXTURE_2D);
Note: See TracChangeset for help on using the changeset viewer.