void drawing_mode(int mode, BITMAP *pattern, int x_anchor, int y_anchor);
Ajusta el modo de dibujo gr�fico. Esto s�lo afecta a las rutinas
geom�tricas como putpixel, lines, rectangles, circles, polygons,
floodfill, etc, y no a la salida de texto, blits o dibujado de sprites.
El modo deber�a ser uno de los siguientes valores.
DRAW_MODE_SOLID - por defecto, dibujado s�lido DRAW_MODE_XOR - dibujado or-exclusivo DRAW_MODE_COPY_PATTERN - rellenado con patr�n multicolor DRAW_MODE_SOLID_PATTERN - rellenado con patr�n de un solo color DRAW_MODE_MASKED_PATTERN - rellenado con patr�n enmascarado DRAW_MODE_TRANS - fundido de color translucenteEn DRAW_MODE_XOR, los pixels son escritos en el bitmap con una operaci�n or-exclusiva en vez de con la copia simple, por lo que dibujar la misma figura dos veces la borrar�. Como esto requiere tanto leer como escribir en el bitmap de memoria, el dibujado xor es mucho m�s lento que el modo normal.
Con los modos con patr�n, usted indica un bitmap de patr�n que ser� dibujado sobre la superficie de la figura. Allegro almacena un puntero a este bitmap en vez de una copia, por lo que no debe destruir el bitmap mientras es usado como patr�n. El ancho y alto del patr�n debe ser un m�ltiplo de dos, pero pueden ser diferentes, es decir, un patr�n de 64x16 est� bien, pero uno de 17x3 no. El patr�n ser� repetido en una rejilla comenzando en el punto (x_anchor, y_anchor). Normalmente deber�a pasar cero para estos valores, lo que se dejar� dibujar varias figuras y que sus patrones se junten en los bordes. Un alineamiento de cero puede sin embargo ser peculiar cuando mueves una figura con patr�n por la pantalla, porque la figura se mover�, pero el patr�n no, por lo que en algunas situaciones quiz�s se interese alterar las posiciones del ancla (anchor).
Cuando selecciona DRAW_MODE_COPY_PATTERN, los pixels simplemente son copiados del bitmap de patr�n al bitmap destino. Esto le permite usar patrones multicolor, y significa que el color que pase a la rutina de dibujado es ignorado. Este es el m�s r�pido de los modos con patr�n.
En DRAW_MODE_SOLID_PATTERN, cada pixel del patr�n es comparado con el color de m�scara (cero en modos de 256 colores, rosa fucsia en modos truecolor). Si el pixel del patr�n es s�lido, un pixel del color que pas� a la rutina de dibujado es escrito en el bitmap destino, de otro modo escribe un cero. El patr�n es por esto tratado como una m�scara monocroma, que le permite usar el mismo patr�n para dibujar diferentes figuras con colores diferentes, pero previene el uso de patrones multicolores.
DRAW_MODE_MASKED_PATTERN es casi lo mismo que DRAW_MODE_SOLID_PATTERN, pero los pixels enmascarados son ignorados en vez de copiados como cero, por lo que el fondo se ver� a trav�s de los agujeros.
En DRAW_MODE_TRANS, la tabla global color_map o las funciones de fundido truecolor son usadas para imprimir pixels sobre la imagen existente. Esto s�lo lo puede usar despu�s de haber creado una tabla de color (para modos de 256 colores) o un mapa de fundido (para modos truecolor). Ya que esto conlleva tanto leer como escribir en un bitmap de memoria, el dibujado transl�cido es muy lento si dibuja directamente en la memoria de v�deo, por lo que siempre que pueda deber�a dibujar sobre un bitmap de memoria en vez de sobre la pantalla.
void xor_mode(int xor);
Esto es un atajo para activar o desactivar el modo de dibujado xor.
Llamar xor_mode(TRUE) es equivalente a drawing_mode(DRAW_MODE_XOR, NULL,
0, 0);
void solid_mode();
Esto es un atajo para seleccionar el dibujado s�lido. Es equivalente a
llamar drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0);
En modos de v�deo con paleta, la translucencia y la iluminaci�n son implementadas con una tabla precalculada de 64k, que contiene el resultado de la combinaci�n de cualquier color c1 con c2. Tiene que crear esta tabla antes de usar cualquiera de las rutinas de iluminaci�n o translucencia. Dependiendo de c�mo se crea tabla, ser� posible hacer un rango diferente de efectos. Por ejemplo, la translucencia se puede implementar usando un color intermedio entre c1 y c2 como resultado de su combinaci�n. La iluminaci�n se consigue tratando uno de los colores como nivel de luz (0-255) en vez de como color, y creando la tabla apropiadamente. Un rango de efectos especializados es posible, si por ejemplo sustituye cualquier color con otro color haciendo los colores individuales de origen o destino totalmente s�lidos o invisibles.
Las tablas de color pueden ser precalculadas con la utilidad colormap, o generadas en tiempo real. La estructura COLOR_MAP se define as�:
typedef struct { unsigned char data[PAL_SIZE][PAL_SIZE]; } COLOR_MAP;extern COLOR_MAP *color_map;
void create_light_table(COLOR_MAP *table, PALETTE pal,
int r, g, b, void (*callback)(int pos));
Rellena la tabla de color especificada con los datos precalculados
necesarios para hacer efectos de luz con la paleta especificada. Cuando
se combinan los colores c1 y c2 en esta tabla, c1 es tratado como nivel
de luz entre 0-255. Con un nivel de luz de 255, la tabla devuelve el
color c2 sin cambiar, con un nivel de luz 0, devuelve los valores r, g, b
que especificaste al llamar a esta funci�n, y con un valor de luz
intermedio, la tabla devolver� un color que est� entre los dos extremos.
Si la funci�n de callback no es NULL, ser� llamada 256 veces durante el
c�lculo, permiti�ndole ense�ar un indicador de progreso.
void create_trans_table(COLOR_MAP *table, PALETTE pal,
int r, g, b, void (*callback)(int pos));
Rellena la tabla de color especificada con los datos precalculados
necesarios para hacer efectos de translucencia con la paleta
especificada. Cuando se combinan los colores c1 y c2 en esta tabla, el
resultado ser� un color intermedio entre los dos. Los valores r, g, b que
especificas es la solides de cada componente de color, desde 0
(totalmente transparente) hasta 255 (totalmente s�lido). Para una solidez
del 50%, pasa 128. Esta funci�n trata el color origen #0 como un caso
especial, dejando el destino sin cambiar siempre que se encuentre un
pixel del color cero, para que los sprites con m�scara puedan ser
dibujados correctamente. Si la funci�n de callback no es NULL, ser�
llamada 256 veces durante el c�lculo, permiti�ndole ense�ar un indicador
de progreso.
void create_color_table(COLOR_MAP *table, PALETTE pal,
RGB (*blend)(PALETTE pal, int x, int y),
void (*callback)(int pos));
Rellena la tabla de color especificada con los datos precalculados
necesarios para hacer efectos propios con la paleta especificada,
llamando a las funciones de fundido para determinar el resultado de cada
combinaci�n de color. A su rutina de fundido se le pasar� un puntero a la
paleta y a los dos colores que ser�n combinados, y su deber� devolver un
resultado en formato RGB (0-63). Allegro buscar� entonces en la paleta el
color m�s parecido al color RGB que quiere, por lo que no hace falta que
la paleta tenga un color exacto al devuelto por la funci�n. Si la funci�n
de callback no es NULL, ser� llamada 256 veces durante el c�lculo,
permiti�ndole ense�ar un indicador de progreso.
En los modos de v�deo truecolor, la translucencia y la iluminaci�n son implementadas con un conjunto de funciones de fundido de la forma:
unsigned long (*BLENDER_FUNC)(unsigned long x, unsigned long y);Esta rutina toma dos colores, los descompone en sus componentes de rojo, verde y azul, los combina como sea necesario, y entonces mezcla el resultado de vuelta en un solo color de retorno. Para soportar alpha variable (es decir, diferentes cantidades de translucencia o niveles de luz), hay 256 versiones de la funci�n de fundido: una para cada posible valor alpha. Estos se almacenan en una tabla:
typedef struct { BLENDER_FUNC blend[256]; } BLENDER_MAP;Ya que estas rutinas pueden ser usadas para diferentes profundidades de color, hay tres de estas tablas, una para uso con pixels de 15 bits 5.5.5, una para pixels de 16 bits 5.6.5, y una para pixels de 24 bits 8.8.8 (esta se puede compartir con el c�digo de 32 bits ya que el almacenamiento en bits es igual).
void set_trans_blender(int r, int g, int b, int a);
Selecciona el conjunto de funciones de fundido truecolor a usar, que
realizan una simple interpolaci�n lineal entre el color origen y destino.
Cuando una funci�n de dibujado translucente es llamada, el par�metro
alpha ajustado por esta rutina es usado para seleccionar una de las
funciones de fundido de la tabla, y esa funci�n es llamada para fundir
cada pixel con el color existente de destino (es decir, el par�metro
alpha controla la solidez de dibujado, de 0 a 255). Cuando una funci�n de
iluminaci�n es llamada, el par�metro alpha es ignorado, y se usa el color
pasado por la funci�n de sprite para seleccionar un nivel alpha. La
rutina de fundido ser� usada entonces para interpolar entre el color del
sprite y el valor RGB que fue pasado a esta funci�n (en un rango 0-255).
void set_blender_mode(BLENDER_MAP *b15, *b16, *b24, int r, g, b, a);
Especifica un conjunto propio de rutinas de fundido truecolor, proveyendo
una tabla de punteros a funci�n para todas las profundidades de color
posibles (estos par�metros pueden ser NULL si no va a usar ese formato
de pixel).