Histórico

Tecnología DirectX

Hasta hace un año más o menos, si un desarrollador de software quería crear una aplicación multimedia de alto rendimiento que aprovechase toda la potencia del hardware del PC no le quedaba más remedio que crear la aplicación para que se ejecutase sobre MS-DOS utilizando un extensor de DOS de 32 bits y programando directamente el hardware de la plataforma PC/AT.

Esto se debía a que los sistemas operativos Windows de Microsoft están diseñados para proporcionar al programador de aplicaciones una total independencia del hardware instalado en el ordenador sobre el cual se ejecuta el programa. Esta independencia de la configuración física de la máquina se logra mediante el uso de controladores de dispositivo que se encargan de gestionar las peculiaridades del hardware instalado en el PC. Este software, es decir, los controladores de dispositivo, es proporcionado al usuario por los fabricantes del hardware, si bien Microsoft suele incluir en los CD-ROM de instalación de sus sistemas operativos los controladores necesarios para utilizar los dispositivos más comunes.

Se hacía necesario, por lo tanto, una especificación de software que proporcionara a los programadores una forma de acceder a los recursos del hardware pero que, al mismo tiempo, fuese independiente del dispositivo.

Ya hace alrededor de un año, Microsoft presentó a la comunidad de desarrolladores Windows una serie de API, englobadas bajo la denominación genérica de DirectX, que ofrecen al programador la posibilidad de gestionar a muy bajo nivel los recursos de vídeo, audio, dispositivos de control (teclado, ratón, joysticks, etc.) y de comunicaciones (módem y red, principalmente) pero, al mismo tiempo, sin necesidad de que sea necesario conocer los detalles del hardware instalado en un determinado ordenador.

La arquitectura de DirectX

La base de esta tecnología de Microsoft son los controladores de dispositivo encargados de gestionar el hardware instalado en el ordenador. Como todos nuestros lectores saben, los sistemas operativos Windows de Microsoft proporcionan a las aplicaciones una total independencia del hardware de la máquina mediante la utilización de controladores de dispositivo que son proporcionados por Microsoft o por los fabricantes de hardware.

Esta capa de software se encarga de proporcionar a otras porciones del sistema operativo una serie de servicios mediante los cuales se obtiene la independencia del hardware que hoy en día es vital para las aplicaciones.

En el caso de DirectX, Microsoft ha definido para todas las API que componen esta tecnología una serie de HAL (Hardware Abstraction Layer, Capa de Abstracción de Hardware) y HEL (Hardware Emulation Layer, Capa de Emulación de Hardware) que están contenidos en los controladores de dispositivo del hardware multimedia, de red y de entrada de datos que es gestionado por DirectX.

El HAL se encarga de presentar a las aplicaciones, de una forma independiente del hardware, las características físicas de los dispositivos que gestiona. De esta forma, por ejemplo, DirectDraw puede proporcionar al programador un puntero al buffer de vídeo u ofrecer una función mediante la cual es posible utilizar el blitter presente en la gran mayoría de chips aceleradores gráficos que se fabrican en la actualidad.

Cuando una determinada característica soportada por las API DirectX no tiene una implementación directa sobre el hardware, entra en juego el HEL. Esta capa de software forma parte de las librerías de enlace dinámico (DLL) que forman DirectX, y se encarga de emular, mediante software, las funciones que no están soportadas directamente mediante el hardware.

Como se puede ver, DirectX necesita controladores de dispositivo especialmente diseñados que dispongan de un HAL mediante el cual se pueda acceder a las características de aceleración soportadas por el hardware. En muchos casos como, por ejemplo, con las tarjetas de sonido, si el controlador de dispositivo no es compatible con DirectX el HEL se encarga de realizar una emulación lo más optimizada posible mediante el uso de las funciones soportadas por el controlador del dispositivo, si bien en esta situación se obtendrá un rendimiento inferior al que sería posible conseguir con un controlador que soporte DirectX.

DirectDraw

Esta API es la encargada de gestionar la memoria de vídeo de las tarjetas gráficas. Mediante el uso de las funciones soportadas por DirectDraw una aplicación es capaz de activar un modo de vídeo a pantalla completa, utilizar el blitter de la tarjeta gráfica, almacenar en la memoria de vídeo mapas de bits que posteriormente se usan, por ejemplo, para crear el escenario de un videojuego, etc.

DirectDraw está relacionado de forma muy íntima con Direct3D, ya que mediante DirectDraw se crean las superficies en las que Direct3D almacena las texturas que posteriormente aplica a los polígonos 3D que crea y las superficies sobre las cuales se produce el render.

Sin duda alguna, para los programadores que crean aplicaciones 2D, la característica más importante que proporciona DirectDraw es la posibilidad de acceder directamente al buffer de vídeo de la tarjeta gráfica de una forma independiente del hardware. Mediante esta característica es posible crear, bajo Windows 95 y Windows NT 4, aplicaciones que antes sólo habría sido posible desarrollar bajo MS-DOS debido, sobre todo, a problemas de velocidad.

Sin embargo, para acceder al buffer de vídeo directamente, el programador debe consultar mediante la API si la tarjeta gráfica dispone de un buffer lineal o utiliza el sistema de conmutación de bancos. Si se usa este último sistema el programador debe limitar al máximo los cambios de línea de pantalla, es decir, la forma más eficiente de trabajar es realizar todas las modificaciones necesarias a una línea de la pantalla y a continuación pasar a la siguiente. Esto es especialmente importante si la aplicación va a crear varias imágenes superpuestas, en cuyo caso se debe evitar crear la imagen final realizando tantas pasadas sobre el buffer de vídeo como imágenes se deseen superponer.

El programador debe tener en cuenta que al utilizar el sistema de conmutación de bancos Windows instala un gestor que detecta cuando se sobrepasa el límite del banco de memoria soportado por el chip gráfico. En dicho momento se genera una excepción, mediante la cual toma el control del ordenador el sistema operativo para cambiar el banco activo de la memoria de la tarjeta gráfica. Mediante este mecanismo Windows da la sensación de que siempre se trabaja con un buffer de vídeo lineal, aunque la tarjeta gráfica esté funcionando con conmutación de bancos. Un caso típico de este tipo de tarjetas son las basadas en el chip Vision864 de S3. Este acelerador 2D puede ser configurado para acceder al buffer de vídeo de forma lineal, pero si se realiza dicha selección se debe acceder los registros del chip mediante instrucciones de entrada/salida. Si, por el contrario, se desea acceder a los registros del Vision864 mediante instrucciones de acceso a memoria, los accesos al buffer de vídeo se realizan mediante conmutación de bancos. Desgraciadamente el controlador de dispositivo para este chip incluido en el kit de desarrollo DirectX utiliza el sistema de conmutación de bancos.

Al igual que ocurre con todas las API DirectX, el programador debe crear primero un objeto DirectDraw, tarea que se realiza mediante la función DirectDrawCreate. Esta función devuelve un puntero al objeto DirectDraw que se ha creado. Mediante este puntero la aplicación puede llamar posteriormente a cualquiera de las funciones soportadas por esta API.

Direct3D

Esta API es la encargada de gestionar el render en tiempo real de polígonos. Dispone de dos modos de trabajo: el modo inmediato y el modo retenido. Cada uno de estos modos está orientado a un tipo de aplicaciones

Revista Digital

Revistas Digitales

DealerWorld Digital

 



Otros Contenidos

Registro:

Eventos: