Ignore:
Timestamp:
Mar 8, 2006, 11:29:00 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Make output drivers more error resilient when handling UTF-32 characters, by simply ignoring everything non ASCII :-)
File:
1 edited

Legend:

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

    r553 r557  
    7979    float font_width, font_height;
    8080    float incx, incy;
    81     int id[94];
     81    int id[128 - 32];
    8282    unsigned char bit;
    8383    unsigned char mouse_changed, mouse_clicked;
     
    165165    glEnable(GL_TEXTURE_2D);
    166166
    167     for(i = 0; i < 94; i++)
    168     {
    169         glGenTextures(1, (GLuint*)&kk->drv.p->id[i]);
    170         glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[i]);
     167    for(i = 32; i < 128; i++)
     168    {
     169        glGenTextures(1, (GLuint*)&kk->drv.p->id[i - 32]);
     170        glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[i - 32]);
    171171        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    172172        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     
    175175    }
    176176
    177     for(i = 0; i < 94; i++)
     177    for(i = 32; i < 128; i++)
    178178    {
    179179        glDisable(GL_TEXTURE_2D);
     
    182182        glColor3f(1, 1, 1);
    183183        glRasterPos2f(0, 15);
    184         glutBitmapCharacter(GLUT_BITMAP_9_BY_15, i + 32);
     184        glutBitmapCharacter(GLUT_BITMAP_9_BY_15, i);
    185185
    186186        glEnable(GL_TEXTURE_2D);
    187         glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[i]);
     187        glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[i - 32]);
    188188        glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
    189189                         0, kk->drv.p->height - 16, 16, 16, 0);
     
    237237                glVertex2f(x, y);
    238238                glVertex2f(x + kk->drv.p->font_width, y);
    239                 glVertex2f(x + kk->drv.p->font_width, y + kk->drv.p->font_height);
     239                glVertex2f(x + kk->drv.p->font_width,
     240                           y + kk->drv.p->font_height);
    240241                glVertex2f(x, y + kk->drv.p->font_height);
    241242            glEnd();
     
    260261        for(x = 0; x < kk->drv.p->width; x += kk->drv.p->font_width)
    261262        {
    262             if(*chars != (uint32_t)' ')
     263            uint32_t c = *chars++;
     264
     265            if(c > 0x00000020 && c < 0x00000080)
    263266            {
    264                 char ch = *chars & 0x7f;
    265 
    266                 /* FIXME: check ch bounds */
    267                 glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[ch - 32]);
     267                glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[c - 32]);
    268268                glColor4bv(gl_bgpal[attr[0] & 0xf]);
    269269                glBegin(GL_QUADS);
     
    280280
    281281            attr++;
    282             chars++;
    283282        }
    284283        line++;
Note: See TracChangeset for help on using the changeset viewer.