* Add support for ccache
To benefit from ccache, first install ccache (for instance with
brew install ccache on macOS). On my machine a clean build takes
~5 minutes the first time. A second clean build with ccache enabled
takes 34 seconds.
* Enable more aggressive caching
This moves the camera manipulator into its own library and adds new
functionality including a new "Google Maps" manipulator and a bookmark
feature to facilitate camera animation.
Java bindings and an Android sample will land later this week.
We now should be able to use PlatformEGL for all generic EGL platforms
(not tested though). Most texture streaming operations are not supported
in that case, since they're platform specific.
* Lower limit from API 21 to API 19
This was requested by an internal application. API 19 is when OpenGL
ES 3.0 support was added so there is no good reason for us to not
support this API level. The only trick is to avoid referring to the
glTexStorage2DMultisample symbol directly as it only exists in 3.1.
* Compile out code we never use
* Use reflection to handle shared EGL contexts pre-API 21.
* Remove comment
* More fixes required to run on API level 19
- dlym() fails for ashmem on API 19, so we only try on API 26+ instead.
- Older emulation for OpenGL ES 3.0 returns error states for valid API calls so we need to clear the GL error bit before we create the GL driver.
- Activity lifecycle changes since API 19 would cause animations to keep running and to reference destroyed objects.
- EGLContext.getNativeHandle() is new in API 21, we need to use reflection on API 19. The new code path uses the class loading trick to avoid a bytecode verification error on API 19.
* Filament now runs properly on API level 19
This commit adds a new api_level() API to libutils which can be used to
query the platform's API level. On Android it works as expected, other
platforms currently return 0.
* Add Android presubmit
* Build Android on Linux, macOS targets have NDK 18 only
* Consolidate workflows and jobs
* Try to build Android on macOS
* Fix typo
* Cleanup scripts
* Try NDK side by side if NDK bundle has the wrong version
* Simplify logic
* Fix NDK logic
* Only update the NDK when necessary
* Fix typo
* Update required NDK version
* Favor NDK side-by-side
* Remove support for obsolete NDK bundle, require NDK side-by-side
* Install the NDK side by side when missing
Every time ninja invoked CMake, we were unconditionally regenerating
all of our "licenses.inc" files which caused a ton of re-compiles.
Before the change, building after touching `ubershader.mat.in` took over
a minute, now it takes 20 seconds.
The CMake "file" commands are bad. The CMake documentation says:
If the file is a build input, use the configure_file() command
to update the file only when its content changes.