Delphi XE2 y Firemonkey (ii) Direct2D y Windows

En post previo sobre Delphi XE2 y Firemonkey expresé mis dudas sobre el uso de Direct2D en Windows previo a Vista.

Como indicara en el mencionado post, la información disponible sobre Firemonkey daba cuenta que en su implmentación para Mac OSX (y iOS? ) usará OpenGL y en Windows usará DirectX para 3D y Direct2D para 2D en plataforma Windows.

Como ya sabemos Direct2D sólo está disponible preinstalado a partir de Windows 7 y disponible en Vista via una actualización. Pero, y en XP (probablemente la base instalada más grande de Windows)???. La pregunta se caía de madura, habrá soporte en esta versión? Asi que le hice la pregunta al propio Andreano Lanusse y la respuesta fue:

Cases where Direct2D is not supported, like Win XP FireMonkey will use GDI+.

Michel Swindell también respondió en el mismo sentido:

on Windows if D2D is not available, FM will use GDI+ for HD vector forms/controls.

Bueno al menos estará disponible, habrá que ver como se comporta ya que GDI+ no es acelerado por hardware, ya que definitivamente las capacidades requeridas para Firemonkey lo hacen inviable con GDI puro.

En un post posterior Andreano Lanusse, contesta las interrogantes surgidas sobre el uso de Firemonkey a través de MS RDP (Remote Desktop), en esta da cuenta de que si el servidor es un un Windows Vista/7  “físico” no tendrá ningún problema ya que estas versiones de Windows soportan 3D en RDP. Si es Wiindows Vista/7 virtualizado en algún entorno sin GPU como XenApp y VmWare ESX, soportará la parte 2D de Firemonkey usando GDI+, la parte 3D se pierde por que no hay una versión de software para estas capacidades. En el caso de un servidor RDP con Windows XP, en esta versión RDP no soporta 3D y la parte 2D como ya dijimos será con GDI+.

Ahora, por que no se usó OpenGL en Windows? pudo ser, pero este no viene preinstalado asi que es una limitante. Además está documentado que los drivers nativos para OpenGL en Windows no son muy pulidos y dan problemas.

DirectX está disponible desde Windows 95, por que no se usó directamente DirectX en lugar de Direct2D para la parte 2D? Bueno me imagino que fue por que hacer 2D con Direct2D es muchisimo más fácil que hacer 2D con DirectX, que si se puede pero la API ya es bastante densa para 3D, usarla para 2D debe ser horrible. Hay que recordar que Direct2D no es si no una capa encima de DirectX. Esto me hace pensar que Embarcadero pudo crear su propia capa 2D, pero realmente seria mucho esfuerzo y encima sujeto a los múltiples mutaciones que Microsoft le ha hecho al DirectX.

Solo nos queda esperar para poder poner a prueba todo el poder de Firemonkey, en todas las plataformas

Anuncios

Delphi XE2 y Firemonkey

Bueno, poco a poco van apareciendo más detalles de la nueva versión de Delphi, la XE2.

Ahora tenemos más detalles de Firemonkey y hasta un logo!! FireMonkey-Medium

Andreano Lanusse ha publicado un blog con más detalles interesantes y hasta un par de screenshoots. Por lo que yo entiendo con Firemonkey no tenemos componentes nativos como en la VCL (que seguirá existiendo), si no que todos son dibujados por este framework. Lo bueno de esto es que se consigue libertad absoluta sobre el diseño del control. Otro punto interesante es el soporte en Firemonkey de Styles, que al igual que CSS permitirá crear temas y lo que es mejor aún lograr un look and feel (casi) nativo en cada plataforma, lo cual es muy importante para las aplicaciones para Mac y no herir susceptibilidades. Continúa leyendo Delphi XE2 y Firemonkey

Delphi y UI acelerados por hardware

Tradicionalmente Delphi ha usado las APIs que le provee Windows para dibujar sus controles, es más, los controles propios de Windows son dibujados por el sistema operativo y no por Delphi.

Windows, hasta el Vista usaba GDI para realizar estos dibujos. GDI es una API en C, para gráficos en 2D, es decir líneas, curvas, rectángulos. Internamente esta es la API que usa Windows para dibujar sus controles.  Esta API es rápida pero limitada, ya que no soporta antialiasing, ni transparencias. Sin embargo es muy rápido ya que era (hasta el Windows Vista)  parcialmente “acelerado por hardware”, esto quiere decir que algunas operaciones eran realizadas por el procesador gráfico GPU.

Al salir Windows XP, se creó un nuevo subsistema gráfico llamado GDI+ (GDI plus). Esta API en C++ ofrecía mejoras en la calidad de los gráficos ya que soportaba anitaliasing y transparecias, pero sigue siendo una API para gráficos en 2D. Estas nuevas características son realmente notorias para gráficos de alta calidad, con bordes suavizados tanto en en las lineas y curvas como en el dibujo de las letras (fonts). Sin embargo esta API trabaja integramente por software, es decir no es acelerada por hardware lo que hace que sea mucho más lento que GDI, claro que para gráficos sencillos sin mucha animación como son las interfaces de usuario tradicionales puede no ser muy dramático.

A partir de Windows Vista, Microsoft desarrolló una tecnología diferente para soportar “Aero” que es su nuevo manejador de ventanas “Desktop Window Manager (DWM) composition engine”. Este manejador está basado en DirectX. DirectX es una API de para gráficos 3D y es acelerada por hardware (asumiendo que la tarjeta gráfica soporte DirectX v9, que es el caso de todas las tarjetas modernas). Estas capacidades permiten gráficos de alta calidad usando menos CPU y de forma más rápida.

Continúa leyendo Delphi y UI acelerados por hardware