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.
En 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.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 translúcido
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 sea 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 le dejará dibujar varias figuras y que sus patrones se junten en los bordes. Un alineamiento de cero puede sin embargo ser peculiar cuando mueva 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 le 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 se usan para sobreimprimir pixels encima de la imágen existente. Esta sólo debe usarse después de haber constuído la tabla de mapeo de color (para modos de 256 colores) o las funciones de fundido (para modos truecolor). Dado que debe leer y escribir en la memoria del bitmap, el dibujado transparente es muy lento si dibuja directamente en la memora de vídeo, así que siempre que sea posible debería dibujar en bitmaps de memoría.
Relacionado con: xor_mode, solid_mode, color_map, set_trans_blender.void xor_mode(int on);
Relacionado con: drawing_mode.void solid_mode();
Relacionado con: drawing_mode.
En modos de vídeo con paleta, la translucidez 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 translucidez. Dependiendo de cómo se crea tabla, será posible hacer un rango diferente de efectos. Por ejemplo, la translucidez 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í:
extern COLOR_MAP *color_map;typedef struct { unsigned char data[PAL_SIZE][PAL_SIZE]; } COLOR_MAP;
Relacionado con: create_color_table, create_light_table, create_trans_table, set_trans_blender, draw_trans_sprite, draw_lit_sprite, drawing_mode.void create_light_table(COLOR_MAP *table, const PALETTE pal, int r, g, b, void (*callback)(int pos));
Relacionado con: color_map, create_trans_table, create_color_table, create_blender_table, draw_lit_sprite.void create_trans_table(COLOR_MAP *table, const PALETTE pal, int r, g, b, void (*callback)(int pos));
Relacionado con: color_map, create_light_table, create_color_table, draw_trans_sprite.void create_color_table(COLOR_MAP *table, const PALETTE pal, void (*blend)(PALETTE pal, int x, int y, RGB *rgb), void (*callback)(int pos));
Relacionado con: color_map, create_light_table, create_trans_table, create_blender_table.void create_blender_table(COLOR_MAP *table, const PALETTE pal, void (*callback)(int pos));
Relacionado con: color_map, create_light_table, create_trans_table, create_color_table, set_trans_blender, set_blender_mode.
En los modo de video truecolor, la translucidez y la iluminación están implementadas por una función de fundido de la forma:
Esta rutina toma dos colores como parámetros, los descompone en sus componenetes rojo, verde y azul, los combina acorde con el valor de interpolación n, y entonces fusiona de nuevo el resultado en un solo valor de color, que devuelve.unsigned long (*BLENDER_FUNC)(unsigned long x, y, n);
Como estas rutinas se pueden usar desde diferentes profundidades de color, hay tres callbacks, una para usar con píxels de 15 bits (5.5.5), una para píxels de 16 bits (5.6.5), y otra para píxels de 24 bits (8.8.8), que puede compartirse entre el código de 24 y 32 bits dado que el empaquetamiento de bits es el mismo.
void set_trans_blender(int r, int g, int b, int a);
Selecciona el conjunto de rutinas de fundido por defecto, que hacen una
interpolación lineal simple entre los colores fuente y destino. Cuando se
llama a una función de dibujo translúcido, el parámetro alfa ajustado por
esta rutina se usa como factor de interpolación, que controla la solidez
del dibujado (de 0 a 255). Cuando una función de dibujo iluminado de
es llamada, el valor alfa se ignora, y se usa el color pasado a la
función de sprite para seleccionar un nivel alfa. La rutina de fundido
se usará para interpolar entre el color del sprite y los valores RGB que
se le pasaron a esta función (en un rango de 0 a 255).
Relacionado con: color_map, draw_trans_sprite, draw_lit_sprite, drawing_mode, set_add_blender, set_burn_blender, set_color_blender, set_blender_mode, set_alpha_blender, set_write_alpha_blender, set_difference_blender, set_dissolve_blender, set_dodge_blender, set_hue_blender, set_invert_blender, set_luminance_blender, set_multiply_blender, set_saturation_blender, set_screen_blender.void set_alpha_blender();
Relacionado con: set_trans_blender, draw_trans_sprite, draw_trans_rle_sprite, set_write_alpha_blender.void set_write_alpha_blender();
Relacionado con: set_alpha_blender, draw_trans_sprite, drawing_mode.void set_add_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_burn_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_color_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_difference_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_dissolve_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_dodge_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_hue_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_invert_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_luminance_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_multiply_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_saturation_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_screen_blender(int r, int g, int b, int a);
Relacionado con: set_trans_blender, drawing_mode.void set_blender_mode(BLENDER_FUNC b15, b16, b24, int r, g, b, a);
Relacionado con: draw_lit_sprite, drawing_mode, set_blender_mode_ex, set_trans_blender, color_map, draw_trans_sprite.void set_blender_mode_ex(BLENDER_FUNC b15, b16, b24, b32, b15x, b16x, b24x, int r, g, b, a);
Relacionado con: set_blender_mode, set_alpha_blender.