Skip to content

Más detalles acerca del API de DirectX 10

He estado examinando un poco más a fondo la documentación preliminar del API de DirectX 10 y la verdad es que he visto cambios, muchos cambios, ¿demasiados cambios?.

Lo primero que me ha llamado la atención es el número de interfaces, de las apenas 20 que tiene DirectX 9 se va a pasar a más de 50 en DirectX 10. Y los nombres de las nuevas interfaces dicen mucho acerca de la orientación que está tomando DirectX en esta versión, baste decir que 20 de las nuevas interfaces empiezan por la palabra «Effect».

Las interfaces parecen tener pocos métodos, y muchos del tipo Get/Set. Aunque la excepción a esta regla la representa naturalmente la interface ID3D10Device que, para variar, es la que más métodos tiene, unos 100 más o menos. En esta interface la novedad es que ha cambiado la nomenclatura de algunos de los métodos, ahora hay grupos de funciones que empiezan su nombre por «GS», «IA», «OM», «PS», «RS», «SO» y «VS», en clara alusión al «Geometry Shader», «Input Assembler», «Output Merger», «Pixel Shader», «Rasterizer Stage», «Stream Output» y «Vertex Shader». Es decir, a cada uno de los «stages» del nuevo pipeline, del que tanto vamos a oir hablar a partir de ahora.

Las funciones globales externas a las interfaces también han crecido en número. Y si en la versión 9 básicamente sólo se utilizaba Direct3DCreate9 para obtener la interface de entrada a DirectX, en la versión 10 aparecen D3D10CreateDevice y D3D10CreateDeviceAndSwapChain como funciones globales. Importante fijarse en que son funciones para crear interfaces a los devices, no para crear la interface IDirect3D10, que por otra parte no existe.

Ante tantos cambios creo que lo mejor será empezar, otra vez, por lo básico y mirar los tutoriales uno a uno para entender la nueva filosofía de trabajo, la manera de funcionar del pipeline, la nueva estructura en capas, las facilidades de depuración, …

En otro orden de cosas, lo que me tiene un poco intrigado es que DirectX 10 está pensado para Windows Vista, una nueva versión de Windows que tiene previsto salir al mercado el año que viene (2006). Y que para poder manejarse con soltura con él supongo que se necesitará un PC con procesador de 64 bits, 2 gigas de memoria, un disco duro rápido y una tarjeta gráfica con soporte para Shaders 4.0, amén de una buena conexión a Internet para descargarse las actualizaciones de forma periódica. Pero, ¿cuando saldrán los primeros programas para Windows Vista que requieran DirectX 10?. Y es más, ¿cuando saldrán los primeros programas por los que merezca la pena actualizar los ordenadores?. ¿Habrá que esperar un par de años hasta que aparezca un software capaz de aprovechar todas las posibilidades del nuevo hardware?. Y sobre todo, ¿cómo enfocarán las compañias de software este cambio?. A mi personalmente me parece un cambio lo bastante grande como para que no sea posible adaptar el software existente en poco tiempo y que va a requerir una gran inversión.

Últimas modificaciones del Arkanoid

Ya está subido el nuevo artículo a la web explicando las modificaciones realizadas en el código fuente del Arkanoid que he estado haciendo en JavaScript.

La verdad es que le he dedicado más tiempo al apartado que trata de las posibles mejoras a realizar que a la redacción de las modificaciones en sí mismo. Y es que este es uno de esos típicos casos en los que resulta bastante fácil dejarse llevar por la imaginación: «features, features, features, …»

DirectX 10

DirectX se actualiza cada 2 meses, y el SDK de este mes de diciembre ha venido con un pequeño regalo de Navidad: documentación y ejemplos de DirectX 10.

Los ejemplos sólo funcionan sobre la demo de Windows Vista, así que no he podido probarlos, pero leyendo un poco por encima la documentación se ve que la estrella de esta nueva versión será el Geometry Shader (GS). La principal aportación del GS será la posibilidad de generar geometría en tiempo real. Es decir, que se podrán generar vértices dentro de la GPU, lo que supone un cambio muy importante con respecto a la situación actual, en la que la GPU sólo puede operar con los vértices enviados por el driver desde el programa. Y es más, se podrá trabajar a nivel de primitiva. Es decir, se podrá trabajar con triángulos en vez de con sólo vértices de forma individual como se hace ahora mismo.

En el tutorial 13 del SDK se ve de forma fácil como se puede utilizar el GS para hacer que la GPU genere geometría en tiempo real. El tutorial contiene un ejemplo en el que contruye una malla a partir de otra. Se toman todos los triángulos que componen el modelo de un personaje y se generan nuevos triángulos «extruyéndolos» en la dirección de la normal. De esta forma se consigue una nueva malla que rodea al modelo como si fuera un «campo de fuerza» que se adapta perfectamente a su figura. Y todo esto dentro de la GPU, sin intervención alguna por parte de la CPU.

Otro ejemplo de la documentación incluye un sistema de partículas gestionado también totalmente dentro de la GPU. Todo un caso de estudio.

Pero el GS no es el único cambio importante e impactante de esta futura versión de DirectX, el pipeline en general también cambia, y mucho. Se compondrá de las siguientes «stages»: Input Assembler, Vertex Shader, Geometry Shader, Stream Output, Rasterizer, Pixel Shader y Output Merger. El Stream Output, a pesar de tener un nombre tan poco atractivo, promete poder redirigir la salida del GS hacia «stages» posteriores y anteriores. Es decir, las salidas del GS podrán volverse a utilizar como entradas del pipeline. Y todo esto además sin intervención de la CPU gracias al uso de buffers dentro de la propia tarjeta gráfica y una nueva API llamada DrawAuto diseñada exlusivamente para esto.

Otros cambios de DirectX incluyen un mejor soporte para depuración, con posibilidades de cambiar en tiempo de ejecución de un device hardware a otro software, o la aparición de nuevos APIs, como DXGI para trabajar con las distintas tarjetas gráficas que puede haber presentes en el sistema. De hecho, un puntero a una interface de tipo IDXGIAdapter es uno de los parámetros que se deben pasar a la función D3D10CreateDevice, aunque en los fuentes de los ejemplos se deja a NULL, supongo que para tomar la tarjeta principal por defecto.

También hay otros cambios orientados a la integración de los juegos dentro del nuevo Windows Vista. Al parecer, esta nueva versión de Windows llevará una opción de menú llamada «Games» en la que se listarán los juegos instalados en el sistema con sus características. Para que los juegos aparezcan en ese menú las compañias desarrolladoras tendrán que crear un pequeño fichero XML con unas determinadas características. Para ayudar en la creación de ese fichero Microsoft suministra una pequeña herramienta que se engloba dentro de lo que se dado por llamar «The Windows Vista Game Explorer».

Una última nota, dentro de algunos de los directorios donde se encuentran los fuentes de los ejemplos hay pequeños vídeos en los que se ven los programas en acción. Siempre es interesante echarles un vistazo.