Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
exlights(3)			Allegro	manual			   exlights(3)

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

       #include	<allegro.h>

       Example exlights

       This program shows one way to implement colored lighting	effects	 in  a
       hicolor video mode. Warning: it is not for the faint of heart!  This is
       by no means the simplest	 or  easiest  to  understand  method,  I  just
       thought it was a	cool concept that would	be worth demonstrating.

       The  basic  approach  is	to select a 15 or 16 bit screen	mode, but then
       draw onto 24 bit	memory bitmaps.	Since we only need the bottom  5  bits
       of each 8 bit color in order to store 15	bit data within	a 24 bit loca-
       tion, we	can fit	a light	level into the top 3 bits.  The	tricky bit  is
       that  these  aren't actually 24 bit images at all: they are implemented
       as 8 bit	memory bitmaps,	and we just store the red level	in one	pixel,
       green  in  the  next,  and  blue	in the next, making the	total image be
       three times wider than we really	wanted.	 This allows us	to use all the
       normal  256  color  graphics  routines for drawing onto our memory sur-
       faces, most importantly the lookup table	 translucency,	which  can  be
       used  to	combine	the low	5 bits of color	and the	top 3 bits of light in
       a single	drawing	operation.  Some trickery is needed  to	 load  24  bit
       data  into this fake 8 bit format, and of course	it needs a custom rou-
       tine to convert the resulting image while  copying  it  across  to  the
       hardware	screen.

       This  program  chugs  slightly  on my p133, but not significantly worse
       than any	double buffering in what amounts to a 1920x640,	256 color res-
       olution.	 The light blending doesn't seem to slow it down too badly, so
       I think this technique would be quite usable on faster machines and  in
       lower  resolution  hicolor  modes. The biggest problem is that although
       you keep	the full 15 bit	color resolution,  you	only  get  3  bits  of
       light, ie. 8 light levels.  You can do some nice	colored	light patches,
       but smooth gradients aren't going to work too well :-)

       BITMAP(3),  COLOR_MAP(3),  END_OF_MAIN(3),   PALETTE(3),	  SCREEN_H(3),
       SCREEN_W(3),   allegro_error(3),	 allegro_init(3),  allegro_message(3),
       bitmap_color_depth(3), blit(3), bmp_unwrite_line(3), bmp_write_line(3),
       circlefill(3),  clear_bitmap(3),	 clear_keybuf(3),  color_map(3),  cre-
       ate_bitmap_ex(3), destroy_bitmap(3), draw_trans_sprite(3), fixatan2(3),
       fixsqrt(3),   fixtoi(3),	  getb_depth(3),  getg_depth(3),  getpixel(3),
       getr_depth(3),  hsv_to_rgb(3),  install_keyboard(3),  install_mouse(3),
       install_timer(3),  itofix(3), key(3), keypressed(3), line(3), load_bit-
       map(3),	makecol(3),   mouse_x(3),   mouse_y(3),	  poll_mouse(3),   re-
       place_filename(3),   retrace_count(3),	screen(3),  select_palette(3),
       set_color_conversion(3),	set_color_depth(3), set_gfx_mode(3)

Allegro				 version 4.4.3			   exlights(3)


Want to link to this manual page? Use this URL:

home | help