views:

140

answers:

2

I'm using the Allegro game library to make a tile game. I want the tiles to get exponentially brighter. Unfortunately Allegro does not have a "Brighten" feature. What I then decided to do, was blit a tile to the buffer, then for each pixel that it just blited for that tile, I increased their rgb values and putpixel. The big problem with this is it severely decreased my framerate since it does twice as much work. Is there any way I can achieve this without having a tile bitmap for each tile that is slightly brighter (which would be ridiculous). Thanks

A: 

It might be possible with palettes: http://alleg.sourceforge.net/stabledocs/en/alleg011.html

I don't know much about Allegro, but I know that in the 8-bit games of old, fading is usually accomplished by altering the color table that the video card reads from when rendering, hence giving a constant-time way to update many pixels on the screen simultaneously.

Hope that helps :)

Joey Adams
Thanks, i'm using 32 bit true color unfortunatly
Milo
A: 

You can use:

draw_lit_sprite

what it does is take a BITMAP and draw it using a "light" that you have to set before by using this function:

set_trans_blender

so basically, what you have to do is:

    //Init allegro code here
    init_allegro_stuff();

    //It takes as arguments red, green, blue, alpha
    //so in this case it's a white light
    set_trans_blender(255, 255, 255, 255);

    //Draws the sprite like draw_sprite but with intensity
    draw_lit_sprite(buffer, yourSprite, x, y, intensity);

hope it helps :)

Thiago Valle