1exlights(3)                     Allegro manual                     exlights(3)
2
3
4

NAME

6       exlights  -  One  way to do colored lighting effects in a hicolor video
7       mode. Allegro game programming library.
8

SYNOPSIS

10       #include <allegro.h>
11
12
13       Example exlights
14

DESCRIPTION

16       This program shows one way to implement colored lighting effects  in  a
17       hicolor video mode. Warning: it is not for the faint of heart!  This is
18       by no means the simplest  or  easiest  to  understand  method,  I  just
19       thought it was a cool concept that would be worth demonstrating.
20
21       The  basic  approach  is to select a 15 or 16 bit screen mode, but then
22       draw onto 24 bit memory bitmaps. Since we only need the bottom  5  bits
23       of each 8 bit color in order to store 15 bit data within a 24 bit loca‐
24       tion, we can fit a light level into the top 3 bits.  The tricky bit  is
25       that  these  aren't actually 24 bit images at all: they are implemented
26       as 8 bit memory bitmaps, and we just store the red level in one  pixel,
27       green  in  the  next,  and  blue in the next, making the total image be
28       three times wider than we really wanted.  This allows us to use all the
29       normal  256  color  graphics  routines for drawing onto our memory sur‐
30       faces, most importantly the lookup table  translucency,  which  can  be
31       used  to combine the low 5 bits of color and the top 3 bits of light in
32       a single drawing operation.  Some trickery is needed  to  load  24  bit
33       data  into this fake 8 bit format, and of course it needs a custom rou‐
34       tine to convert the resulting image while  copying  it  across  to  the
35       hardware screen.
36
37       This  program  chugs  slightly  on my p133, but not significantly worse
38       than any double buffering in what amounts to a 1920x640, 256 color res‐
39       olution.  The light blending doesn't seem to slow it down too badly, so
40       I think this technique would be quite usable on faster machines and  in
41       lower  resolution  hicolor  modes. The biggest problem is that although
42       you keep the full 15 bit color resolution,  you  only  get  3  bits  of
43       light, ie. 8 light levels.  You can do some nice colored light patches,
44       but smooth gradients aren't going to work too well :-)
45
46

SEE ALSO

48       BITMAP(3),  COLOR_MAP(3),  END_OF_MAIN(3),   PALETTE(3),   SCREEN_H(3),
49       SCREEN_W(3),   allegro_error(3),  allegro_init(3),  allegro_message(3),
50       bitmap_color_depth(3), blit(3), bmp_unwrite_line(3), bmp_write_line(3),
51       circlefill(3),  clear_bitmap(3),  clear_keybuf(3),  color_map(3),  cre‐
52       ate_bitmap_ex(3), destroy_bitmap(3), draw_trans_sprite(3), fixatan2(3),
53       fixsqrt(3),   fixtoi(3),   getb_depth(3),  getg_depth(3),  getpixel(3),
54       getr_depth(3),  hsv_to_rgb(3),  install_keyboard(3),  install_mouse(3),
55       install_timer(3),  itofix(3), key(3), keypressed(3), line(3), load_bit‐
56       map(3),    makecol(3),    mouse_x(3),    mouse_y(3),     poll_mouse(3),
57       replace_filename(3),  retrace_count(3),  screen(3),  select_palette(3),
58       set_color_conversion(3), set_color_depth(3), set_gfx_mode(3)
59
60
61
62Allegro                          version 4.4.2                     exlights(3)
Impressum