Ignore:
Timestamp:
Apr 16, 2006, 11:52:05 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Added truecolor support to the X11 and GL drivers.
Location:
libcaca/trunk/caca
Files:
2 edited

Legend:

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

    r777 r780  
    4242 */
    4343
    44 /* Ok, I just suck. */
    45 static GLbyte const gl_bgpal[][4] =
    46 {
    47     { 0x00, 0x00, 0x00, 0x7f },
    48     { 0x00, 0x00, 0x3f, 0x7f },
    49     { 0x00, 0x3f, 0x00, 0x7f },
    50     { 0x00, 0x3f, 0x3f, 0x7f },
    51     { 0x3f, 0x00, 0x00, 0x7f },
    52     { 0x3f, 0x00, 0x3f, 0x7f },
    53     { 0x3f, 0x3f, 0x00, 0x7f },
    54     { 0x3f, 0x3f, 0x3f, 0x7f },
    55     // + intensity
    56     // >.
    57     // ()
    58     // ^^
    59     { 0x1f, 0x1f, 0x1f, 0x7f },
    60     { 0x1f, 0x1f, 0x7f, 0x7f },
    61     { 0x1f, 0x7f, 0x1f, 0x7f },
    62     { 0x1f, 0x7f, 0x7f, 0x7f },
    63     { 0x7f, 0x1f, 0x1f, 0x7f },
    64     { 0x7f, 0x1f, 0x7f, 0x7f },
    65     { 0x7f, 0x7f, 0x1f, 0x7f },
    66     { 0x7f, 0x7f, 0x7f, 0x7f }
    67 };
    68 
    6944static caca_t *gl_kk; /* FIXME: we ought to get rid of this */
    7045
     
    248223        for(x = 0; x < kk->drv.p->width; x += kk->drv.p->font_width)
    249224        {
     225            uint16_t bg = _cucul_argb32_to_rgb12bg(*attr++);
    250226            glDisable(GL_TEXTURE_2D);
    251             glColor4bv(gl_bgpal[_cucul_argb32_to_ansi4bg(*attr++)]);
     227            glColor3b(((bg & 0xf00) >> 8) * 8,
     228                      ((bg & 0x0f0) >> 4) * 8,
     229                      (bg & 0x00f) * 8);
    252230            glBegin(GL_QUADS);
    253231                glVertex2f(x, y);
     
    279257            if(c > 0x00000020 && c < 0x00000080)
    280258            {
     259                uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
    281260                glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[c - 32]);
    282                 glColor4bv(gl_bgpal[_cucul_argb32_to_ansi4fg(*attr)]);
     261                glColor3b(((fg & 0xf00) >> 8) * 8,
     262                          ((fg & 0x0f0) >> 4) * 8,
     263                          (fg & 0x00f) * 8);
    283264                glBegin(GL_QUADS);
    284265                    glTexCoord2f(0, kk->drv.p->sh);
  • libcaca/trunk/caca/driver_x11.c

    r777 r780  
    4848    long int event_mask;
    4949    int font_width, font_height;
    50     int colors[16];
     50    int colors[4096];
    5151    Font font;
    5252    XFontStruct *font_struct;
     
    6060static int x11_init_graphics(caca_t *kk)
    6161{
    62     static int const x11_palette[] =
    63     {
    64         /* Standard curses colours */
    65         0x0,    0x0,    0x0,
    66         0x0,    0x0,    0x8000,
    67         0x0,    0x8000, 0x0,
    68         0x0,    0x8000, 0x8000,
    69         0x8000, 0x0,    0x0,
    70         0x8000, 0x0,    0x8000,
    71         0x8000, 0x8000, 0x0,
    72         0x8000, 0x8000, 0x8000,
    73         /* Extra values for xterm-16color */
    74         0x4000, 0x4000, 0x4000,
    75         0x4000, 0x4000, 0xffff,
    76         0x4000, 0xffff, 0x4000,
    77         0x4000, 0xffff, 0xffff,
    78         0xffff, 0x4000, 0x4000,
    79         0xffff, 0x4000, 0xffff,
    80         0xffff, 0xffff, 0x4000,
    81         0xffff, 0xffff, 0xffff,
    82     };
    83 
    8462    Colormap colormap;
    8563    XSetWindowAttributes x11_winattr;
     
    149127
    150128    colormap = DefaultColormap(kk->drv.p->dpy, DefaultScreen(kk->drv.p->dpy));
    151     for(i = 0; i < 16; i++)
     129    for(i = 0x000; i < 0x1000; i++)
    152130    {
    153131        XColor color;
    154         color.red = x11_palette[i * 3];
    155         color.green = x11_palette[i * 3 + 1];
    156         color.blue = x11_palette[i * 3 + 2];
     132        color.red = ((i & 0xf00) >> 8) * 0x1111;
     133        color.green = ((i & 0x0f0) >> 4) * 0x1111;
     134        color.blue = (i & 0x00f) * 0x1111;
    157135        XAllocColor(kk->drv.p->dpy, colormap, &color);
    158136        kk->drv.p->colors[i] = color.pixel;
     
    160138
    161139    x11_winattr.backing_store = Always;
    162     x11_winattr.background_pixel = kk->drv.p->colors[0];
     140    x11_winattr.background_pixel = kk->drv.p->colors[0x000];
    163141    x11_winattr.event_mask = ExposureMask | StructureNotifyMask;
    164142
     
    177155
    178156    kk->drv.p->gc = XCreateGC(kk->drv.p->dpy, kk->drv.p->window, 0, NULL);
    179     XSetForeground(kk->drv.p->dpy, kk->drv.p->gc, kk->drv.p->colors[15]);
     157    XSetForeground(kk->drv.p->dpy, kk->drv.p->gc, kk->drv.p->colors[0x888]);
    180158    XSetFont(kk->drv.p->dpy, kk->drv.p->gc, kk->drv.p->font);
    181159
     
    259237        {
    260238            uint32_t *attr = kk->qq->attr + x + y * kk->qq->width;
    261             uint8_t bg = _cucul_argb32_to_ansi4bg(*attr);
     239            uint16_t bg = _cucul_argb32_to_rgb12bg(*attr);
    262240
    263241            len = 1;
    264242            while(x + len < kk->qq->width
    265                    && _cucul_argb32_to_ansi4bg(attr[len]) == bg)
     243                   && _cucul_argb32_to_rgb12bg(attr[len]) == bg)
    266244                len++;
    267245
    268246            XSetForeground(kk->drv.p->dpy, kk->drv.p->gc,
    269                            kk->drv.p->colors[_cucul_argb32_to_ansi4bg(*attr)]);
     247                           kk->drv.p->colors[bg]);
    270248            XFillRectangle(kk->drv.p->dpy, kk->drv.p->pixmap, kk->drv.p->gc,
    271249                           x * kk->drv.p->font_width, y * kk->drv.p->font_height,
     
    290268
    291269            XSetForeground(kk->drv.p->dpy, kk->drv.p->gc,
    292                            kk->drv.p->colors[_cucul_argb32_to_ansi4fg(*attr)]);
     270                           kk->drv.p->colors[_cucul_argb32_to_rgb12fg(*attr)]);
    293271
    294272            /* Plain ASCII, no problem. */
Note: See TracChangeset for help on using the changeset viewer.