Una biblioteca de renderizado C++ multiplataforma que abstrae Direct3D, Metal, OpenGL, Vulkan y WebGL para que puedas integrarla en tu propio motor.
sebbbi/NoGraphicsAPI
Una biblioteca gráfica mínima en C++20 para Metal 4 y Vulkan 1.4 que sustituye los buffers y los descriptor sets por punteros de GPU y descriptor heaps.
- Estrellas
- 1,699
- Forks
- 60
- Issues abiertos
- 6
- Último commit
- hace 7 horas
¿Qué es?
NoGraphicsAPI es una biblioteca gráfica de bajo nivel en C++20 que implementa las ideas de la propuesta «No Graphics API» de Sebastian Aaltonen. En lugar de crear objetos de buffer, layouts de vértices y descriptor sets, las aplicaciones asignan memoria de GPU desde heaps, pasan punteros de GPU de 64 bits a los shaders y referencian texturas y samplers mediante índices en descriptor heaps propiedad de la aplicación.
Cada draw o dispatch recibe un único puntero de GPU a una estructura raíz compartida entre C++ y los shaders de Slang. La estructura puede contener punteros a datos de vértices, materiales y constantes, además de índices de texturas, para que los vertex shaders obtengan sus propios vértices y no sea necesario mantener layouts de pipeline ni de bindings. Las barreras describen el trabajo productor y consumidor en vez de listas de transiciones de recursos, y la aplicación sigue siendo responsable de la asignación, el ciclo de vida y la sincronización.
La biblioteca es compatible con Metal 4 en dispositivos Apple silicon con macOS, iOS o iPadOS 26 o posterior, y con Vulkan 1.4 mediante VK_EXT_descriptor_heap y VK_EXT_mesh_shader en Windows y Linux. Windows y macOS incluyen ejemplos con ventanas, mientras que Linux actualmente admite el uso sin interfaz gráfica.
Funciones clave
- 01Asigna memoria de GPU desde heaps sin exponer objetos de buffer públicos; los heaps mapeados proporcionan direcciones tanto de CPU como de GPU.
- 02Los shaders acceden a los datos mediante punteros de GPU tipados de 64 bits, compartidos con las estructuras de C++.
- 03Las texturas y los samplers bindless se indexan mediante descriptor heaps propiedad de la aplicación.
- 04Cada draw o dispatch usa un único puntero raíz de GPU, lo que evita los layouts de descriptor sets y de pipelines.
- 05Los shaders se escriben en Slang y se comparten entre los backends de Metal y Vulkan.
Casos de uso
- Crear un renderer personalizado que requiera control directo sobre la memoria de GPU y los bindings.
- Experimentar con rendering bindless y layouts de datos controlados por la GPU en Metal 4 o Vulkan 1.4.
- Estudiar una implementación concreta en C++ y Slang de las ideas de «No Graphics API».
Inicio rápido
- 1
Instala Xcode 26 o posterior con su compilador Metal, CMake y Slang 2026.18.2 o posterior
- 2
Configura la compilación con examples y tests activados
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_SYSROOT=macosx -DNOGRAPHICSAPI_BUILD_EXAMPLES=ON -DNOGRAPHICSAPI_BUILD_TESTS=ON -DNOGRAPHICSAPI_SLANGC=/path/to/slangc - 3
Compila el proyecto
cmake --build build - 4
Ejecuta el ejemplo triangle
build/examples/triangle/example_triangle
Antes de usarlo
- El backend Metal requiere macOS, iOS o iPadOS 26 o posterior y una GPU Apple de la familia 7 o superior; no se admiten los Mac con Intel.
- El backend Vulkan requiere Vulkan 1.4, además de VK_EXT_descriptor_heap y VK_EXT_mesh_shader, extensiones de las que carecen muchas GPU.
- Linux solo admite actualmente el uso headless; no hay ejemplos con ventanas.
En colecciones
Temas
Preguntas frecuentes
- ¿Qué es NoGraphicsAPI?
- Una biblioteca gráfica mínima en C++20 para Metal 4 y Vulkan 1.4 que sustituye los buffers y los descriptor sets por punteros de GPU y descriptor heaps. NoGraphicsAPI es una biblioteca gráfica de bajo nivel en C++20 que implementa las ideas de la propuesta «No Graphics API» de Sebastian Aaltonen. En lugar de crear objetos de buffer, layouts de vértices y descriptor sets, las aplicaciones asignan memoria de GPU desde heaps, pasan punteros de GPU de 64 bits a los shaders y referencian texturas y samplers mediante índices en descriptor heaps propiedad de la aplicación.
- ¿NoGraphicsAPI es gratuito? ¿Qué licencia tiene?
- NoGraphicsAPI es open source bajo la licencia MIT. Revisa los términos de la licencia antes de usarlo en productos comerciales.
- ¿NoGraphicsAPI sigue mantenido?
- Mantenimiento activo. El último commit de NoGraphicsAPI fue el 6 nov 2026.
- ¿Para qué puedo usar NoGraphicsAPI?
- Crear un renderer personalizado que requiera control directo sobre la memoria de GPU y los bindings. Experimentar con rendering bindless y layouts de datos controlados por la GPU en Metal 4 o Vulkan 1.4. Estudiar una implementación concreta en C++ y Slang de las ideas de «No Graphics API».
- ¿Cómo se instala NoGraphicsAPI?
- Instala Xcode 26 o posterior con su compilador Metal, CMake y Slang 2026.18.2 o posterior Configura la compilación con examples y tests activados: cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_SYSROOT=macosx -DNOGRAPHICSAPI_BUILD_EXAMPLES=ON -DNOGRAPHICSAPI_BUILD_TESTS=ON -DNOGRAPHICSAPI_SLANGC=/path/to/slangc Compila el proyecto: cmake --build build Ejecuta el ejemplo triangle: build/examples/triangle/example_triangle
- ¿Dónde consigo NoGraphicsAPI?
- El código fuente y las instrucciones de instalación están en GitHub: https://github.com/sebbbi/NoGraphicsAPI
Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.
Proyectos relacionados
Un wrapper funcional de WebGL que elimina el estado compartido de la GPU y permite describir las llamadas de dibujo como comandos y compilarlas en JavaScript optimizado.
Motor de renderizado en tiempo real basado en física para Android, iOS, Linux, macOS, Windows y WebGL2, diseñado para ser pequeño y eficiente en Android.
Un framework abierto de compilación de machine learning que permite personalizar pipelines de compilación en Python y desplegar modelos en distintos tipos de hardware.
Bindings de C++ header-only para la API C de Vulkan, con enumeraciones seguras por tipos, compatibilidad con STL, excepciones y handles RAII.
Curso paso a paso para aprender renderizado 3D creando un renderizador por software en unas 500 líneas de C++ puro, sin bibliotecas de terceros.