void set_color_depth(int depth);
Especifica el formato gr�fico que ser� usado en las siguientes llamadas a
set_gfx_mode() y create_bitmap(). Las profundidades v�lidas son 8 (por
defecto), 15, 16, 24 y 32 bits.
int set_gfx_mode(int card, int w, int h, int v_w, int v_h);
Cambia el modo gr�fico. El par�metro card debe ser uno de los siguientes
valores:
GFX_TEXT - vuelve al modo texto GFX_AUTODETECT - deja que Allegro seleccione la tarjeta apropiada GFX_VGA - VGA est�ndar (320x200, 320x100, o 160x120) GFX_MODEX - selecciona un modo VGA lineal modificado (modo-X) GFX_VESA1 - usa el controlador VESA 1.x GFX_VESA2B - usa el controlador VBE 2.0 con bancos GFX_VESA2L - usa el controlador VBE 2.0 con framebuffer lineal GFX_VESA3 - usa el VBE 3.0 driver GFX_VBEAF - usa el controlador VBE/AF acelerado por hardware GFX_XTENDED - usa el controlador 640x400 en modo desencadenadoLos par�metros w y h especifican la resoluci�n gr�fica que quiere. Los modos posibles son:
"Hace tiempo, poner valores o combinaciones ilegales o no soportadas en los registros de la tarjeta de v�deo pod�a ser peligroso para su salud y para su monitor. *Nunca* he declarado que esto no puede pasar si usa TWEAK, pero estoy muy seguro de que esto nunca pasar�. Nunca he o�do que usar TWEAK o cambiar manualmente los registros de la VGA hayan ocasionado da�o alguno."
Puede usar el programa test afinfo para comprobar si tiene un controlador VBE/AF, y para ver qu� resoluciones soporta.
Los controladores VBE/AF de SciTech requieren que el acceso con nearptr est� activado, por lo que cualquier puntero err�neo puede bloquear su m�quina cuando estos controladores est�n en uso. Esto significa que puede ser buena idea usar VESA mientras depura su programa, y activa VBE/AF s�lo cuando el c�digo funcione correctamente. Los controladores FreeBE/AF no tienen este problema.
Por ejemplo, puede seleccionar el modo 640x480 en el cual el monitor act�a como una ventana sobre la pantalla virtual de 1024x1024, y entonces mover la pantalla visible dentro del �rea grande. Inicialmente, la parte visible est� posicionada en la parte superior izquierda de la memoria de v�deo. Esta configuraci�n ser�a as�:
(0,0)------------(640,0)----(1024,0) | | | | pantalla visible | | | | | (0,480)----------(640,480) | | | | resto de la memoria de v�deo | | | (0,1024)--------------------(1024,1024)�Qu� es eso? �Est� viendo esto con una fuente proporcional? Jejeje.
Cuando llama set_gfx_mode(), los par�metros v_w y v_h representan el tama�o m�nimo de la pantalla virtual que es aceptable para su programa. El rango de tama�os posibles es normalmente muy restringido, y es posible que Allegro acabe creando una pantalla virtual m�s grande que la que solicit�. En una SVGA con una mega de vram cuente con conseguir una pantalla virtual de 1024x1024 (256 colores) o 1024x512 (15 o 16 bpp), y con 512k de ram puede conseguir 1024x512 (256 colores). Otros tama�os pueden ser y no ser posibles: no asuma que vayan a funcionar. En modo-X la anchura virtual puede ser cualquier m�ltiplo de 8 mayor o igual a la anchura de la pantalla, y la altura virtual se ajustar� de la misma forma (la VGA tiene 256k de vram, por lo que la altura virtual ser� 256*1024/virtual_width).
Despu�s de seleccionar el modo gr�fico, los tama�os f�sicos y virtuales pueden obtenerse con las macros SCREEN_W(), SCREEN_H(), VIRTUAL_W(), y VIRTUAL_H().
Si Allegro no es capaz de seleccionar un modo apropiado, set_gfx_mode() devuelve un modo negativo y almacena la descripci�n del problema en allegro_error. De otro modo devuelve cero.
extern int gfx_capabilities;
Campo de bits describiendo las capacidades del controlador gr�fico y
hardware de v�deo actual. Esto puede contener cualquiera de los
siguientes biestables:
GFX_CAN_SCROLL:
Indica que la funci�n scroll_screen() puede ser usada con este
controlador.
GFX_CAN_TRIPLE_BUFFER:
Indica que las funciones request_scroll() y poll_scroll() pueden ser
usadas con este controlador. A modo especial, el controlador modo-X
s�lo soporta triple buffering cuando el simulador de retrazo est�
instalado, por lo que debe llamar timer_simulate_retrace() antes de
hacer algo con triple buffer en una resoluci�n de modo-X.
GFX_HW_CURSOR:
Indica que un puntero de rat�n por hardware est� siendo usado. Cuando
este biestable est� activado, puede dibujar sin problemas en la
pantalla sin tener que ocultar antes el puntero del rat�n. Tenga en
cuenta que no todo cursor gr�fico puede ser implementado via hardware:
en particular, VBE/AF s�lo soporta im�genes de 2 colores y de hasta
32x32 pixels, donde el segundo color es un inverso exacto del primero.
Esto significa que Allegro puede necesitar alternar entre cursores por
hardware o software en cualquier punto durante la ejecuci�n de su
programa, por lo que no debe asumir que esta biestable ser� constante
durante largos periodos de tiempo. S�lo le dice si un cursor hardware
est� siendo usado ahora, y puede cambiar cuando oculte/ense�e el
puntero.
GFX_HW_HLINE:
Indica que la versi�n opaca normal de la funci�n hline() est�
implementada usando aceleraci�n por hardware. Esto incrementar� el
rendimiento, no s�lo de hline(), sino tambi�n de otras funciones que
la usen internamente, por ejemplo circlefill(), triangle(), y
floodfill().
GFX_HW_HLINE_XOR:
Indica que la versi�n XOR de la funci�n hline(), y cualquier otra que
la use, estan implementadas usando aceleraci�n por hardware.
GFX_HW_HLINE_SOLID_PATTERN:
Indica que los modos s�lidos y con patrones de la funci�n hline(), y
cualquier otra funci�n que la use, estan implementadas usando
aceleraci�n por hardware (lea nota abajo).
GFX_HW_HLINE_COPY_PATTERN:
Indica que el modo copia de patr�n de la funci�n hline(), y cualquier
otra funci�n que la use, estan implementadas usando aceleraci�n por
hardware (lea nota abajo).
GFX_HW_FILL:
Indica que la versi�n opaca de las funciones rectfill(), clear() y
clear_to_color(), est�n implementadas usando aceleraci�n por hardware.
GFX_HW_FILL_XOR:
Indica que la versi�n XOR de la funci�n rectfill() est� implementada
usando aceleraci�n por hardware.
GFX_HW_FILL_SOLID_PATTERN:
Indica que los modos s�lidos y con patrones de la funci�n rectfill()
est�n implementados usando aceleraci�n por hardware (lea nota abajo).
GFX_HW_FILL_COPY_PATTERN:
Indica que el modo copia de patr�n de la funci�n rectill() est�
implementado usando aceleraci�n por hardware (lea nota abajo).
GFX_HW_LINE:
Indica que la versi�n opaca de las funciones line() y vline() est�
implementada usando aceleraci�n por hardware.
GFX_HW_LINE_XOR:
Indica que la versi�n XOR de las funci�nes line() y vline() est�
implementada usando aceleraci�n por hardware.
GFX_HW_TRIANGLE:
Indica que la versi�n opaca de la funci�n triangle() est� implementada
usando aceleraci�n por hardware.
GFX_HW_TRIANGLE_XOR:
Indica que la versi�n XOR de la funci�n triangle() est� implementada
usando aceleraci�n por hardware.
GFX_HW_TEXTOUT_FIXED:
Indica que la expansi�n de caracteres monocromos (para fuentes
monoespaciadas de 8x8 y 8x16) est� implementada usando aceleraci�n por
hardware.
GFX_HW_VRAM_BLIT:
Indica que hacer un blit desde una parte de la pantalla a otra est�
implementado usando aceleraci�n por hardware. Si este biestable est�
activado, hacer blits dentro de la memoria de v�deo ser� ciertamente
el modo m�s r�pido para ense�ar una imagen, por lo que ser�a �til
almacenar parte de sus gr�ficos m�s usados en una posici�n oculta de
la memoria de v�deo.
GFX_HW_VRAM_BLIT_MASKED:
Indica que la rutina masked_blit() es capaz de hacer una copia de una
parte de v�deo a otra usando aceleraci�n por hardware, y que
draw_sprite() usar� copia por hardware cuando un sub-bitmap de la
pantalla sea la imagen origen. Si este biestable est� activado, el
copiar desde la memoria de v�deo ser� casi seguramente el modo m�s
r�pido para visualizar una imagen, por lo que podr�a ser rentable
almacenar algunos de sus sprites m�s usados en una porci�n no visible
de la memoria de v�deo.
Aviso: �si esta biestable no est� activado, masked_blit() y draw_sprite() no funcionar�n correctamente cuando los use con la memoria de v�deo como bitmap origen! S�lo puede usar estas funciones para copiar memoria de v�deo si est�n soportadas por el hardware.
GFX_HW_MEM_BLIT:
Indica que hacer un blit desde un bitmap de memoria a la pantalla usa
aceleraci�n por hardware.
GFX_HW_MEM_BLIT_MASKED:
Indica que masked_blit() y draw_sprite() usan aceleraci�n por hardware
cuando la imagen fuente es un bitmap de memoria, y la imagen destino
es la pantalla f�sica.
Nota: incluso cuando la informaci�n diga que el dibujo con patr�n est� soportado usando aceleraci�n por hardware, no ser� posible para cualquier tama�o de patr�n. El controlador VBE/AF s�lo soporta patrones de hasta 8x8 pixels, y usar� la versi�n original no acelerada por hardware de las rutinas de dibujo siempre que use patrones m�s grandes.
Nota2: estas caracter�sticas de aceleraci�n por hardware s�lo surtir�n efecto cuando dibuje directamente sobre la pantalla f�sica, o un sub-bitmap de �sta. La aceleraci�n por hardware es �til sobre todo con una configuraci�n de cambio de p�ginas o triple buffer, y probablemente no habr� diferencia de rendimiento con el sistema "dibuja en un bitmap de memoria, entonces c�pialo a la pantalla".
int scroll_screen(int x, int y);
Intenta hacer un scroll de la pantalla para ense�ar una parte diferente
de la pantalla virtual (que ser� posicionada inicialmente en 0, 0,
esquina superior izquierda). Devuelve cero con �xito: podr�a fallar si el
controlador gr�fico no soporta scroll por hardware o si la pantalla
virtual no es suficientemente grande. Esta funci�n esperar� un retrazo
vertical si la tarjeta lo requiere, por lo que no necesita llamar vsync()
manualmente. Puede usar esto para mover la pantalla de visualizaci�n en
un espacio virtual grande, o para cambiar hacia/desde dos �reas de la
pantalla virtual que no se sobreescriben (intercambio de p�ginas). Tenga
en cuenta que para dibujar fuera de la posici�n original en la pantalla,
deber� alterar el �rea de recorte: mire abajo.
Scroll en modo-X es posible en cualquier tarjeta. Desafortunadamente la mayor�a de las implementaciones VESA solo pueden hacer scroll en incrementos de 4 pixels, por lo que hacer un scroll horizontal es imposible en modos SVGA. Esto es una verg�enza, pero no puedo solucionarlo. Un n�mero bien grande de implementaciones VESA tienen fallos cuando hay que hacer scroll en modos truecolor, por lo que le recomiendo no usar esta rutina en resoluciones truecolor a no ser que est� seguro que SciTech Display Doctor esta instalado.
Allegro se ocupar� de la sincronizaci�n con el retrazo vertical cuando haga un scroll de la pantalla, por lo que no hace falta llamar vsync() antes. Esto significa que scroll_screen() tiene los mismos efectos de retraso que vsync().
int request_scroll(int x, int y);
Esta funci�n es usada con triple buffering. Hace una petici�n de scroll
por hardware a la posici�n especificada, pero volver� inmediatamente en
vez de esperar el retrazo. El scroll tendr� lugar despu�s del siguiente
retrazo, pero puede seguir ejecutando su c�digo mientras usa la rutina
poll_scroll() para detectar cu�ndo ocurre el scroll en realidad (mire
examples/ex20.c). Triple buffering es s�lo posible en cierto hardware:
s�lo funcionar� en modo-X si el simulador de retrazo est� activo (pero
esto no funciona bien en win95), y est� soportado por los controladores
VBE 3.0 y VBE/AF para un n�mero limitado de tarjetas gr�ficas de alto
nivel. Puede mirar el bit GFX_CAN_TRIPLE_BUFFER del biestable
gfx_capabilities para ver si funcionar� con el controlador actual.
int poll_scroll();
Esta funci�n es usada con triple buffering. Chequea el estado de un
scroll por hardware iniciado previamente por la rutina request_scroll(),
devolviendo no-cero si todav�a est� esperando a que ocurra, y cero si ya
ha ocurrido.
int show_video_bitmap(BITMAP *bitmap);
Solicita intercambiar la p�gina de pantalla hardware para visualizar el
objeto bitmap de v�deo especificado, que debe tener el mismo tama�o que
la pantalla f�sica, y debe haber sido obtenido usando la funci�n
create_video_bitmap(). Devuelve cero si no hubo problemas. Esta funci�n
esperar� un retrazo vertical si su tarjeta de v�deo lo requiere, por lo
que no hace falta que llame vsync() manualmente.
int request_video_bitmap(BITMAP *bitmap);
Esta funci�n se usa con triple buffering. Solicita intercambiar la p�gina
de pantalla al objeto bitmap de v�deo especificado, pero retorna
inmediatamente en vez de esperar el retrazo. El intercambio tendr� lugar
con el siguiente retrazo vertical, pero puede mientras puede seguir
ejecutando su c�digo y usar la rutina poll_scroll() para detectar cu�ndo
ocurre el intercambio realmente. Triple buffering s�lo es posible en
determinado hardware: mire los comentarios de request_scroll().
int request_modex_scroll(int x, int y);
int poll_modex_scroll();
Versiones obsoletas de request_scroll() y poll_scroll(), preservadas para
mantener la compatibilidad con aplicaciones antiguas.
void split_modex_screen(int line);
Esta funci�n s�lo est� disponible en modo-X. Parte la pantalla VGA en dos
partes en la l�nea especificada. En la mitad superior puede hacer scroll
hacia cualquier parte de la vram con la funci�n scroll_screen(), pero la
parte inferior quedar� fija y ense�ar� la pantalla desde la posici�n (0,
0). Despu�s de partir la pantalla, generalmente querr�s hacer un scroll de
tal forma que la parte superior empiece m�s abajo en la memoria de v�deo,
y crear dos sub-bitmas para acceder a las dos secciones (mire
examples/ex19.c, demuestra c�mo hacerlo). Para desactivar la pantalla
partida, llame split_modex_screen(0).