Ignore:
Timestamp:
Apr 26, 2006, 4:06:19 PM (14 years ago)
Author:
Jean-Yves Lamoureux
Message:
  • Added preliminary (it means that's fucked up) CP437 codepage
File:
1 edited

Legend:

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

    r910 r912  
    6565    float font_width, font_height;
    6666    float incx, incy;
    67     int id[128 - 32];
     67    int id[(128 - 32)];
     68    int id_uni[8]; /* Hack, fixme*/
    6869    unsigned char close;
    6970    unsigned char bit;
     
    172173    }
    173174
     175    for(i = 0; i < 8; i++)
     176    {
     177        glGenTextures(1, (GLuint*)&dp->drv.p->id_uni[i]);
     178        glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[i]);
     179        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
     180        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     181        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
     182                     16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture);
     183    }
     184
    174185    for(i = 32; i < 128; i++)
    175186    {
     
    191202        glutMainLoopEvent();
    192203#endif
    193         glutPostRedisplay();
    194     }
     204        glutSwapBuffers();
     205
     206    }
     207    /* CP437 hack */
     208    for(i = 0; i < 8; i++)
     209    {
     210        glDisable(GL_TEXTURE_2D);
     211        glClear(GL_COLOR_BUFFER_BIT);
     212        glColor3f(1, 1, 1);
     213        glTranslatef(0.5,0.5,0);
     214
     215        if(i==0)                  /* 0x00002580*/
     216        {
     217            glBegin(GL_QUADS);
     218            glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,7); glVertex2f(0,7);
     219            glEnd();
     220        }
     221        else if(i==1)             /* 0x00002584*/
     222        {
     223            glBegin(GL_QUADS);
     224            glVertex2f(0,7); glVertex2f(9,7); glVertex2f(9,15); glVertex2f(0,15);
     225            glEnd();
     226        }
     227        else if(i==2)             /* 0x00002588*/
     228        {
     229            glBegin(GL_QUADS);
     230            glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(0,15);
     231            glEnd();
     232        }
     233        else if(i==3)             /* 0x0000258c*/
     234        {
     235            glBegin(GL_QUADS);
     236            glVertex2f(0,0); glVertex2f(4,0); glVertex2f(4,15); glVertex2f(0,15);
     237            glEnd();
     238        }
     239        else if(i==4)             /* 0x00002590*/
     240        {
     241            glBegin(GL_QUADS);
     242            glVertex2f(4,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(4,15);
     243            glEnd();
     244        }
     245        else if(i>=5)             /* 0x00002591*/
     246        {
     247            int a, j, k = i-5;
     248            for(j = dp->drv.p->font_height; j--; )
     249                for(a = dp->drv.p->font_width; a--; )
     250                {
     251                    if(((a + 2 * (j & 1)) & 3) > k)
     252                        continue;
     253
     254                    glBegin(GL_POINTS);
     255                    glVertex2f(a, j);
     256                    glEnd();
     257                }
     258        }
     259
     260
     261
     262        glEnable(GL_TEXTURE_2D);
     263        glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[i]);
     264        glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
     265                         0, dp->drv.p->height - 16, 16, 16, 0);
     266#ifdef HAVE_GLUTCHECKLOOP
     267        glutCheckLoop();
     268#else
     269        glutMainLoopEvent();
     270#endif
     271        glutSwapBuffers();
     272        glutPostRedisplay();
     273
     274
     275    }
     276
     277
    195278
    196279    return 0;
     
    283366                    glVertex2f(x, y + dp->drv.p->font_height);
    284367                glEnd();
     368            }
     369            else if(cv!=' ')
     370            {
     371                switch(cv)
     372                {
     373                    case 0x00002580: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[0]); break;
     374                    case 0x00002584: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[1]); break;
     375                    case 0x00002588: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[2]); break;
     376                    case 0x0000258c: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[3]); break;
     377                    case 0x00002590: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[4]); break;
     378                    case 0x00002591: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[5]); break;
     379                    case 0x00002592: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[6]); break;
     380                    case 0x00002593: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[7]); break;
     381                    default:         glBindTexture(GL_TEXTURE_2D, dp->drv.p->id['?' - 32]); break;
     382                }
     383
     384                uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
     385                glColor3b(((fg & 0xf00) >> 8) * 8,
     386                          ((fg & 0x0f0) >> 4) * 8,
     387                          (fg & 0x00f) * 8);
     388                glBegin(GL_QUADS);
     389                    glTexCoord2f(0, dp->drv.p->sh);
     390                    glVertex2f(x, y);
     391                    glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
     392                    glVertex2f(x + dp->drv.p->font_width, y);
     393                    glTexCoord2f(dp->drv.p->sw, 0);
     394                    glVertex2f(x + dp->drv.p->font_width,
     395                               y + dp->drv.p->font_height);
     396                    glTexCoord2f(0, 0);
     397                    glVertex2f(x, y + dp->drv.p->font_height);
     398                glEnd();
     399
    285400            }
    286401
Note: See TracChangeset for help on using the changeset viewer.