Skip to content
/ igl Public

Intermediate Graphics Library (IGL) is a cross-platform library that commands the GPU. It provides a single low-level cross-platform interface on top of various graphics APIs (e.g. OpenGL, Metal and Vulkan).

License

Notifications You must be signed in to change notification settings

facebook/igl

Folders and files

NameName
Last commit message
Last commit date
Nov 8, 2024
Dec 10, 2024
Nov 22, 2024
Jul 7, 2023
Jul 7, 2023
Dec 10, 2024
Dec 12, 2024
Dec 12, 2024
Dec 12, 2024
Oct 15, 2024
Jul 7, 2023
Oct 8, 2024
Jul 7, 2023
Dec 2, 2024
Dec 2, 2024
Jan 17, 2024
Jul 11, 2023
Nov 22, 2023
Nov 22, 2023
Jul 19, 2023

Repository files navigation

IGL Logo

Build Status

Intermediate Graphics Library (IGL) is a cross-platform library that commands the GPU. It encapsulates common GPU functionality with a low-level cross-platform interface. IGL is designed to support multiple backends implemented on top of various graphics APIs (e.g. OpenGL, Metal and Vulkan) with a common interface.

There are a lot of good options for abstracting GPU API's; each making different trade-offs. We designed IGL around the following priorities:

  1. Low-level, forward-looking API. IGL embraces modern abstractions (command buffers, state containers, bindless, etc) and is designed to give more control than OpenGL's state machine API. As a result, IGL can have leaner backends for modern API's (e.g. Metal, Vulkan).
  2. Minimal overhead for C++. IGL supports new or existing native rendering code without overhead of language interop or the need for other language runtimes.
  3. Reach + scale in production. IGL has been globally battle-tested for broad device reliability (especially the long-tail of Android devices as well as Quest 2/3/Pro compatibility for OpenGL/Vulkan) and performance-tuned on our apps.

Supported rendering backends

Supported platforms

  • Android
  • iOS
  • Linux
  • macOS
  • Windows
  • WebAssembly

API Support

Windows Linux macOS iOS Android
Vulkan 1.1 ✔️ ✔️ ✔️ (MoltenVK) ✖️ ✔️ (Quest 2/3/Pro)
OpenGL ES 2.0 - 3.0 ✔️ (Angle) ✔️ (Angle) ✔️ ✔️ ✔️
OpenGL ES 3.1 - 3.2 ✔️ (Angle) ✔️ (Angle) ✖️ ✖️ ✔️
OpenGL 3.1 - 4.6 ✔️ ✔️ ✖️ ✖️ ✖️
Metal 2 ✖️ ✖️ ✔️ ✔️ ✖️

Build

Before building, run the deployment scripts:

python3 deploy_content.py
python3 deploy_deps.py

These scripts download external third-party dependencies. Please check Dependencies for the full list.

  • Windows
cd build
cmake .. -G "Visual Studio 17 2022"
  • Linux
sudo apt-get install clang xorg-dev libxinerama-dev libxcursor-dev libgles2-mesa-dev libegl1-mesa-dev libglfw3-dev libglew-dev libstdc++-12-dev
cd build
cmake .. -G "Unix Makefiles"
  • macOS
cd build
cmake .. -G "Xcode" -DIGL_WITH_VULKAN=OFF
  • iOS
cd build
cmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../third-party/deps/src/ios-cmake/ios.toolchain.cmake -DDEPLOYMENT_TARGET=13.0 -DPLATFORM=OS64
  • Android

The Gradle project is located within the build/android folder.

  • WebAssembly

Please install Emscripten and Ninja.

cd build
emcmake cmake .. -G Ninja
cmake --build .

Screenshots

image

image

License

IGL is released under the MIT license, see LICENSE.md for the full text as well as third-party library acknowledgements. SparkSL Compiler is released under the SparkSL Compiler License, see LICENSE for full text.

About

Intermediate Graphics Library (IGL) is a cross-platform library that commands the GPU. It provides a single low-level cross-platform interface on top of various graphics APIs (e.g. OpenGL, Metal and Vulkan).

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published