Source: http://es.tldp.org/Allegro-es/web/online/alleg007.html
Timestamp: 2017-10-24 05:53:47+00:00

Document:
Manual de Allegro: 07 Modos gráficos
07 Modos gráficos
Relacionado con: set_gfx_mode, set_color_conversion, makecol, getr.
Solicita que en la siguiente llamada a set_gfx_mode() se intente usar la velocidad de refresco especificada, si es posible. No todos los controladores son capaces de esto, e incluso cuando pueden, no todas las velocidades serán posibles en cualquier hardware, por lo que el resultado puede diferir de lo que haya pedido. Tras la llamada a set_gfx_mode(), puede usar get_refresh_rate() para saber qué velocidad de refresco fue seleccionada. Por el momento, sólo el driver DOS VESA 3.0, X DGA 2.0 y algunos drivers de DirectX soportan esta función. La velocidad es especificada en Hz, ej: 60, 70. Para volver a la velocidad por defecto, pase el valor cero.
Relacionado con: set_gfx_mode, get_refresh_rate.
Devuelve la velocidad de refresco actual, si es conocida (no todos los controladores pueden devolver esta información). Devuelve cero si la velocidad de refresco actual es desconocida.
Relacionado con: request_refresh_rate.
Intenta crear una lista de todos los modos de vídeo soportados por un driver gráfico GFX determinado. Esta función devuelve un puntero a una lista de estructuras del tipo GFX_MODE_LIST que estan definidas como:
typedef struct GFX_MODE_LIST {
Si esta función devuelve NULL, significa que la llamada no tuvo éxito. El puntero mode apunta a la verdadera lista de modos de vídeo.
typedef struct GFX_MODE {
Esta lista termina con un elemento { 0, 0, 0 }.
Relacionado con: destroy_gfx_mode_list, set_gfx_mode, set_color_depth.
Borra de la memoria la lista de modos creada por get_gfx_mode_list().
Relacionado con: get_gfx_mode_list, set_gfx_mode, set_color_depth.
Cambia a modo gráfico. El parámetro card normalmente debería ser GFX_AUTODETECT, GFX_AUTODETECT_FULLSCREEN o GFX_AUTODETECT_WINDOWED, o puede mirar la documentación específica de su plataforma para tener una lista los drivers disponibles. Los parámetros w y h especifican que resolución de pantalla quiere.
Después de seleccionar el modo gráfico, los tamaños físicos y virtuales de la pantalla pueden obtenerse mediante las macros SCREEN_W, SCREEN_H, VIRTUAL_W, y VIRTUAL_H.
Como caso especial, si usa el código de driver mágico GFX_SAFE, Allegro garantizará que el modo siempre será establecido correctamente. Intentará seleccionar la resolución que pidió, y si falla, usará aquella resolución que sea fiable en la plataforma actual (esto es modo VGA a 320x200 bajo DOS, una resolución de 640x480 bajo Windows, la resolución actual del framebuffer bajo Linux si está soportada, etc). Si no puede establecer ningún modo gráfico de ninguna manera, devolverá un valor negativo indicando que debería abortar inmediatamente su programa, posiblemente tras informar al usuario de este hecho mediante allegro_message. Este driver falso es útil para situaciones en las que quiere establecer un modo gráfico que funcione, y no puede perder el tiempo probando diferentes resoluciones y haciendo la comprobación de errores. Tenga en cuenta, que tras una llamada con éxito a set_gfx_mode con este driver, no puede hacer ninguna asunción sobre el ancho o alto de la pantalla o su profundidad de color: su código deberá tratar con este pequeño detalle.
Finalmente, GFX_TEXT es otro driver mágico que normalmente cierra cualquier modo gráfico abierto anteriormente, impidiendo que pueda usar la variable global screen, y en aquellos entornos que tienen modos de texto, vuelve a ajustar aquél más parecido al activo antes de Allegro (normalmente 80x25). Con este driver los parámetros de tamaño de set_gfx_mode no significan nada en absoluto, así que puede dejarlos a cero o cualquier otro número que prefiera.
Relacionado con: allegro_error, Variables de configuración estándar, GFX_*/DOS, GFX_*/Windows, GFX_*/X, GFX_*/Linux, GFX_*/BeOS, set_color_depth, request_refresh_rate, screen, gfx_capabilities.
Establece de qué forma el programa debe manejar el hecho de ser enviado a un segundo plano si el usuario cambia a otro programa. No todos los modos posibles serán soportados por cada driver gráfico en cada plataforma: debe llamar a esta rutina tras iniciar el modo gráfico y si pide un modo que no es posible, esta rutina devolverá -1. Los modos disponibles son:
Desactiva el cambio de modo. Este modo está por defecto en sistemas monotarea como el DOS. Puede ser soportado en otras plataformas, pero debería usarlo con cuidado, porque sus usuarios no se impresionarán si quieren cambiar de programa, ¡pero usted no les deja!
Pone en pausa el programa mientras esté en segundo plano. La ejecución se restablecerá tan pronto como el usuario vuelva al programa. Este modo está por defecto en la mayoría de los entornos multitarea a pantalla completa, por ejemplo la consola de Linux.
Como SWITCH_PAUSE, pero este modo no se preocupa en recordar el contenido de la memoria de vídeo, por lo tanto de la pantalla, y los bitmaps de vídeo que haya creado se eliminarán después de que el usuario cambie de programa y vuelva otra vez. Este no es un modo terriblemente útil pero es el modo por defecto para los modos a pantalla completa bajo Windows porque DirectDraw es demasiado inútil para implementar algo mejor.
El programa seguirá ejecutándose en background, con la variable screen apuntando temporalmente a un buffer de memoria en los modos de vídeo a pantalla completa. Debe tener especial cuidado cuando use este modo, porque ocurrirán cosas malas si el bitmap de pantalla cambia cuando su programa no lo espera (lea más abajo).
Como SWITCH_BACKGROUND, pero este modo no se preocupa por acordarse del contenido de la memoria de vídeo (vea SWITCH_AMNESIA). De nuevo, es el único modo soportado por los drivers a pantalla completa de Windows que permite que su programa siga ejecutándose en segundo plano.
Acuérdese de tener mucho cuidado cuando use rutinas gráficas durante un contexto de cambio: siempre deberá llamar acquire_screen() antes de comenzar a dibujar en la pantalla y no la libere hasta que no haya acabado completamente, porque el mecanismo de fijado automático puede no ser suficientemente bueno que funcione mientras el programa se ejecuta en segundo plano o acaba de de pasar al primer plano.
Relacionado con: set_display_switch_callback, get_display_switch_mode.
Instala una función de notificación para el cambio de modo que fue previamente seleccionado por set_display_switch_mode(). El parámetro direction puede ser SWITCH_IN o SWITCH_OUT, dependiendo de si quiere ser avisado cuando se deje su programa o cuando se vuelva a él. A veces puede instalar funciones para las dos direcciones, pero no todas las plataformas las soportan, así esta función puede devolver -1 si su petición es imposible. Puede instalar diferentes funciones de cambio de modo al mismo tiempo.
Relacionado con: remove_display_switch_callback, set_display_switch_mode.
Elimina una función de notificación que fue previamente instalada mediante set_display_switch_callback(). Todas las funciones serán eliminadas automáticamente cuando llame a set_display_switch_mode().
Relacionado con: set_display_switch_callback.
Devuelve el modo de cambio de pantalla, en el mismo formato que se pasa a set_display_switch_mode().
Relacionado con: set_display_switch_mode.
Campo de bits describiendo las capacidades del controlador gráfico y el hardware de video actuales. Puede contener cualquiera de los siguientes bits:
Indica que las funciones request_scroll() y poll_scroll() se pueden usar con este driver. Si este bit no está activado es posible que la función enable_triple_buffer() sea capaz de activarlo.
Indica que un puntero de ratón por hardware está siendo usado. Cuando este bit 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 este bit 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.
Indica que la versión opaca de las funciones rectfill(), clear_bitmap() y clear_to_color(), están implementadas usando aceleración por hardware.
Indica que la expansión de carácter monocromo (para dibujo de texto) está implementada usando aceleración hardware.
Indica que hacer un blit desde una parte de la pantalla a otra está implementado usando aceleración por hardware. Si este bit 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.
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 o un bitmap de memoria de vídeo sea la imagen origen. Si este bit 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 bit 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.
Indica que hacer un blit desde un bitmap de sistema a la pantalla está acelerado por hardware. Note que puede haber alguna aceleración incluso si este bit no está activado, porque los bitmaps de sistema también se pueden beneficiar del blit de memoria normal a la pantalla. Este bit sólo estará activado si los bitmaps de sistema una aceleración mayor que la proporcionada por GFX_HW_MEM_BLIT.
Indica que las funciones masked_blit() y draw_sprite() están siendo aceleradas por hardware cuando la imagen fuente es un bitmap de sistema y el destino es la pantalla física. Note que puede haber alguna aceleración incluso si este bit no está activado, porque los bitmaps de sistema también se pueden beneficiar del blit de memoria normal a la pantalla. Este bit sólo estará activado si los bitmaps de sistema una aceleración mayor que la proporcionada por GFX_HW_MEM_BLIT_MASKED.
Relacionado con: enable_triple_buffer, screen, create_video_bitmap, scroll_screen, request_scroll, show_mouse.
Si el bit GFX_CAN_TRIPLE_BUFFER de la variable gfx_capabilities no está activado, puede intentar activarlo llamando esta función. En particular, si está trabajando en modo-X bajo DOS puro, esta rutina activará el simulador de retrazo temporizado, el cual entonces activará las funciones de triple buffering. Devuelve cero si el triple buffering está activado.
Relacionado con: gfx_capabilities, timer_simulate_retrace, request_scroll, request_video_bitmap.
Intenta hacer un scroll de la pantalla para mostrar una parte diferente de la pantalla virtual (que inicialmente se posicionará en 0,0, que es la esquina superior izquierda). Devuelve cero si ha tenido éxito: puede fallar si el controlador gráfico no soporta scroll por hardware o la pantalla virtual no es lo suficientemente grande. Puede usar esta función para mover la pantalla por un espacio de pantalla virtual grande, o para hacer un intercambio de páginas entre dos áreas de pantalla virtual que no estén solapadas. Tenga en cuenta que para dibujar fuera de la posición original de la pantalla deberá alterar el área de recorte: mire abajo.
El scroll en Modo-X es de fiar y funcionará en cualquier tarjeta. Desafortunadamente la mayoría de las implementaciones VESA sólo pueden hacer scroll horizontal en incrementos de cuatro pixels, así que hacer un scroll suave en modos SVGA es imposible. Es vergonzoso, pero no veo forma de solucionarlo. Un numero significativo de implementaciones VESA parecen tener muchos fallos cuando hay que hacer scroll en modos truecolor, por lo que recomiendo no usar esta rutina en modos truecolor a menos que esté seguro de que Scitech Display Doctor está instalado.
Allegro se ocupará de cualquier sincronización del retrazo vertical cuando hago un scroll de pantalla, así que no necesita llamar a vsync() antes. Esto significa que scroll_screen() tiene los mismos efectos de retraso que vsync().
Relacionado con: set_gfx_mode, show_video_bitmap, request_scroll, request_video_bitmap.
Esta función es usada para el triple buffering. Hace una petición de scroll por hardware a la posición especificada, pero vuelve inmediatamente en vez de esperar un retrazo. El scroll tendrá lugar durante el siguiente retrazo vertical, pero puede seguir ejecutando su código mientras y usar la rutina poll_scroll() para detectar cuando ha ocurrido el cambio por scroll (vea examples/ex3buf.c). El triple buffering sólo es posible en cierto hardware: funcionará en cualquier resolución de modo-X si el simulador de retrazo esta activo(pero no funciona bien bajo win95), y está suportado 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 campo de bits gfx_capabilities para ver si funcionará con el controlador actual. Esta función devuelve cero si no hubo problemas.
Relacionado con: poll_scroll, request_video_bitmap, gfx_capabilities, timer_simulate_retrace, scroll_screen.
Esta función es usada con triple buffering. Comprueba 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.
Relacionado con: request_scroll, request_video_bitmap.
Relacionado con: scroll_screen, create_video_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(). Devuelve cero si no hubo problemas.
Relacionado con: create_video_bitmap, scroll_screen, poll_scroll, request_scroll, gfx_capabilities, timer_simulate_retrace.

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución