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.

Sin embargos las aplicaciones programadas usando GDI deben seguir funcionando por lo que Windows usa un sistemama híbrido. Cuando DWM está activado las llamadas a GDI no son pasadas al GPU si no manejadas por DirectX, por lo que ya no son acelerdas por hardware directamente, si no através de DirectX. Cuando el DWM está desactivado, es decir se desactiva el tema Aero, las llamadas de GDI funcionan como antes.

Con la salida de Windows 7, Microsoft sacó una nueva API llamada Direct2D, pensada para gráficos en 2D acelerados por software basados en DirectX, que es mas o menos lo mismo que usa Aero.

¿Cómo es que se usa 3D para gráficos 2D como lineas y rectángulos? Bueno veamos, en 3D los puntos se identifican por coordenadas x, y, z. Donde z especifica la profundidad, es decir un z mayor o menor indica si un punto esta más cerca o más lejos. En 2D todo está en un mismo plano, por lo que podemos pensar que todos los puntos tienen el mismo z, por ejemplo 0.

En Delphi las funciones nativas para dibujar como DrawRectangle, LineTo, etc usan GDI.

También existen “wrappers” para la API GDI+, y adicionalmente paquetes como AggPas, Graphics23 que hace mas o menos lo mismo que GDI+ ofreciendo antialaising y transparencias. Controles como los de Developers Express (para VCL) por ejemplo usan GDI+.

Ahora que se está anunciando la nueva versión de Delphi, la XE2, vemos que entre sus características está FireMonkey un nuevo motor gráfico para la interfaz gráfica que, según se indica, es acelerada por hardware, y ofrece la posibilidad de crear vistosas aplicaciones de escritorio (dicho sea de paso esto ya se hace con WPF). Otro punto interesante es que al mismo tiempo se está ofreciendo soporte multiplataforma inicialmente para MacOSX. mmm interesante….

Inicialmente uno podría pensar que se está usando Direct2D, más aun teniendo en cuenta que varios blogs de Delphi estuvieron tratando sobre esta API. Pero el eso de Direct2D y DirectX por extensión están limitadas a Windows, por lo que no funcionaría para el soporte multipltaforma, mmm interesante…

Lurgo vemos que a comienzos de año Embarcadero, la casa matriz de Delphi, compró KSDev, desarrollador de un producto llamado VGScene que ofrecía gráficos de alta calidad, si buscamos en la “máquina del tiempo de la internet” en http://web.archive.org/web/20090116124747/http://ksdev.com/vgscene/index.html podemos ver que el producto ofrecía:

  • Cross-platform solution available on Microsoft Windows and Apple Mac OS X
  • Alpha blending, gradient and special visual filling
  • Fast realtime anti-alised 2D GUI engine
  • etc…

mmm interesante, parece que la compra le ridió frutos a Delphi.

Sin haber visto el código de VGScene, podría decir que está basado en OpenGL, que es similar a DirectX y que si es multiplataforma. Esto suena realmente interesante por que ahora desde Delphi podríamos desarrollar aplicaciones con el mismo look and fell para Windows y Mac sin practicamente ensuciarnos las manos, claro que los puristas de MacOS y su UI saltarán hasta el cielo y gritarán sacrilegio!!! Pero al menos ya tenemos la opción. Otro punto interesante es que con OpenGL las capacidades gráficas de nuestras aplicaciones practicamente sería ilimitadas, pudiendo combinar gráficos de alta calidad, animaciones, transiciones, efectos, etc todo con la alta performance propia de los gráficos acelerados por hardware (OpenGL es soportado por creo que todas las tarjetas gráficas medianamente modernas). Si no están convencidos de la velocidad de los gráficos 3D en hardware, simplemente abre cualquier juego como Halo, Warcraft III, AoE III y verás que rápidos son.

Esperando a Delphi XE2

Anuncios

Publicado por

danielluyo

Programador con experiencia en Delphi, Java, C/C++, VB, SQL, PHP.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s