1exlights(3) Allegro manual exlights(3)
2
3
4
6 exlights - One way to do colored lighting effects in a hicolor video
7 mode. Allegro game programming library.
8
10 #include <allegro.h>
11
12
13 Example exlights
14
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
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)