DirectX desembarca en Linux

Publicado el Jueves 7 octubre 2010 en DirectX,Miniposts,Noticias por Thund

Parece ser que el grupo de desarrollo freedesktop.org (los mismos que están detrás de VMWare) ha conseguido hacer andar las APIs de DirectX 10 y 11 en sistemas Linux, utilizando una capa intermedia, a la que llaman Gallium, situada entre las interfaces de las librerías y los drivers de las tarjetas gráficas. No se trata de una emulación como venía haciendo Wine, transformando DirectX en OpenGL, sino que han implementado la API de DirectX al completo para integrarla con la arquitectura de Gallium, evitando así sensibles pérdidas de rendimiento. Aún faltará mucho, presumo, para que los juegos de hoy en día funcionen al 100% sobre esta plataforma, pero se ha abierto la primera brecha en un muro que parecía demasiado sólido como para que mereciera la pena atravesarlo. ¿Se ejecutarán los juegos mucho más rápido en Linux? ¿Acabará la industria de los videojuegos provocando la emigración del usuario medio hacia tierras más frías, donde habiten los pingüinos? ¿Conquistarán el mercado de OpenGL? ¿Cómo habrá sentado la noticia a los de Redmond? El tiempo dirá…

Enlaces de interés

Artículo en Phoronix (del cual se ha hecho eco todo Dios :D )

Etiquetas: , ,

Lectura recomendada

Publicado el Domingo 15 agosto 2010 en DirectX por Thund

Aquí os dejo una lista de libros relacionados con DirectX o con la programación gráfica en general que he leído o que conozco. Son todos en inglés, obviamente, y los podéis encontrar tanto en la Amazonia como pidiéndoselos a una mula, que cada cual elija su locura.

Introduction to 3D Game Programming With DirectX 9.0
 

Éste fue el primer libro sobre DirectX que leí. Se me hizo un poco cuesta arriba debido a que, por aquel entonces, mi conocimiento acerca del funcionamiento de una API gráfica era inexistente y mi dominio tanto del inglés como de C++ algo mediocre. Aun así le eché un par de voluntades y me fui enterando de toda la teoría que hay delante y detrás de la programación de una aplicación basada en DirectX. Como el título indica, se trata de una introducción, es decir, toca los palos principales y sin entrar en mucho detalle. Esto no quiere decir que explique las cosas de pasada y te deje más perdío que Marco el día de la madre; se centra en los aspectos más básicos, desde cero, siguiendo una curva poco pronunciada, fácil de seguir. Si te apoyas en la referencia del SDK de DirectX a la par que avanzas por los capítulos, el aprendizaje se verá mucho más reforzado. Está claro que es un libro obsoleto, no sirve a alguien que vaya a emprender su andadura por DirectX 11, pero ésto es una verdad a medias; dado que es un libro introductorio, no hace hincapié en el código y en las particularidades de la API, por lo que hay muchas técnicas y bases descritas que son comunes a cualquier librería del estilo, y que pueden ser de gran utilidad para comprender la arquitectura y la forma de trabajar de cualquier versión. Unas 394 páginas, poca cosa.

Aviso de que quizás, tras haber terminado el libro, no seáis capaces de hacer un dragón rojo echando fuego.

Advanced 3D Game Programming with DirectX 9.0
 

Una extensión del anterior, lo que no quiere decir que empiece donde aquél lo dejó, sino que entra en mucha más profundidad en los temas ya tratados y añade muchos nuevos. Si la introducción abarcaba mayormante el campo de los gráficos, éste tomo expande las fronteras hacia el resto de componentes de DirectX, como son DirectSound y DirectInput, y mete la cabeza en la inteligencia articial y las telecomunicaciones. Digno de mención son el capítulo acerca de la gestión de la escena y los detalles sobre mallas progresivas. No me gustó demasiado la maquetación con respecto a su antecesor. De las 514 páginas puedes saltarte las 60 primeras y luego ir dando saltos, el orden no es importante.

Sí, la portada es fea de cojones.

DirectX 9 Graphics The Definitive Guide to Direct3D
 
Este libro es un intento por cubrir todas las áreas habidas y por haber en torno a los gráficos, aunque se deja un apartado sin cubrir de gran importancia, como son los shaders. Empieza desde lo básico, da una base matemática y en pocas páginas nos encontramos iluminando la escena. Como puntos fuertes tiene la descripción de los archivos .X y su utilización; explica la animación por esqueletos y pieles y mediante keyframes; y es de los pocos que tratan temas de animación de texturas y el uso de DirectShow. En total 351 páginas, recomendable como libro de consulta.
Advanced Animation with DirectX
 
Se trata de un libro más especializado, concretamente en el mundo de la animación mediante código y la interpretación de formatos de animación estándar, como la animación por esqueleto / piel (incluyendo el efecto rag doll), morphing, movimiento de partículas, animación de texturas y efectos de animación de objetos blandos como la ropa. A destacar la explicación del uso de archivos .X de DirectX. Unas 346 páginas en las que no se llega a profundizar demasiado en las técnicas aunque se dan buenas bases. Lo bueno de éste libro es que vale para cualquier API gráfica, aunque en el título aparezca DirectX.
Real-time Rendering Tricks and Techniques in DirectX
 
Éste no lo he leído, más bien lo he usado como libro de consulta. Básicamente hace un breve recorrido por los elementos gráficos de Direct3D hasta que empieza a hablar de shaders. Contiene un montón de ejemplos tanto de pixel shaders como de vertex shaders; lo malo para los programadores que usen DirectX es que tales ejemplos no contienen código HLSL sino ensamblador, lo cual es bueno para los que usen otras APIs como OpenGL (si saben traducirlo a GLSL claro). Al final del libro describe técnicas como el motion blur y el picking, y dedica apartados al stencil buffer y a DirectShow. Unas 827 páginas muy recomendables.
The Complete Effect And HLSL Guide
 
Libro dedicado exclusivamente a shaders, tanto en ensamblador como en HLSL, y al framework de efectos de DirectX 9. Éste sí me lo leí de cabo a rabo porque necesitaba coger una buena base, que fuera especializada, acerca de los shaders. Tiene cosas muy malas y otras muy buenas. Una de las malas es que hay muchas partes que son copy&paste de la MSDN; si quisiera leer la MSDN me iría a la maldita MSDN. En cambio, una de las características más destacables es lo detallado de la información acerca de las equivalencias entre el lenguaje HLSL y el ensamblador, las capacidades de los distintos shader models, desde el 1.0 al 3.0, y una precisa descripción de cada instrucción de la GPU. Sabemos que, a día de hoy, contamos con el shader model 5.0 pero, si nos fijamos bien, nos damos cuenta de que desde la versión 3.0 no ha cambiado demasiado el abanico de funciones ni su comportamiento, aunque sí lo hayan hecho algunos elementos de la semántica y la capacidad del hardware (número de instrucciones permitidas, número de constantes…), casos para los que disponemos de la referencia del SDK o la MSDN. El otro aspecto a remarcar de éste libro es que es de los pocos sitios donde se habla del Effects Framework, que parece siempre como si lo guardaran en secreto por la poca información que se puede encontrar por ahí. A mí me aclaró muchas cosas, por eso lo recomiendo, o si ha salido alguna nueva versión del libro tanto mejor. Se hace cortito, 307 páginas de las que la mitad son tablas.
3D Math Primer for Graphics and Game Development
 
Bases matemáticas para muchas de las cosas que normalmente utilizamos y que damos por sentado. No me lo he leído, pero lo pongo aquí para que se sepa de su existencia. Son 435 páginas.
Geometric Tools for Computer Graphics  
El libro gordo de Petete, 1055 páginas para explicarnos una barbaridad de conceptos y algoritmos matemáticos. Los amantes del álgebra, los espacios vectoriales y la geometría se harán pajas con él. Echando un vistazo al índice (pues no me lo he leído aún) puede verse claramente cómo cubre un montón de aspectos útiles, como la formación de elementos geométricos, intersecciones, partición espacial binaria, triangulación, cálculos de distancias, etc. Por ahí se dice que tiene un montón de erratas, pero en su página web vienen todas aquellas que se han detectado (que oye, son unas cuantas). Recomendabilísimo.
Game Programming Gems  
He decidido poner toda la saga junta porque su descripción es similar y no quiero morirme escribiendo. Muchos ya la conoceréis, se trata de una serie de publicaciones que contienen perlas algorítmicas, técnicas geniales y muy extendidas en la programación de juegos en el ámbito profesional, escritas por veteranos de la industria en muchas ocasiones. Los que no sabíais de su existencia, quedaréis gratamente sorprendidos. Eso sí, yo miraría antes el índice de cada uno antes de comprarlo, ya que cada cual contiene métodos muy dispares, a todos los niveles, no sólo relacionados con los gráficos. Imprescindibles.
Introduction to 3D Game Programming with Direct3D 10
 
Homólogo del anteriormente descrito pero para DirectX 10 (además, escrito por el mismo autor). No lo he leído pero se ve que es lo mismo adaptado a la siguiente versión. Unas 500 páginas.
Advanced 3D Game Programming with DirectX 10
 
La temática es la misma que la de su homólogo de DirectX 9 (y otra vez, coincide el autor). Amplía el contenido acerca de la IA y habla de las curvas beizer y los quads. Este lo he leído un poco por encima. Un total de 527 páginas.
C++ for Game Programmers
 
Este post no es para libros de C++, pero el que he puesto está precisamente orientado a la programación de juegos, o aplicaciones gráficas. Muy recomensable, expone una gran cantidad de trucos, recomendaciones y optimizaciones que todo programador agradece, y siempre hay alguna cosa que se aprende por muy ducho que seas en la materia. Son 434 muy amenas para los amantes de C++.

Hay muchos más por ahí, pero esto es un post no la Biblioteca de Alejandría.

Etiquetas: , , ,

Empecemos por el principio…

Publicado el Martes 29 junio 2010 en DirectX por Thund

Puede que tengáis las mismas ganas de hincarle el diente a DirectX 11 que yo, pero antes de meternos en harina vamos a necesitar un entorno sobre el que trabajar. Sé que sois todos muy listos pero nunca viene mal tener recogidos en un sitio los pasos a seguir para instalar todo aquello que necesitamos, así evitamos perder el tiempo buscando la próxima vez. Dado que vamos a trabajar con DX11, presupondré que estáis leyendo esto desde un Windows 7.

Microsoft Visual Studio 2010

La razón por la que elijo esta versión responde únicamente a su novedad, por ir acostumbrándome al nuevo IDE. En éste momento alguien saltará diciendo: "¡Pero gañán, si es prácticamente igual!". Totalmente de acuerdo, salvo los colorines no se han roto demasiado la cabeza. Que sí, que internamente lo han reconstruido usando WPF (Windows Presentation Foundation) y MEF (Managed Extensibility Framework) pero, tristemente, en lo único que lo he notado ha sido en lo borroso que se ven las letras del editor de texto… es un problema conocido y que aún no tiene solución oficial (aunque Microsoft lo tenga como fixed, es una trola que sólo se tragan los bizcos), WPF renderiza mal las letras pequeñas, y si eres de los que usa fondo negro, como yo, tanto peor. Más o menos uno se acostumbra (a base de ganar dioptrías), lo he dejado en la fuente por defecto, Consolas, aunque a le he aumentado el tamaño a 11. El resto de la interfaz, según opiniones varias, es como VS2008 + Resharper, si bien los creadores del plug-in se defienden del plagio como pueden. De cualquier modo, a los programadores de C++ eso nos la trae floja. Tanto nos la suda que voy a pasar de enumerar las nuevas virtudes de VS, primero, porque no es la temática ni del blog ni del post y, segundo, porque salvando alguna leve mejora del IntelliSense (muy leeeve muy leeve….), han mejorado bastante poco el apoyo al desarrollo de C++ nativo; sinceramente, el subrayado rojo molesta más que ayuda. Tanto que anunciaban que iban a poner el soporte a C++ a la altura del de C# o VB.Net… falacias. Al menos espero que hayan afinado, aún más, la optimización de rendimiento del compilador (que ahora es MSBuild). Es digno de mención que VS2010 viene ya con soporte para el nuevo estándar de C++0x (curioso, cuando aún no ha sido publicado). Sí, en conclusión, elijo VS2010 por ser más guay.

Vamos a dejar las pataletas a un lado y pongámonos a instalar la versión Express, que como ya sabéis es gratuita. A cambio, como es costumbre, recortan una serie de características: en el caso de VC++ Express, lo distribuyen sin las librerías MFC ni ATL, que no vamos a usar para nada, y capan alguna capacidad relacionada con la compilación para 64 bits, que tampoco necesitamos. No obstante, si alguien se quiere bajar comprar la versión Full puede estar tranquilo de que cualquier código de éste blog le va a funcionar igual que en la versión reducida.

Paso a paso para torpes:

Bajar Microsoft Visual Studio 2010 Express

En la lista desplegable (alias combo), selecciona English. Yo lo prefiero en inglés y los tutoriales estarán basados en tal idioma.

Esto bajará un instalador online llamado vc_web.exe, de 3'2 Mb. También puedes elegir la opción de abajo del todo, que es una imagen ISO que contiene todas las versiones Express de los lenguajes soportados por VS; el archivo se llama VS2010Express1.ISO, ocupa 694 Mb y a mí me tardó 15 minutos en bajarse, a 800 Kb/s. Luego sólo tendrás que montarlo con Daemon, por ejemplo, y seleccionar VC++.

Cuando ejecutes el instalador online, desmarca todos los checkboxes que encuentres y pulsa Install.

La instalación requerirá 954 Mb de disco duro y necesitará descargar unos 75 Mb. En aproximadamente 5 minutos debería terminar.

Comprueba que se ha instalado todo correctamente.

Al tiempo te saltará una ventana pidiendo que registres el producto. Puedes pasar de ella si no te molesta o puedes registrarlo, que no cuesta nada. Si quieres registrarlo (desconozco ahora mismo qué ventaja aporta ni me he preocupado en investigarlo), pulsa "Obtain a registration key online", lo que te llevará a una web de Microsoft con un formulario. Por cierto, si no ves la ventana de aviso, puedes acceder a ella usando el menú "Help"–>"Register Product". Pon lo que te de la gana en los campos del formulario, incluso puedes inventarte el email ya que te dan el código en la misma web y, a parte, envían una copia al correo. Venga va, que sé que más de uno es vago de cojones, aquí tenéis mi clave:

6VPJ7-H3CXH-HBTPT-X4T74-3YVY7

Microsoft DirectX 11 SDK

Eje central del blog, es la última versión de las librerías que nos permiten utilizar el HAL (Hardware Abstraction Layer) de Windows para comunicarnos con los drivers y manejar así ciertos dispositivos hardware. No voy a ponerme aquí a explicar en detalle qué es DirectX, para eso ya hay muchos sitios. En su lugar, haré un breve resumen de la nueva estructura de la versión 11 con respecto a la 9 pues considero que hay mucha más gente interesada en portar su código desde la versión 9.0c que desde la 10.1.

  • Direct3D: Se mantiene la rama principal para el control de los dispositivos gráficos que, desde Vista, se realiza sobre WDDM 1.1 (Windows Display Driver Model), nueva arquitectura de los drivers para tarjetas gráficas, en teoría más robusta, más rápida y que provee nuevas funcionalidades como la posibilidad de compartir superficies (texturas) entre threads, virtualización de memoria de video (paginación en la RAM del sistema) o encolar tareas de la GPU. A nivel de interfaces de la librería, nos encontramos con que ya no hay más llamadas a la instancia del dispositivo para cambiar estados de la fixed pipeline, que ha sido totalmente desechada y traducida a shaders 2.0 que tendremos que programar. Otra novedad significativa es la separación de las tareas cuya evolución se intuye mucho más lenta que el resto, como es la enumeración de dispositivos gráficos y el manejo de swap chains, en una nueva rama de interfaces llamada DXGI (DirectX Graphics Infrastructure). Ni que decir tiene que los nombres de las funciones de ayuda, las interfaces, las estructuras y demás han cambiado; algunos son irreconocibles mientras que otros simplemente han reemplazado los prefijos D3DX- e IDirect3D- por D3D11- (funciones), ID3D11- (interfaces) y D3D11_- (estructuras y enumerados). Hay muchas cosas más (shaders 5.0, Geometry Shader, desaparición de las Device Caps, etc.) pero ya iremos descubriendo las sorpresas que Microsoft ha preparado conforme vaya publicando entradas en el blog, que si no os empacháis.
  • DXGI: Como ya he mencionado, este nuevo grupo de interfaces encapsulan algunas de las tareas que antes formaban parte de IDirect3DDevice9 y que se estima que van a cambiar a un ritmo mucho más lento que el resto de características de Direct3D. Por ejemplo, a la hora de obtener el identificador de un dispositivo gráfico ya no usaremos el método IDirect3DDevice9::GetAdapterIdentifier, sino IDXGIDevice::GetAdapter; de igual modo, no usaremos el método IDirect3DDevice9::GetAdapterCount junto con el anterior para obtener la lista de dispositivos, directamente podremos llamar a IDXGIDevice::EnumAdapters. La administración de swap chains también ha sido delegada en DXGI y existen un gran surtido de métodos e interfaces para llevarla a cabo con mayor facilidad.
  • Direct2D: Vino con Windows 7, y lo hizo para quedarse. Podemos ir diciendo adiós con la manita a DirectDraw junto a la GDI y GDI+ (siguen existiendo, pero no tendrás que usarlos más). Como su nombre indica, engloba toda la funcionalidad relacionada con el dibujo bidimensional y es el responsable de todos los píxeles que ves cuando usas Windows 7 (para que funcione con Vista hay que instalar actualizaciones). Unifica las APIs antes mencionadas y ofrece un conjunto de interfaces cuya usabilidad es notablemente superior. Es realmente sencillo dibujar una figura mediante el uso de Brushes (interfaces derivadas de ID2D1Brush), que determinan la metodología de coloración y otros aspectos visuales como, por ejemplo, si se usará un degradado lineal de color negro a amarillo para rellenar una superficie; Geometries (interfaces derivadas de ID2D1Geometry), que definen la forma del polígono a representar, como un rectángulo o una elipse; Bitmaps (interfaz ID2D1Bitmap)… no, no pongo los puntos suspensivos a modo de elipsis, los pongo a modo de suspiro debido a que llegados a este punto se acabó la simplicidad. No diré que sea mucho más engorroso que usando DirectDraw, pero tener que recurrir a otro framework, WIC (Windows Imaging Component) para más señas, para cargar la imagen y luego traspasarla al sistema de Direct2D me parece cuanto menos insuficiente, no porque sea malo separar responsabilidades (la idea tras de WIC no es mala ni mucho menos), sino porque podrían haberse currado algún wrapper o función de ayuda para tal efecto, ya que estamos; aun así, no os agobiéis, existe un ejemplo bastante claro en el archivo de ayuda del SDK (busca "How to Load a Bitmap from a File", comillas incluidas). Por cierto, vaya coñazo es Microsoft con tanto puto acrónimo. Por último, acabando con éste apartado, se puede dibujar texto con Direct2D, aunque las posibilidades que ofrece son bastante reducidas respecto a DirectWrite.
  • DirectX Media: Es un grupo de APIs que facilitan las labores relacionadas con contenidos multimedia. Está compuesta por DirectAnimation, para animación web (aviso que la información de esta es jodidamente escasa); DirectShow, para manejo de video y streaming, de la cual ya disponíamos en DirectX 8, aunque Microsoft lo separó del SDK de DirectX y mareó un poco al personal situándolo en varias librerías, hasta hoy; DirectTransform, otra API orientada al desarrollo web que nos surte de funciones para crear "animaciones" mediante transiciones entre frames (imágenes estáticas), añadiendo ciertos efectos; existe alguna más pero creo que carece de interés. La tendencia respecto a DirectShow ha sido, claramente, trasladarlo a un contexto de funcionalidad de sistema operativo, separándolo del tronco principal dedicado al desarrollo de videojuegos. Lamento decir que, aunque la plataforma DirectX Media siga vigente, será pronto sustituida por la MF (Media Foundation), aparecida junto a Windows 7. Dado que eso es otro mundo, inmenso e incierto como todos los que abre Microsoft cuando sus chicos se aburren y hay pasta de sobra, no voy a meter más la cabeza en él.
  • DirectInput: Seguimos disponiendo de éste conjunto de interfaces, que nos permiten consultar el estado de ciertos periféricos, como el teclado, el ratón, gamepads, joysticks… o enviarles señales (force feedback) a, por ejemplo, un gamepad con vibración. No ha evolucionado nada desde DirectX 8, así que poco se puede añadir. Sí cabe mencionar la postura de Microsoft respecto a su uso pues, dado que hace años que no dan soporte para esta API, aconsejan valerse del bucle de mensajes de Windows para manejar las entradas de los dispositivos, haciendo hincapié, además, en que utilicemos la librería XInput (introducida en DirectX 9) en el caso de que queramos usar mandos de XBox. Lo que les costará mantener y mejorar DirectInput, que son un par de estructuras unas pocas funciones… algo tendrán planeado.
  • DirectPlay: Creo que ésta es la rama que más desconozco de DirectX, será porque soy un manta con las telecomunicaciones y eso ha hecho que me interese bastante poco. Todavía disponemos de ella para llevar a cabo comunicaciones de red entre distintos PCs. Al igual que ocurrió con DirectInput, Microsoft le dio la patada hace mucho, por lo que se aconseja usar Winsock en su lugar. Leyendo las opiniones que circulan por Internet, parece ser que no era mucho más sencillo implementar el sistema de red con DirectPlay que con Winsock a pelo, así que yo no le dedicaría mucho a esta API.
  • DirectSound: Fue actualizada por última vez en la versión 8 y hoy día sigue estando disponible. Actúa como capa de bajo nivel entre nuestro software y el hardware de sonido, facilitando la reproducción de archivos de audio. Desgraciadamente (para algunos), Windows Vista acometió una serie de reformas en el apartado del control de audio con el fin de unificar las interfaces y capacidades del hardware de los distintos proveedores, dando lugar a la UAA (Universal Audio Architecture), reemplazando parcialmente el WDM (Windows Driver Model). De esta forma, se rompía la conexión directa de DirectSound con los drivers, necesitando ahora emulación por software; si bien el impacto de rendimiento es imperceptible, algunas características del subconjunto DirectSound3D quedaron anuladas. Los proveedores de controladores suministraron entonces ciertas herramientas para interceptar las llamadas a esta API y "reactivar" la funcionalidad perdida. En definitiva, en vista de la nueva plataforma XAudio por la que está apostando Microsoft, podemos dar a DirectSound por muerta, no malgastéis vuestro tiempo.
  • DirectMusic: Sobra un poco hablar de esta rama ya que, como algunos sabréis, funciona sobre el ya fallecido DirectSound. Al igual que esta última, sigue existiendo en DirectX 11, facilitando un poco la labor de orquestar la reproducción de audio pregrabado y la ejecución de piezas musicales mediante un sintetizador (véanse los casi desaparecidos MIDIs). En este momento desconozco si existe un reemplazo inmediato, puede que XAudio provea de alguna funcionalidad parecida.
  • XAudio2: Aparece con motivo de los esfuerzos de Microsoft por unificar las plataformas de Windows con XBox, en este caso, en el ámbito del sonido. No, el 2 no es una errata, he decidido hablar de la segunda versión de la API puesto que la primera estaba dedicada a manejar el audio de la consola, únicamente, mientras que XAudio2 es "multiplataforma" entre PC, bajo Windows XP o superior, y XBox 360. Sustituye, como dije anteriormente, a DirectSound y forma parte de (o es usado por) la plataforma XACT3 (Cross-platform Audio Creation Tool), un conjunto de APIs de alto nivel y herramientas (aplicaciones) para la generación de contenidos de audio. Esta librería utiliza lo que denomina como voices (eso, voces) para trabajar con sonidos pregrabados, ofreciendo funciones para su manipulación y permitiendo crear grafos de remezclas para obtener salidas de audio nuevas. Existe un complemento llamado X3DAudio (como hubo un DirectSound3D) para aplicación de efectos de posicionamiento tridimensional (variación del volumen de cada altavoz de un sistema estéreo, 5.1, 7.1, etc. en función de unas coordenadas [X, Y, Z]), efecto Doppler y eco. Como pasará bastante tiempo antes de que le meta mano a esta API en el blog, os pongo un artículo de Gamasutra muy revelador, por si os interesa.
  • DirectCompute: La arquitectura de DirectX ha dado un paso significativo hacia delante (acompañada, como suele ser habitual, por la del hardware), abriendo definitivamente la puerta a la computación de propósito general usando la VRAM y la GPU de nuetras tarjetas gráficas. Hasta ahora, podíamos delegar en la GPU una serie de trabajos concretos, como modificar el color de un píxel (vía Pixel Shaders, también conocidos como Fragment Shaders), generar un polígono (mediante Geometry Shaders, incorporados en DirectX 10) o desplazar un vértice (valiéndonos de los Vertex Shaders), pero, como ya digo, con limitaciones propias de la función para la que fueron concebidos. Y llamo limitación a tener que renderizar un vértice para que se disparen los shaders que necesites. Con DirectCompute, explicándolo burdamente, reservas un espacio de memoria visible desde el contexto de los shaders, creas una serie de threads y los "activas", de manera que tu shader realiza las operaciones que hayas programado con HLSL o ensamblador y guarda los resultados en los espacios que reservaste. Ya explicaré esto en más detalle llegado el momento, porque tiene tela… Parece ser que la trayectoria de la computación se ha desviado un poco, desechando la idea de la expansión de las CPUs multinúcleo y abrazando el dogma del proceso en paralelo entre CPU y GPU; según AMD, mientras las CPUs actuales alcanzan velocidades de 108'8 GigaFLOPS (Floating-point Operations Per Second), las GPUs están superando los 1.36 TeraFLOPS (11 veces superior), así que está clara la tendencia.
  • DirectWrite: Ésta sección de DirectX nos provee de un abanico de funcionalidades para el dibujo de texto en pantalla. Llegó a la par que Direct2D y con el mismo propósito de establecerse por encima de todas las librerías del sistema dedicadas al manejo de texto. Nos despedimos pues del uso del GDI y de la interfaz ID3DXFont de Direct3D. Ahora la respuesta a la gran pregunta ( [FreakMode] tranquilos, trataré de responder con algo más que un par de cifras [/FreakMode] ): si Direct2D ya pinta letras, ¿para qué carajo queremos DirectWrite? Sencillo y complejo a la vez. Sencillo porque, básicamente, cuando trabajan juntos, Direct2D se dedica a dibujar y DirectWrite le indica qué dibujar, amén de otros "servicios" que ofrece, como el acceso a las fuentes (entiéndase tipografías) del sistema operativo y sus características. La explicación compleja, según Microsoft, justifica la decisión de escindir DirectWrite por motivos de facilidad de adopción por parte de las aplicaciones ya existentes que hacen uso del GDI para representar sus textos; es más sencillo lidiar sólo con la parte de proceso de textos que sustituir todo el sistema gráfico 2D que, posiblemente, no se necesite o no se pueda cambiar. Esto implica que, según he entendido (no he hecho experimentos aún, todo llegará), es posible dibujar las letras como mejor te guste, usando Render Targets (interfaces que derivan de ID2D1RenderTarget) o implementando la interfaz IDWriteTextRenderer para traducir lo que llegue a sus métodos de callback a instrucciones del GDI, por ejemplo.

Joder, y yo que pensaba no alargarme mucho… Bueno, lo siguiente es rapidito, vamos a instalar el SDK de DirectX 11 (que incluye además el 9c, el 9Ex y el 10.1) y vamos a dejarlo listo para trabajar.

Paso a paso para torpes:

Bajar SDK de DirectX 11 de Junio de 2010

Pulsa en Download, que te llevará a una página de confirmación. Allí pulsa Start Download.

Se descargará un archivo de 571'7 Mb llamado DXSDK_Jun10.exe. A mí me tardó 10 minutos, a 800 Kb/s.

Ejecuta el instalador. Requerirá 1251 Mb de espacio en disco.

Desmarca la casilla de participación si quieres y cambia el estado de aquellos elementos de la lista que estén marcados como no disponibles (sólo debería haber uno así), o sea, instálalo todo.

Después de unos 4 minutos aproximadamente debería haber terminado.

Pero la cosa no acaba aquí. Si vas al VS 2010 para comprobar que el instalador haya añadido las correspondientes rutas del SDK a la lista de directorios de VC++, te darás cuenta de que NO EXISTE tal lista. Bueno, realmente sí que existe, pero comprobarás que la han movido. En efecto, ahora no hay una lista a nivel de usuario para todos los proyectos, sino que cada proyecto tiene su propia lista por defecto, en forma de propiedad. Si quieres hacer esta comprobación no tienes más que crear un proyecto Win32 cualquiera e irte a las propiedades del mismo, deberían estar las siguientes entradas en la página de VC++ Directories:

  • Include Directories: C:\Program Files\Microsoft DirectX SDK (June 2010)\Include
  • Library Directories: C:\Program Files\Microsoft DirectX SDK (June 2010)\Lib\x86

Si no estuvieran, inclúyelas cada vez que crees un proyecto. O mejor aún, ve al menú View –> Property Manager; se abrirá en la barra lateral un árbol de hojas de propiedades. Abre la que se llama "Microsoft.Cpp.Win32.User" y modifica todo aquello que necesites que esté por defecto en cada nuevo proyecto.

Pues esto es todo, iba a meter un mini-proyecto Win32 para dejar lista la parte de código que no tiene que ver con DirectX directamente y olvidarnos ya de la infraestructura, pero como me ha salido tan largo este post, lo dejaré para el siguiente. Espero ser más escueto en próximas publicaciones y que toda esta información sea útil para más de un frikazo tecnológico.

PD: He puesto todos los enlaces a páginas en inglés dado que odio las traducciones automáticas, que suelen a inducir a errores, y porque las fuentes en inglés suelen tener contenidos más amplios y más fiables. Espero que no sea un gran impedimento para nadie.

Etiquetas: , , ,