006 Métodos
006.6 Gráficos

2.1 Introducción

Desde que Silicon Graphics Inc. lanzó OpenGL por primera vez en 1992, ha sido ampliamente adoptado en todo el mundo por la industria y el mundo académico. La API redujo las complejidades de ingeniería y lo que siguió en los años siguientes fue el nacimiento de soluciones visualmente impresionantes que capturaron la imaginación (tanto visual como inspiradoramente). La capacidad de lograr imágenes impresionantes generadas por computadora fue posible gracias a nuevos avances tecnológicos. Los gráficos por computadora se han vuelto cada vez más desafiantes utilizando enfoques convencionales y las expectativas han crecido y continúan creciendo, especialmente en áreas relacionadas con películas, juegos y realidad virtual. Un desafío específico es la capacidad de explotar los avances en tecnologías que cambian rápidamente. Por ejemplo, a pesar de la disponibilidad inmediata de múltiples tarjetas gráficas de alto rendimiento, las limitaciones de las bibliotecas existentes han hecho que sea difícil, si no imposible, explotar todo el potencial del hardware (distribuir la carga de trabajo para procesar y renderizar imágenes de alta fidelidad en tiempo real entre múltiples dispositivos de manera eficiente [4]). Si bien los paradigmas de procesamiento paralelo se han convertido en una solución atractiva en los últimos años, con múltiples núcleos e hilos trabajando juntos para ofrecer enormes ganancias de rendimiento, desarrollar aplicaciones paralelas que aprovechen estas aceleraciones paralelas de manera eficiente y confiable es un desafío importante.

Vulkan es una interfaz gráfica y de computación multiplataforma y multilenguaje que aprovecha las arquitecturas de hardware “paralelas” más recientes. Vulkan le proporciona a usted y a los desarrolladores una potente interfaz para crear imágenes impresionantes para una amplia gama de aplicaciones. Vulkan sigue las mismas iniciativas “OpenGL” originales, es decir, desarrollar una API multiplataforma de código abierto de alta calidad (Mac, Windows, Linux, Android, Solaris y FreeBSD). OpenGL ha recorrido un largo camino y le ha ido sorprendentemente bien en los últimos 25 años (Figura 2.3). Sea como fuere, es hora de una actualización importante. Como la API OpenGL original sigue una arquitectura de máquina de estados, esto vincula la API a un único contexto en pantalla. Además, la API OpenGL es ciega a todo lo que hace la GPU (optimizada y administrada dentro del controlador, y oculta al desarrollador). Vulkan adopta un enfoque diferente: sigue una API basada en objetos sin estado global, de modo que todos los conceptos de estado se localizan en un búfer de comandos (aprenderá sobre los búferes de comandos en la Sección 6.7). Además, Vulkan es más explícito sobre lo que hace la GPU (oculta menos lo que sucede dentro del controlador).

Mejoras de la API:

Control explícito
Compatible con subprocesos múltiples
Direct State Access (DSA) Acceso Estatal Directo en español
Gráficos sin límites
Información de la memoria del búfer de cuadros
Barrera de textura
Aceleración para aplicaciones (ej., navegadores, WebGL, …)

El principio de control explícito significa que prometes contarle al controlador cada detalle, de modo que el controlador no tenga que adivinar ni hacer suposiciones. A cambio, el controlador es más ágil y eficiente (hace lo que le pediste cuando lo pediste rápidamente). Por ejemplo, la gestión de memoria en Vulkan le da el control a la aplicación (el uso total de memoria es más visible y simplifica las operaciones, como la transmisión de datos). Recuerda, la aplicación está a cargo (por lo que hacerlo correctamente es tu responsabilidad).

Aunque la última API gráfica OpenGL (conocida como Vulkan) puede parecer otra iteración, vale la pena aprenderla o incluso revisarla. Al mismo tiempo, Vulkan se encuentra en su primera versión (revisión 1.0) y posee una gran cantidad de cambios/mejoras en comparación con cualquier actualización anterior. Es importante destacar que estas mejoras no deben ignorarse, ya que ofrecen posibilidades que antes no eran factibles. Estas características clave lo ayudarán a aprovechar más las GPU. Sin embargo, para obtener mejoras es importante que comprenda las diferencias (es decir, las aplicaciones deben escribirse de manera diferente para utilizar estas características y controles adicionales: OpenGL = Vulkan). Como se muestra en la Figura 2.4, notará el cambio de poder entre el controlador y la aplicación. La abstracción de Vulkan significa que su aplicación está mucho más cerca del hardware en comparación con las API tradicionales. Su aplicación controla el hardware directamente, mientras que deja la abstracción suficiente para que las cosas sean portátiles. El controlador no está cuestionando sus decisiones, pero al mismo tiempo tampoco está siendo cuestionado primero. Ahora tienes todo el control que necesitas para sacar el máximo partido a tu hardware. Si no va rápido en Vulkan, es culpa tuya (por supuesto, recuerda que un gran poder conlleva una gran responsabilidad).

Algunos de los elementos “importantes” de Vulkan son:

  • Control explícito,
  • Soporte para múltiples núcleos/subprocesos,
  • Predictibilidad,
  • Los formatos de textura, la gestión de memoria y la sincronización están controlados por el cliente.
  • Los controladores Vulkan no hacen comprobación de errores y
  • Eficiencia del ancho de banda.