Las APIs gráfica no es una pieza de hardware, sino una pieza de software, pero es esencial para el renderizado de los gráficos que se presentan en nuestra pantalla y sin ellas la comunicación entre las aplicaciones y la GPU no sería posible. En este artículo os explicamos de manera accesible que son las APIs gráficas y rompemos algunos mitos relacionados con estas.
Se ha de tener en cuenta que las GPUs no ejecutan programas, pero si que ejecutan una lista de instrucciones. pero, ¿de donde viene dicha lista y como llega hasta la GPU?
¿Qué es una API Gráfica?
Las APIs gráficas es lo que le permite a las aplicaciones comunicarse con la GPU para marcarle como ha dibujar el siguiente fotograma o parte de mismo. El concepto se basa en la abstracción que es la creación en un lenguaje de programación de lo que es una GPU, para entender el concepto de abstracción vamos a suponer que en vez de una GPU tenemos conectada una máquina de refrescos.
La API de la máquina de refresco sería una librería con las siguientes funciones: echar moneda, devolver cambio, seleccionar refresco y entregar Refresco, de tal manera que el programa puede interactuar, a esta parte de la llama el Front-End de la API, y lo que hacemos con ella es la lista de instrucciones, pues bien en una GPU a dicha lista se la llama DisplayList o lista de pantalla.
Dicha lista de pantalla es leída por un software que no es otro que el driver de la tarjeta gráfica, este transforma la lista en un microcódigo que la GPU puede entender y lo copia en una parte de la memoria RAM a la que la GPU siempre accede para leer la lista de pantalla, copia dicha lista en la memoria interna de sus procesadores de comandos y empieza a renderizar la escena o esa parte de la misma con las instrucciones de la lista de pantalla.
Este proceso se hace de manera continua en cada fotograma que renderiza la GPU y que envía a la pantalla, independientemente de si estas utilizando un PC gaming, un smartphone o una consola de videojuegos.
¿Cualés son las APIs gráficas en la actualidad?
Las APIs gráficas más utilizadas actualmente son las siguientes:
- Vulkan: Reemplaza a OpenGL, es utilizada en todo tipo de sistemas operativos, lo que se dice que es agnóstico de plataforma, pero son las de Google las que la tienen como API principal.
- Metal: La API gráfica de Apple, utilizada en macOS y optimizada especialmente para su arquitectura de GPUs.
- DirectX: La API de Microsoft para Windows y Xbox, estaba dividida en varias versiones según plataforma, pero recientemente la han unificado en una sola versión.
- GNM/GNMX/GNM++: La API gráfica de las consolas PlayStation 4 y PlayStation 5 de SONY, GNMX es una API de alto nivel, GNM s la API versión de bajo nivel en PS4 y GNM++ en PS5.
- NVN: La API gráfica de Nintendo Switch, la cual es utilizada en exclusiva en esta serie de consolas.
- OpenGL: La API que lo empezó todo, originalmente conocida como IrisGL y diseñada para las estaciones de Silicon Graphics, evoluciono para convertirse en la API de PCs, consolas y más tarde smartphones. Llego a la versión 4 siendo Vulkan un rebranding de OpenGL 5.
Computación vs Gráficos
Las GPUs son procesadores sumamente complejos que hace tiempo que dejaron de ser meros juguetes para renderizar videojuegos, en la actualidad son utilizados en campos como la inteligencia artificial o la computación de alto rendimiento, lo que ha llevado a la evolución de las APIs gráficas e ir más allá de los gráficos.
Actualmente las aplicaciones no mandan una sola lista sino varias listas, siendo una de ellas la de gráficos y el resto de computación, donde la GPU es utilizada para resolver problemas concretos que no tienen nada que ver con el renderizado de los gráficos, funcionando estas últimas de manera completamente asincrona y por tanto no dependiendo de la lista de pantalla.
Por ejemplo, puede ser que una aplicación de diseño gráfico utilice la potencia de la GPU para solventar un efecto especial sobre una fotografía, solo porque la GPU este mejor preparada para solucionar ese problema que una CPU. Gracias a las listas de computación lo puede hacer utilizando los recursos libres de la GPU para solventar esos pequeños problemas
APIs gráficas de alto nivel y bajo nivel: ¿en que se diferencian?
Cuando hablamos de una API de bajo nivel nos referimos a una API que se ejecuta cercana a la GPU, la cual esta abajo en la pila mientras que el driver esta en la parte alta, una API de alto nivel es por tanto aquella que requiere de un driver generando la lista de pantalla. Al no ejecutarse en la API de alto nivel ciertas tareas del driver lo que se consigue en teoria es que el tiempo a la hora de ejecutar la lista de pantalla por parte de la CPU sea más corto, esto significa terminar el fotograma en menos milisegundos o dar más tiempo para mejorar los gráficos de ese mismo fotograma.
En realidad es falso que las APIs de bajo nivel carezcan de un driver como se puede leer y escuchar en algunos sitios, sino que este es mucho más simple y le carga el trabajo a la hora de hacer ciertas tareas esenciales a la aplicación, esto le permite a los desarrolladores optimizar el tiempo de cada fotograma en lo máximo posible al tener control en el proceso de creación de la lista de pantalla.
No obstante, muchas veces para los desarrolladores puede ser mucho más cómodo utilizar una API de alto nivel, por el hecho que el tiempo de desarrollo adicional no compensa económicamente o simplemente porque el benefició que se puede ganar a través de adaptar al juego a una API de bajo nivel es imperceptible.
El mito de la consola y el PC
Existe el mito que debido a que una consola tiene un hardware único se traduce en que las APIs esta mucho más optimizada que en el PC donde hay multitud de configuraciones distintas, pero realmente es el driver que tenemos instalado lo que genera la lista de pantalla. La diferencia es que en consolas dicho driver es estático y no recibe actualizaciones de rendimiento ni cambios en toda la vida comercial de la consola.