| Artículos | 01 MAY 2007

Las nuevas posibilidades de Directx 10

Tags: Histórico
Eugenio Barahona.
El lanzamiento de Windows Vista, además de las ventajas que ya conocemos, trae consigo la posibilidad de ejecutar en modo nativo las instrucciones de la nueva versión de la API para el desarrollo de juegos, DirectX 10. A continuación detallamos los pormenores de esta tecnología llamada a revolucionar el desarrollo gráfico en los próximos meses para la plataforma Microsoft.

Hasta hace relativamente poco tiempo, al menos una vez al año Microsoft presentaba una nueva versión del conjunto de API que el fabricante norteamericano de software engloba bajo el paraguas de DirectX. Sin embargo, durante los pasados doce meses, tan sólo se han publicado revisiones de la versión 9 de DirectX, la última de las cuales data del mes de febrero del presente 2007. En el SDK correspondiente a dicha edición se presenta a los desarrolladores la información necesaria para crear aplicaciones que hagan uso de la versión 10 de la parte gráfica de DirectX, a la que Microsoft llama, desde hace ya bastante tiempo, DirectX Graphics.
Por lo tanto, a día de hoy, los programadores que deseen desarrollar aplicaciones que hagan uso de DirectX Graphics, disponen de dos implementaciones contra las que programar sus productos: la versión 9, que cuenta con soporte para Windows XP, y la 10, que de momento sólo funciona sobre el nuevo Windows Vista. Además, en el momento de escribir este artículo, sólo nVidia dispone de adaptadores gráficos que aceleran por hardware las funcionalidades integradas en DirectX 10, ya que la división gráfica de AMD, anteriormente conocida como ATI, ha retrasado el lanzamiento de su procesador gráfico R600 a mediados del mes de abril.

Incompatible con Windows XP
Esto se debe a que la arquitectura de DirectX 10 se ha diseñado aprovechando el cambio en la tecnología de controladores (drivers) para adaptadores gráficos que se ha realizado de la mano de la introducción de Windows Vista. Si en Windows XP los controladores de las tarjetas gráficas funcionan en modo kernel, en Vista se utiliza una combinación de drivers que trabajan en modo usuario y en modo kernel. Implementar una parte del controlador gráfico en modo usuario reporta indudables ventajas, ya que resulta mucho más sencillo depurar un componente software que funciona en modo usuario que otro que lo hace como parte integrante del kernel del sistema operativo.
Pero la incompatibilidad con XP puede no deberse sólo al cambio de modelo de driver gráfico, ya que se soportan algunas características interesantes, como a la posibilidad de virtualizar la memoria del adaptador gráfico, y podría necesitar el soporte de nuevas funciones que sólo están presentes en el kernel de Windows Vista.

API gráfica en capas
Con la introducción de la versión de DirectX Graphics se presenta en el mercado una API que se ha construido a base de capas, en las que las interiores contienen el núcleo básico de la API y se van implementando las funcionalidades adicionales en las capas externas. También se han incluido algunas capas cuya única misión consiste en ayudar al programador en las tareas de depuración.
Existe una primera capa, a la que podríamos denominar núcleo, que tan solo realiza una liviana traducción entre otras partes de la API y el controlador de dispositivo del adaptador gráfico. Uno de los objetivos planteados durante el desarrollo de esta capa fue su elevado grado de optimización, de forma que la llamada repetitiva a determinadas funciones de la API no supusiera una degradación apreciable del rendimiento de la aplicación. Debido a que el rendimiento de esta capa es fundamental para obtener un buen rendimiento, no realiza una validación exhaustiva de los parámetros que reciben las funciones que la forman. El resto de capas son opcionales, y tan sólo añaden nuevas funcionalidades, sin modificar en ningún caso el funcionamiento de las capas ya existentes.
Existe una capa de depuración que realiza una completa tarea de validación de parámetros y de la consistencia del estado en que se encuentra la API. La salida que genera esta capa está formada por una serie de cadenas de texto a las que se puede acceder a través de la interfaz ID3D10InfoQueue. Los errores que genera la primera capa de la API se muestran de manera resaltada en la capa de depuración. Esta capa tan sólo existe en los sistemas en los que se haya instalado el kit de desarrollo de DirectX y, para usurarla, las aplicaciones deben especificar el flag D3D10_CREATE_DEVICE_DEBUG al llamar a la función D3D10CreateDevice.
En algunas situaciones resulta interesante saber si un error que aparece en el render de una escena 3D lo ha producido nuestro programa o si, por el contrario, lo ha generado el controlador gráfico. El uso de un renderizador de referencia, cuyo comportamiento es conocido y está validado por Microsoft, nos ayudará a identificar al componente software responsable del error. Para ello se ha incluido una capa que permite pasar de usar un determinado adaptador gráfico a emplear un dispositivo implementado exclusivamente mediante software que proporciona Microsoft. La transición de un dispositivo hardware a uno software puede realizarse mientras la aplicación está funcionando, no siendo preciso elegir al inicio de su ejecución entre un tipo u otro de dispositivo. El primer paso para usar esta capacidad consiste en crear un dispositivo que la soporte durante la llamada a D3D10CreateDevice para, ya con la aplicación en funcionamiento, llamar luego al método ID3D10SwitchToRef::SetUseRef.
Mientras que en versiones anteriores de DirectX se empleaba, por defecto, una run time cuyo uso con aplicaciones multi hilo no era seguro, la versión 10 dispone de una capa que permite usar el dispositivo de render desde distintos hilos de una misma aplicación. Se puede además, habilitar y deshabilitar la protección multi hilo según las necesidades del programa, no siendo necesario requerir dicha protección al crear el dispositivo de render como era preciso con las versiones más antiguas de DirectX.

Cambios respecto a DirectX Graphics 9
Sin duda alguna una de las modificaciones más importantes es la eliminación de la pipeline fija de render 3D. Si bien la anterior versión de DirectX soportaba tanto la pipeline fija como la programable, la versión 10 tan sólo soporta esta última. Otro cambio importante reside en la eliminación de los bits que indicaban la presencia en el sistema de aceleración por hardware de una determinada capacidad. Si bien dichos bits permitían que una aplicación se adaptase a las características del hardware gráfico sobre el que se iba a ejecutar, lo cierto es que también complicaban las tareas de desarrollo, al ser necesario programar distintas ramas de ejecución de la aplicación adaptadas a las capacidades que indicaba la configuración del sistema. Para DirectX 10, Microsoft ha especificado una serie de características que debe cumplir el hardware que sea compatible con dicha API, por lo que los programadores pueden estar seguros de que los adaptadores gráficos soportarán todas las características definidas en el SDK (Software Development Kit, o kit para el desarrollo de software) de DirectX.
Debido a la naturaleza totalmente programable de la pipeline gráfica de DirectX, se ha actualizado el compilador de shaders (programas que se ejecutan en el procesador gráfico), además de introducirse mejoras en la definición del lenguaje HLSL, por lo que ahora,

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