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

FreeBSD Manual Pages

  
 
  

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

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

SYNOPSIS
       #include	<allegro.h>

       Example exlights

DESCRIPTION
       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 :-)

SEE ALSO
       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_bitmap(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:
<https://man.freebsd.org/cgi/man.cgi?query=exlights&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help