Files
filament/filament
Mathias Agopian 1dfc7fd5ae parallelize light and renderable culling
the code was structured so light culling and renderable culling could
be done in parallel, but this wasn't implemented.
Clean-up some methods to turn them to static and run light culling
in parallel with renderable culling.
2018-12-10 21:34:00 -08:00
..

Filament

This package contains several executables and libraries you can use to build applications using Filament. Latest versions are available on the project page.

Binaries

  • cmgen, Image-based lighting asset generator
  • filamesh, Mesh converter
  • matc, Material compiler
  • 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
  • skygen, Physically-based sky environment texture generator
  • specular-color, Computes the specular color of conductors based on spectral data

You can refer to the individual documentation files in docs/ for more information.

Libraries

Filament is distributed as a set of static libraries you must link against:

  • bluegl, Required to render with OpenGL
  • bluevk, Required to render with Vulkan
  • filabridge, Support library for Filament
  • filaflat, Support library for Filament
  • filament, Main Filament library
  • 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-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
  • 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 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.