Update README on linking against Filament (#379)

* Add section to README on linking against Filament
This commit is contained in:
Ben Doherty
2018-10-15 11:18:45 -07:00
committed by GitHub
parent 7c54faa8bd
commit 6992c8a584

View File

@@ -11,7 +11,7 @@ Filament. Latest versions are available on the [project page](https://github.com
- `matinfo`, Displays information about materials compiled with `matc`
- `mipgen`, Generates a series of miplevels from a source image.
- `normal-blending`, Tool to blend normal maps
- `roughness-prefilter`, Pre-filters a roughness map from a normal map to reduce aliasing
- `roughness-prefilter`, Pre-filters a roughness map from a normal map to reduce aliasing
- `skygen`, Physically-based sky environment texture generator
- `specular-color`, Computes the specular color of conductors based on spectral data
@@ -29,10 +29,119 @@ Filament is distributed as a set of static libraries you must link against:
- `utils`, Support library for Filament
To use Filament from Java you must use the following two libraries instead:
- `filament-java.jar`, Contains Filament's Java classes
- `filament-java.jar`, Contains Filament's Java classes
- `filament-jni`, Filament's JNI bindings
To use the Vulkan backend on macOS you must also make the following libraries available at runtime:
- `MoltenVK_icd.json`
- `libMoltenVK.dylib`
- `libMoltenVK.dylib`
- `vulkan.1.dylib`
## Linking against Filament
This walkthrough will get you successfully compiling and linking native code
against Filament with minimum dependencies.
To start, download Filament's [latest binary release](https://github.com/google/filament/releases)
and extract into a directory of your choosing. Binary releases are suffixed
with the platform name, for example, `filament-20181009-linux.tgz`.
Create a file, `main.cpp`, in the same directory with the following contents:
```
#include <filament/FilamentAPI.h>
#include <filament/Engine.h>
using namespace filament;
int main(int argc, char** argv)
{
Engine *engine = Engine::create();
engine->destroy(&engine);
return 0;
}
```
The directory should look like:
```
|-- README.md
|-- bin
|-- docs
|-- include
|-- lib
|-- main.cpp
```
We'll use a platform-specific Makefile to compile and link `main.cpp` with Filament's libraries.
Copy your platform's Makefile below into a `Makefile` inside the same directory.
### Linux
```
FILAMENT_LIBS=-lfilament -lbluegl -lbluevk -lfilabridge -lfilaflat -lutils
CC=clang++
main: main.o
$(CC) -Llib/x86_64/ main.o $(FILAMENT_LIBS) -lpthread -lc++ -ldl -o main
main.o: main.cpp
$(CC) -Iinclude/ -std=c++14 -pthread -c main.cpp
clean:
rm -f main main.o
.PHONY: clean
```
### macOS
```
FILAMENT_LIBS=-lfilament -lbluegl -lbluevk -lfilabridge -lfilaflat -lutils
CC=clang++
main: main.o
$(CC) -Llib/x86_64/ main.o $(FILAMENT_LIBS) -framework Cocoa -o main
main.o: main.cpp
$(CC) -Iinclude/ -std=c++14 -c main.cpp
clean:
rm -f main main.o
.PHONY: clean
```
### Windows
```
FILAMENT_LIBS=lib/x86_64/filament.lib lib/x86_64/bluegl.lib \
lib/x86_64/filabridge.lib lib/x86_64/filaflat.lib lib/x86_64/utils.lib
CC=clang-cl.exe
main.exe: main.obj
$(CC) main.obj $(FILAMENT_LIBS) gdi32.lib user32.lib opengl32.lib
main.obj: main.cpp
$(CC) /Iinclude/ /std:c++14 /c main.cpp
clean:
del main.exe main.obj
.PHONY: clean
```
### Compiling
You should be able to invoke `make` and run the executable successfully:
```
$ make
$ ./main
FEngine (64 bits) created at 0x106471000 (threading is enabled)
```
On Windows, you'll need to open up a Visual Studio Native Tools Command Prompt
and invoke `nmake` instead of `make`.