From 1b38cda0d51f0648e6e488b196851b48ca56d824 Mon Sep 17 00:00:00 2001 From: Ben Doherty Date: Wed, 8 May 2024 14:42:40 -0700 Subject: [PATCH] Add preferredShaderLanguage Java bindings (#7835) --- .../filament-android/src/main/cpp/Engine.cpp | 4 +++- .../com/google/android/filament/Engine.java | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/android/filament-android/src/main/cpp/Engine.cpp b/android/filament-android/src/main/cpp/Engine.cpp index 482d54834b..a4ace37853 100644 --- a/android/filament-android/src/main/cpp/Engine.cpp +++ b/android/filament-android/src/main/cpp/Engine.cpp @@ -518,6 +518,7 @@ extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Engine_nSetBu jint stereoscopicType, jlong stereoscopicEyeCount, jlong resourceAllocatorCacheSizeMB, jlong resourceAllocatorCacheMaxAge, jboolean disableHandleUseAfterFreeCheck, + jint preferredShaderLanguage, jboolean forceGLES2Context) { Engine::Builder* builder = (Engine::Builder*) nativeBuilder; Engine::Config config = { @@ -534,7 +535,8 @@ extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Engine_nSetBu .resourceAllocatorCacheSizeMB = (uint32_t) resourceAllocatorCacheSizeMB, .resourceAllocatorCacheMaxAge = (uint8_t) resourceAllocatorCacheMaxAge, .disableHandleUseAfterFreeCheck = (bool) disableHandleUseAfterFreeCheck, - .forceGLES2Context = (bool) forceGLES2Context + .preferredShaderLanguage = (Engine::Config::ShaderLanguage) preferredShaderLanguage, + .forceGLES2Context = (bool) forceGLES2Context, }; builder->config(&config); } diff --git a/android/filament-android/src/main/java/com/google/android/filament/Engine.java b/android/filament-android/src/main/java/com/google/android/filament/Engine.java index bfb17aa5ae..8d53c412b4 100644 --- a/android/filament-android/src/main/java/com/google/android/filament/Engine.java +++ b/android/filament-android/src/main/java/com/google/android/filament/Engine.java @@ -226,6 +226,7 @@ public class Engine { config.stereoscopicType.ordinal(), config.stereoscopicEyeCount, config.resourceAllocatorCacheSizeMB, config.resourceAllocatorCacheMaxAge, config.disableHandleUseAfterFreeCheck, + config.preferredShaderLanguage.ordinal(), config.forceGLES2Context); return this; } @@ -430,6 +431,28 @@ public class Engine { */ public boolean disableHandleUseAfterFreeCheck = false; + /* + * Sets a preferred shader language for Filament to use. + * + * The Metal backend supports two shader languages: MSL (Metal Shading Language) and + * METAL_LIBRARY (precompiled .metallib). This option controls which shader language is + * used when materials contain both. + * + * By default, when preferredShaderLanguage is unset, Filament will prefer METAL_LIBRARY + * shaders if present within a material, falling back to MSL. Setting + * preferredShaderLanguage to ShaderLanguage::MSL will instead instruct Filament to check + * for the presence of MSL in a material first, falling back to METAL_LIBRARY if MSL is not + * present. + * + * When using a non-Metal backend, setting this has no effect. + */ + public enum ShaderLanguage { + DEFAULT, + MSL, + METAL_LIBRARY, + }; + public ShaderLanguage preferredShaderLanguage = ShaderLanguage.DEFAULT; + /* * When the OpenGL ES backend is used, setting this value to true will force a GLES2.0 * context if supported by the Platform, or if not, will have the backend pretend @@ -1362,6 +1385,7 @@ public class Engine { int stereoscopicType, long stereoscopicEyeCount, long resourceAllocatorCacheSizeMB, long resourceAllocatorCacheMaxAge, boolean disableHandleUseAfterFreeCheck, + int preferredShaderLanguage, boolean forceGLES2Context); private static native void nSetBuilderFeatureLevel(long nativeBuilder, int ordinal); private static native void nSetBuilderSharedContext(long nativeBuilder, long sharedContext);