| Artículos | 01 SEP 1997

Introducción a DirectDraw y Direct3D

Tags: Histórico
Eugenio Barahona.

Conozca la base de la tecnología DirectDraw y Direct3D, así como la forma de iniciar la implementación de aplicaciones que utilicen dichas API.

Ha pasado más de un año desde que Microsoft presentó una serie de librerías de funciones o APIs que, englobadas bajo la denominación genérica de DirectX, ofrecían a los programadores la posibilidad de aprovechar las características del hardware multimedia de una forma totalmente independiente del dispositivo. Esto quiere decir que, por ejemplo, una aplicación para Windows 95 que haga uso de DirectDraw puede acceder directamente a la memoria del buffer de vídeo de una tarjeta gráfica. Como se puede deducir, estas APIs están diseñadas para ofrecer al programador los mecanismos necesarios para desarrollar aplicaciones que ofrezcan un alto rendimiento gráfico.

Las razones que tuvo Microsoft para iniciar el desarrollo de esta serie de APIs son claras. Cuando apareció en el mercado Windows 95, y aún hoy, prácticamente todos los juegos que aparecían para compatibles PC se creaban para que se ejecutaran bajo MS-DOS. Esto se debe a que desde el viejo MS-DOS es posible acceder directamente a determinados recursos del hardware del ordenador, como por ejemplo el buffer de vídeo, gracias a lo cual se pueden programar aplicaciones muy optimizadas desde el punto de vista gráfico. Antes de que aparecieran las API DirectX este tipo de programación era imposible bajo Windows, por lo que la intención de Microsoft es que gracias a DirectX los creadores de videojuegos para PC se olviden del DOS y se centren en la programación de software recreativo para Windows 95.

La incorporación de las APIs DirectX, debido a su naturaleza de bajo nivel, hace que sea necesario modificar determinados componentes del sistema operativo encargados de gestionar el hardware del ordenador. Debido a esta razón Microsoft ha variado ligeramente la estructura del subsistema gráfico de Windows 95 y del resto de componentes del sistema operativo que se ven afectados por las APIs DirectX.

Arquitectura básica de DirectX

La base de todas las API englobadas en la tecnología DirectX son los controladores de dispositivo encargados de gestionar el hardware que manejan. A dichos controladores se les ha añadido la funcionalidad necesaria para comunicarse con capas del sistema operativo menos privilegiadas, es decir, que tienen un acceso más limitado a los recursos físicos del ordenador.

En el caso que estamos tratando, DirectDraw y Direct3D, los controladores de dispositivo de las tarjetas gráficas incorporan una HAL (Hardware Abstraction Layer, Capa de Abstración de Hardware) y una HEL (Hardware Emulation Layer, Capa de Emulación de Hardware). HAL es la parte del controlador de dispositivo encargado de presentar a las aplicaciones, de forma independiente del hardware, las distintas funcionalidades del procesador gráfico de que disponga la tarjeta gráfica. HEL es la parte encargada de emular mediante software las funciones que no estén implementadas directamente en el hardware de la tarjeta gráfica y que sean usadas por la aplicación que esté utilizando los servicios de DirectDraw o Direct3D. Por otra parte las APIs que forman el conjunto DirectX están basadas en la tecnología COM desarrollada por Microsoft, por lo que para acceder a algunas de estas API es necesario crear objetos COM utilizando llamadas a funciones como QueryInterface.

En la figura 1 se muestra de forma gráfica la relación existente entre una aplicación Win32, el GDI utilizado convencionalmente para generar gráficos en aplicaciones Windows, las API DirectDraw, Direct3D y ActiveMovie, los controladores de dispositivo y el hardware subyacente.

Arquitectura de una tarjeta gráfica

Básicamente un adaptador gráfico está formado por un procesador gráfico, un conversor de digital a analógico o DAC, una determinada cantidad de memoria RAM y la lógica necesaria para conectar la tarjeta al bus del ordenador. Hoy en día el procesador gráfico suele disponer de la capacidad necesaria para ejecutar determinadas funciones de forma independiente del microprocesador del PC, por lo que la tarjeta gráfica puede por ejemplo dibujar líneas, copiar bloques de una imagen o rellenar una zona de la pantalla con un determinado color. Por otra parte, en muchos casos, el DAC se encuentra integrado en el propio chip del procesador gráfico.

La memoria RAM se utiliza como buffer de vídeo, es decir, para almacenar una representación en formato digital de la imagen que posteriormente se muestra en el monitor. Hoy en día, para diseñar tarjetas gráficas, se utilizan distintos tipos de memoria RAM: DRAM convencional, EDO RAM, VRAM, EDO VRAM, WRAM, SDRAM, SGRAM, MDRAM (MultiBank DRAM) y RDRAM (Rambus DRAM). Tanto la DRAM como la EDO RAM son memorias idénticas a las utilizadas para la memoria principal del PC. La VRAM y la EDO VRAM son memorias de doble puerto, por lo que es posible que el DAC lea la memoria al mismo tiempo que el procesador gráfico o la CPU del sistema realiza una operación de escritura.

En el caso de las tarjetas con aceleración 3D por hardware la memoria de la tarjeta también se utiliza para almacenar los mapas de bits que se usan como texturas y para contener el buffer Z, el cual se utiliza para resolver el problema que presenta la eliminación de las superficies ocultas.

Diferencias entre diverso hardware

Debido a la enorme variedad de fabricantes de dispositivos existentes en el entorno PC, lo más probable es que en cada ordenador en el que se ejecute una misma aplicación se encuentre hardware totalmente distinto. Para que las aplicaciones que utilizan las API DirectX se adapten al hardware sobre el cual se ejecutan el programador dispone de una serie de funciones que le proporcionan información acerca de las capacidades del sistema sobre el cual se ejecuta el programa.

Por lo tanto, si un programa requiere que el hardware soporte una determinada característica debe detectar si el sistema sobre el que se está ejecutando la soporta y, si no es así, comunicárselo al usuario y detener la ejecución de la aplicación o, como solución alternativa, utilizar la emulación por software que proporcione DirectX.

Creación de objetos e inicialización

El primer paso que debe dar el programador para poder utilizar los servicios tanto de DirectDraw como de Direct3D es crear un objeto DirectDraw. Esta tarea se realiza efectuando una llamada a la función DirectDrawCreate. El parámetro más importante que se pasa a esta función es un puntero a una estructura DIRECTDRAW. Posteriormente, este objeto se utilizará para llamar a cualquier función miembro de dicho objeto. Si el valor devuelto por DirectDrawCreate es distinto de DD_OK querrá decir que se ha producido algún tipo de error durante la creación del objeto.

Una vez que se ha creado el objeto DirectDraw el programador puede crear un objeto Direct3D mediante el cual acceder a las capacidades de aceleración 3D soportadas por el hardware o emuladas mediante software. Para crear un objeto Direct3D es necesario crear una interfaz a dicho objeto, tarea que se realiza mediante la función miembro QueryInterface del objeto DirectDraw creado anteriormente. Esta tarea se ilustra en la siguiente línea de código:

retorno = IDirectDraw_QueryInterface (lpDD, &IID_Direct3D, &lpD3D);

El último parámetro de la llamada a QueryInterface es un puntero a un objeto DIRECT3D. Al igual que sucede con DirectDraw esta llamada rellena dicha estructura, la cual será utilizada para posteriormente realizar llamadas a las funciones miembro que sea necesario.

El programa de ejemplo

Para ilustrar brevemente la utilización de DirectDraw y Direct3D se ha desarrollado con Visual C++ 4.0 una sencilla aplicación que muestra las capacidades del controlador de la tarjeta gráfica que

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información