Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/facebook/igl
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).
https://github.com/facebook/igl
Last synced: 2 days ago
JSON representation
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).
- Host: GitHub
- URL: https://github.com/facebook/igl
- Owner: facebook
- License: other
- Created: 2023-07-07T15:57:14.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-10-29T03:10:28.000Z (about 1 month ago)
- Last Synced: 2024-10-29T15:17:10.158Z (about 1 month ago)
- Language: C++
- Homepage:
- Size: 13.9 MB
- Stars: 2,966
- Watchers: 57
- Forks: 172
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
- Roadmap: ROADMAP.md
Awesome Lists containing this project
- awesome-game-engine-dev - Intermediate Graphics Library (IGL) - Cross-platform abstraction layer by _Facebook_. (Libraries / C++)
README
[![Build Status](https://github.com/facebook/igl/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/facebook/igl/actions)
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
* Metal 2+
* OpenGL 2.x (requires [GL_ARB_framebuffer_object](https://registry.khronos.org/OpenGL/extensions/ARB/ARB_framebuffer_object.txt))
* OpenGL 3.1+
* OpenGL ES 2.0+
* Vulkan 1.1
* WebGL 2.0## Supported platforms
* Android
* iOS
* Linux
* macOS
* Windows
* WebAssembly## API Support
| | Windows | Linux | macOS | iOS | Android |
| ------------------------ | -------------------------- | -------------------------- | ----------------------------- | ----------------------------- | ---------------------------------- |
| Vulkan 1.1 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: (MoltenVK) | :heavy_multiplication_x: | :heavy_check_mark: (Quest 2/3/Pro) |
| OpenGL ES 2.0 - 3.0 | :heavy_check_mark: (Angle) | :heavy_check_mark: (Angle) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| OpenGL ES 3.1 - 3.2 | :heavy_check_mark: (Angle) | :heavy_check_mark: (Angle) | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_check_mark: |
| OpenGL 3.1 - 4.6 | :heavy_check_mark: | :heavy_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: |
| Metal 2 | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_multiplication_x: |## 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](./LICENSE.md) 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](./build/android/) folder.
* WebAssembly
Please install [Emscripten](https://emscripten.org/docs/getting_started/downloads.html) and [Ninja](https://ninja-build.org/).
```
cd build
emcmake cmake .. -G Ninja
cmake --build .
```## Screenshots
![image](.github/screenshot01.png)
![image](.github/screenshot02.png)
## License
IGL is released under the MIT license, see [LICENSE.md](./LICENSE.md) for the full text as well as third-party library
acknowledgements. SparkSL Compiler is released under the SparkSL Compiler License, see [LICENSE](https://github.com/facebook/igl/releases/download/SparkSL/SparkSL.LICENSE) for full text.