Ignore:
Timestamp:
Dec 11, 2003, 5:31:49 PM (16 years ago)
Author:
Sam Hocevar
Message:
  • src/graphics.c: + Internally cache screen width and height.
  • src/bitmap.c: + Added alpha support to caca_draw_bitmap(). For now, we only treat 0%

alpha as fully transparent, and any other value as fully opaque.

+ Slightly tuned colour weights in the renderer.
+ caca_set_bitmap_palette() takes unsigned ints.

  • examples/demo.c: + Added a crap render demo.
  • examples/aafire.c: + Set a 20ms delay. + Added alpha values to the palette.
  • examples/view.c: + Draw a gray checkered grid below the image so that transparent images

look a lot nicer.

+ 'f' toggles "fullscreen" mode.

Location:
libcaca/trunk/examples
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/examples

    • Property svn:ignore
      •  

        old new  
        99cacaview
        1010cacaview.exe
         11cacafire
         12cacafire.exe
  • libcaca/trunk/examples/aafire.c

    r244 r246  
    9696  int i;
    9797#ifdef LIBCACA
    98   int r[256], g[256], b[256];
     98  int r[256], g[256], b[256], a[256];
    9999#endif
    100100
     
    105105      exit (1);
    106106    }
     107  caca_set_delay(20000);
    107108#else
    108109  context = aa_autoinit (&aa_defparams);
     
    122123    g[i] = pal[i * 3 + 1] * 64;
    123124    b[i] = pal[i * 3 + 2] * 64;
     125    a[i] = 0xfff;
    124126  }
    125127#else
     
    129131
    130132#ifdef LIBCACA
    131   caca_bitmap = caca_create_bitmap(8, XSIZ, YSIZ - 4, XSIZ, 0, 0, 0);
    132   caca_set_bitmap_palette(caca_bitmap, r, g, b);
     133  caca_bitmap = caca_create_bitmap(8, XSIZ, YSIZ - 2, XSIZ, 0, 0, 0, 0);
     134  caca_set_bitmap_palette(caca_bitmap, r, g, b, a);
    133135  bitmap = malloc(XSIZ * YSIZ * sizeof(char));
    134136  caca_set_dithering(CACA_DITHERING_ORDERED8);
     
    136138  aa_hidecursor (context);
    137139#endif
    138 fprintf(stderr, "%i %i\n", XSIZ, YSIZ);
    139140}
    140141static void
  • libcaca/trunk/examples/demo.c

    r238 r246  
    4141static void demo_triangles(void);
    4242static void demo_sprites(void);
     43static void demo_render(void);
    4344
    4445int bounds = 0;
     
    131132                if(sprite)
    132133                    demo = demo_sprites;
     134            case 'r':
     135            case 'R':
     136                demo = demo_render;
    133137                break;
    134138            }
     
    194198    caca_putstr(4, 12, "'5': ellipses");
    195199    caca_putstr(4, 13, "'c': colour");
     200    caca_putstr(4, 14, "'r': render");
    196201    if(sprite)
    197         caca_putstr(4, 14, "'s': sprites");
     202        caca_putstr(4, 15, "'s': sprites");
    198203
    199204    caca_putstr(4, 16, "settings:");
     
    461466}
    462467
     468#if 0
     469static void demo_render(void)
     470{
     471    struct caca_bitmap *bitmap;
     472    //short buffer[256*256];
     473    //short *dest = buffer;
     474    int buffer[256*256];
     475    int *dest = buffer;
     476    int x, y, z;
     477    static int i = 0;
     478
     479    i = (i + 1) % 512;
     480    z = i < 256 ? i : 511 - i;
     481
     482    for(x = 0; x < 256; x++)
     483        for(y = 0; y < 256; y++)
     484    {
     485        //*dest++ = ((x >> 3) << 11) | ((y >> 2) << 5) | ((z >> 3));
     486        *dest++ = (x << 16) | (y << 8) | (z);
     487    }
     488
     489    //bitmap = caca_create_bitmap(16, 256, 256, 2 * 256, 0xf800, 0x07e0, 0x001f, 0x0000);
     490    bitmap = caca_create_bitmap(32, 256, 256, 4 * 256, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
     491    caca_draw_bitmap(0, 0, caca_get_width() - 1, caca_get_height() - 1,
     492                     bitmap, buffer);
     493    caca_free_bitmap(bitmap);
     494}
     495#endif
     496
     497static void draw_circle(int *buffer, int xo, int yo, int r, int mask, int val);
     498
     499static void demo_render(void)
     500{
     501    struct caca_bitmap *bitmap;
     502    int buffer[256*256];
     503    int *dest;
     504    int x, y, z, t, xo, yo;
     505    static int i = 0;
     506
     507    i++;
     508
     509    dest = buffer;
     510    for(x = 0; x < 256; x++)
     511        for(y = 0; y < 256; y++)
     512    {
     513        *dest++ = 0;
     514    }
     515
     516    /* red */
     517    xo = 128 + 48 * sin(0.02 * i);
     518    yo = 128 + 48 * cos(0.03 * i);
     519    t = 256 * (2.0 + sin(4 + 0.017 * i)) / 3;
     520    for(z = 0; z < 240; z++)
     521        draw_circle(buffer, xo, yo, z, 0x00ff0000,
     522                    ((255 - z) * t / 256) << 16);
     523
     524    /* green */
     525    xo = 128 + 48 * sin(2 + 0.06 * i);
     526    yo = 128 + 48 * cos(2 + 0.05 * i);
     527    t = 256 * (2.0 + sin(8 + 0.021 * i)) / 3;
     528    for(z = 0; z < 240; z++)
     529        draw_circle(buffer, xo, yo, z, 0x0000ff00,
     530                    ((255 - z) * t / 256) << 8);
     531
     532    /* blue */
     533    xo = 128 + 48 * sin(1 + 0.04 * i);
     534    yo = 128 + 48 * cos(1 + 0.03 * i);
     535    t = 256 * (2.0 + sin(3 + 0.033 * i)) / 3;
     536    for(z = 0; z < 240; z++)
     537        draw_circle(buffer, xo, yo, z, 0x000000ff, (255 - z) * t / 256);
     538
     539    bitmap = caca_create_bitmap(32, 256, 256, 4 * 256, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
     540    caca_draw_bitmap(0, 0, caca_get_width() - 1, caca_get_height() - 1,
     541                     bitmap, (char *)buffer);
     542    caca_free_bitmap(bitmap);
     543}
     544
     545static void draw_circle(int *buffer, int x, int y, int r, int mask, int val)
     546{
     547    int t, dx, dy;
     548
     549#define POINT(X,Y) \
     550    buffer[(X) + 256 * (Y)] = (buffer[(X) + 256 * (Y)] & ~mask) | val;
     551
     552    for(t = 0, dx = 0, dy = r; dx <= dy; dx++)
     553    {
     554        POINT(x - dx / 3, y - dy / 3);
     555        POINT(x + dx / 3, y - dy / 3);
     556        POINT(x - dx / 3, y + dy / 3);
     557        POINT(x + dx / 3, y + dy / 3);
     558
     559        POINT(x - dy / 3, y - dx / 3);
     560        POINT(x + dy / 3, y - dx / 3);
     561        POINT(x - dy / 3, y + dx / 3);
     562        POINT(x + dy / 3, y + dx / 3);
     563
     564        t += t > 0 ? dx - dy-- : dx;
     565    }
     566}
     567
  • libcaca/trunk/examples/view.c

    r241 r246  
    3333#include "caca.h"
    3434
     35/* Local functions */
     36static void load_image(const char *);
     37static void draw_checkers(unsigned int, unsigned int,
     38                          unsigned int, unsigned int);
     39
     40/* Local variables */
    3541Imlib_Image image = NULL;
    3642char *pixels = NULL;
    3743struct caca_bitmap *bitmap = NULL;
    3844int x, y, w, h;
    39 const unsigned int rmask = 0x00ff0000, gmask = 0x0000ff00, bmask = 0x000000ff;
    40 
    41 int dithering = CACA_DITHERING_ORDERED4;
    42 
    43 static void load_image(const char *);
    4445
    4546int main(int argc, char **argv)
    4647{
    47     int quit = 0, update = 1, help = 0, reload = 0;
    48     int i, zoom = 0;
     48    int quit = 0, update = 1, help = 0, reload = 0, fullscreen = 0, zoom = 0;
     49    int dithering = CACA_DITHERING_ORDERED4;
    4950
    5051    char **list = NULL;
    5152    int current = 0, items = 0, opts = 1;
     53    int i;
    5254
    5355    /* Initialise libcaca */
     
    102104                reload = 1;
    103105                break;
     106            case CACA_EVENT_KEY_PRESS | 'f':
     107            case CACA_EVENT_KEY_PRESS | 'F':
     108                fullscreen = ~fullscreen;
     109                update = 1;
     110                break;
    104111            case CACA_EVENT_KEY_PRESS | 'd':
    105112                dithering = (dithering + 1) % 5;
     
    204211            int xn = (ww - 1) / (2 - zoom);
    205212            int yn = (wh - 1) / (2 - zoom);
     213            draw_checkers(xo - xn, yo - yn, xo + xn, yo + yn);
    206214            caca_draw_bitmap(xo - xn, yo - yn, xo + xn, yo + yn,
    207215                             bitmap, pixels);
     
    217225            if(yn + y > h) y = h - yn;
    218226            newbitmap = caca_create_bitmap(32, 2 * xn, 2 * yn, 4 * w,
    219                                            rmask, gmask, bmask);
    220             caca_draw_bitmap(0, 0, ww - 1, wh - 1, newbitmap,
     227                                           0x00ff0000, 0x0000ff00, 0x000000ff,
     228                                           0xff000000);
     229            draw_checkers(0, fullscreen ? 0 : 1,
     230                          ww - 1, fullscreen ? wh - 1 : wh - 2);
     231            caca_draw_bitmap(0, fullscreen ? 0 : 1,
     232                             ww - 1, fullscreen ? wh - 1 : wh - 2,
     233                             newbitmap,
    221234                             pixels + 4 * (x - xn) + 4 * w * (y - yn));
    222235            caca_free_bitmap(newbitmap);
     
    224237        else
    225238        {
    226             caca_draw_bitmap(0, 0, ww - 1, wh - 1, bitmap, pixels);
     239            draw_checkers(0, fullscreen ? 0 : 1,
     240                          ww - 1, fullscreen ? wh - 1 : wh - 2);
     241            caca_draw_bitmap(0, fullscreen ? 0 : 1,
     242                             ww - 1, fullscreen ? wh - 1 : wh - 2,
     243                             bitmap, pixels);
    227244        }
    228245
    229246        caca_set_color(CACA_COLOR_WHITE, CACA_COLOR_BLUE);
    230         caca_draw_line(0, 0, ww - 1, 0, ' ');
    231         caca_draw_line(0, wh - 1, ww - 1, wh - 1, '-');
    232         caca_putstr(0, 0, "q:Quit  n/p:Next/Prev  +/-/x:Zoom  "
    233                           "h/j/k/l: Move  d:Dithering");
    234         caca_putstr(ww - strlen("?:Help"), 0, "?:Help");
    235         caca_printf(3, wh - 1, "cacaview %s", VERSION);
    236         caca_printf(ww / 2 - 5, wh - 1, "(%s dithering)",
    237                     caca_get_dithering_name(dithering));
    238         caca_printf(ww - 14, wh - 1,
    239                     "(zoom: %s%i)", zoom > 0 ? "+" : "", zoom);
     247
     248        if(!fullscreen)
     249        {
     250            caca_draw_line(0, 0, ww - 1, 0, ' ');
     251            caca_draw_line(0, wh - 1, ww - 1, wh - 1, '-');
     252            caca_putstr(0, 0, "q:Quit  n/p:Next/Prev  +/-/x:Zoom  "
     253                              "h/j/k/l: Move  d:Dithering");
     254            caca_putstr(ww - strlen("?:Help"), 0, "?:Help");
     255            caca_printf(3, wh - 1, "cacaview %s", VERSION);
     256            caca_printf(ww / 2 - 5, wh - 1, "(%s dithering)",
     257                        caca_get_dithering_name(dithering));
     258            caca_printf(ww - 14, wh - 1,
     259                        "(zoom: %s%i)", zoom > 0 ? "+" : "", zoom);
     260        }
    240261
    241262        if(help)
     
    299320
    300321    /* Create the libcaca bitmap */
    301     bitmap = caca_create_bitmap(32, w, h, 4 * w, rmask, gmask, bmask);
     322    bitmap = caca_create_bitmap(32, w, h, 4 * w, 0x00ff0000, 0x0000ff00,
     323                                0x000000ff, 0xff000000);
    302324    if(!bitmap)
    303325    {
     
    307329}
    308330
     331static void draw_checkers(unsigned int x1, unsigned int y1,
     332                          unsigned int x2, unsigned int y2)
     333{
     334    unsigned int xn, yn;
     335
     336    for(yn = y1; yn <= y2; yn++)
     337        for(xn = x1; xn <= x2; xn++)
     338    {
     339        if(((xn / 4) ^ (yn / 2)) & 1)
     340            caca_set_color(CACA_COLOR_LIGHTGRAY, CACA_COLOR_DARKGRAY);
     341        else
     342            caca_set_color(CACA_COLOR_DARKGRAY, CACA_COLOR_LIGHTGRAY);
     343        caca_putchar(xn, yn, ' ');
     344    }
     345}
     346
Note: See TracChangeset for help on using the changeset viewer.