Repolode
sebbbi

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. 1

    Instala Xcode 26 o posterior con su compilador Metal, CMake y Slang 2026.18.2 o posterior

  2. 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. 3

    Compila el proyecto

    cmake --build build
  4. 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