From 44d4694c2956a073bc67697abedd8e1829e9d6b2 Mon Sep 17 00:00:00 2001
From: Ben Doherty
Date: Wed, 30 Sep 2020 16:12:45 -0600
Subject: [PATCH] Add JNI binding for vsm msaa samples (#3139)
---
.../src/main/cpp/LightManager.cpp | 7 ++++--
.../google/android/filament/LightManager.java | 23 +++++++++++++++++--
2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/android/filament-android/src/main/cpp/LightManager.cpp b/android/filament-android/src/main/cpp/LightManager.cpp
index 1c71d1bf71..8cc37f69d7 100644
--- a/android/filament-android/src/main/cpp/LightManager.cpp
+++ b/android/filament-android/src/main/cpp/LightManager.cpp
@@ -77,7 +77,7 @@ Java_com_google_android_filament_LightManager_nBuilderShadowOptions(JNIEnv* env,
jlong nativeBuilder, jint mapSize, jint cascades, jfloatArray splitPositions,
jfloat constantBias, jfloat normalBias, jfloat shadowFar, jfloat shadowNearHint,
jfloat shadowFarHint, jboolean stable, jboolean screenSpaceContactShadows, jint stepCount,
- jfloat maxShadowDistance) {
+ jfloat maxShadowDistance, jint vsmMsaaSamples) {
LightManager::Builder *builder = (LightManager::Builder *) nativeBuilder;
LightManager::ShadowOptions shadowOptions {
.mapSize = (uint32_t)mapSize,
@@ -90,7 +90,10 @@ Java_com_google_android_filament_LightManager_nBuilderShadowOptions(JNIEnv* env,
.stable = (bool)stable,
.screenSpaceContactShadows = (bool)screenSpaceContactShadows,
.stepCount = uint8_t(stepCount),
- .maxShadowDistance = maxShadowDistance
+ .maxShadowDistance = maxShadowDistance,
+ .vsm = {
+ .msaaSamples = (uint8_t) vsmMsaaSamples
+ }
};
jfloat *nativeSplits = env->GetFloatArrayElements(splitPositions, NULL);
const jsize splitCount = std::min((jsize) 3, env->GetArrayLength(splitPositions));
diff --git a/android/filament-android/src/main/java/com/google/android/filament/LightManager.java b/android/filament-android/src/main/java/com/google/android/filament/LightManager.java
index c51c26f035..ea537cf2e7 100644
--- a/android/filament-android/src/main/java/com/google/android/filament/LightManager.java
+++ b/android/filament-android/src/main/java/com/google/android/filament/LightManager.java
@@ -305,6 +305,25 @@ public class LightManager {
*
*/
public float maxShadowDistance = 0.3f;
+
+ /*
+ * Options prefixed with 'vsm' are available when the View's ShadowType is set to VSM.
+ *
+ * @see View#setShadowType
+ */
+
+ /**
+ * The number of MSAA samples to use when rendering VSM shadow maps.
+ * Must be a power-of-two and greater than or equal to 1. A value of 1 effectively turns
+ * off MSAA.
+ * Higher values may not be available depending on the underlying hardware.
+ *
+ *
+ * Warning: This API is still experimental and subject to change.
+ *
+ */
+ @IntRange(from = 1)
+ public int vsmMsaaSamples = 1;
}
public static class ShadowCascades {
@@ -433,7 +452,7 @@ public class LightManager {
options.mapSize, options.shadowCascades, options.cascadeSplitPositions,
options.constantBias, options.normalBias, options.shadowFar, options.shadowNearHint,
options.shadowFarHint, options.stable, options.screenSpaceContactShadows,
- options.stepCount, options.maxShadowDistance);
+ options.stepCount, options.maxShadowDistance, options.vsmMsaaSamples);
return this;
}
@@ -1059,7 +1078,7 @@ public class LightManager {
private static native void nDestroyBuilder(long nativeBuilder);
private static native boolean nBuilderBuild(long nativeBuilder, long nativeEngine, int entity);
private static native void nBuilderCastShadows(long nativeBuilder, boolean enable);
- private static native void nBuilderShadowOptions(long nativeBuilder, int mapSize, int cascades, float[] splitPositions, float constantBias, float normalBias, float shadowFar, float shadowNearHint, float shadowFarhint, boolean stable, boolean screenSpaceContactShadows, int stepCount, float maxShadowDistance);
+ private static native void nBuilderShadowOptions(long nativeBuilder, int mapSize, int cascades, float[] splitPositions, float constantBias, float normalBias, float shadowFar, float shadowNearHint, float shadowFarhint, boolean stable, boolean screenSpaceContactShadows, int stepCount, float maxShadowDistance, int vsmMsaaSamples);
private static native void nBuilderCastLight(long nativeBuilder, boolean enabled);
private static native void nBuilderPosition(long nativeBuilder, float x, float y, float z);
private static native void nBuilderDirection(long nativeBuilder, float x, float y, float z);