diff --git a/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java b/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java index 80704f71f..6f2c68bf1 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java @@ -1135,6 +1135,14 @@ private void onAppLink(String aJSON) { }); } + @Keep + @SuppressWarnings("unused") + private void disableLayers() { + runOnUiThread(() -> { + SettingsStore.getInstance(this).setDisableLayers(true); + }); + } + private SurfaceTexture createSurfaceTexture() { int[] ids = new int[1]; GLES20.glGenTextures(1, ids, 0); diff --git a/app/src/common/shared/org/mozilla/vrbrowser/browser/SettingsStore.java b/app/src/common/shared/org/mozilla/vrbrowser/browser/SettingsStore.java index 3191937c0..e2ede5473 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/browser/SettingsStore.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/browser/SettingsStore.java @@ -98,6 +98,11 @@ SettingsStore getInstance(final @NonNull Context aContext) { private int mCachedScrollDirection = -1; + private boolean mDisableLayers = false; + public void setDisableLayers(final boolean aDisableLayers) { + mDisableLayers = aDisableLayers; + } + public SettingsStore(Context aContext) { mContext = aContext; mPrefs = PreferenceManager.getDefaultSharedPreferences(aContext); @@ -409,9 +414,11 @@ public void setMSAALevel(int level) { } public boolean getLayersEnabled() { - if (DeviceType.isOculusBuild()) { + if (DeviceType.isOculusBuild() && !mDisableLayers) { + Log.i(LOGTAG, "Layers are enabled"); return true; } + Log.i(LOGTAG, "Layers are not supported"); return false; } diff --git a/app/src/main/cpp/VRBrowser.cpp b/app/src/main/cpp/VRBrowser.cpp index 660c531d9..415e06b7a 100644 --- a/app/src/main/cpp/VRBrowser.cpp +++ b/app/src/main/cpp/VRBrowser.cpp @@ -54,6 +54,8 @@ const char* kHandlePoorPerformance = "handlePoorPerformance"; const char* kHandlePoorPerformanceSignature = "()V"; const char* kOnAppLink = "onAppLink"; const char* kOnAppLinkSignature = "(Ljava/lang/String;)V"; +const char* kDisableLayers = "disableLayers"; +const char* kDisableLayersSignature = "()V"; JNIEnv* sEnv = nullptr; jclass sBrowserClass = nullptr; @@ -80,6 +82,7 @@ jmethodID sSetDeviceType = nullptr; jmethodID sHaltActivity = nullptr; jmethodID sHandlePoorPerformance = nullptr; jmethodID sOnAppLink = nullptr; +jmethodID sDisableLayers = nullptr; } namespace crow { @@ -121,6 +124,7 @@ VRBrowser::InitializeJava(JNIEnv* aEnv, jobject aActivity) { sHaltActivity = FindJNIMethodID(sEnv, sBrowserClass, kHaltActivity, kHaltActivitySignature); sHandlePoorPerformance = FindJNIMethodID(sEnv, sBrowserClass, kHandlePoorPerformance, kHandlePoorPerformanceSignature); sOnAppLink = FindJNIMethodID(sEnv, sBrowserClass, kOnAppLink, kOnAppLinkSignature); + sDisableLayers = FindJNIMethodID(sEnv, sBrowserClass, kDisableLayers, kDisableLayersSignature); } void @@ -155,7 +159,8 @@ VRBrowser::ShutdownJava() { sAreLayersEnabled = nullptr; sSetDeviceType = nullptr; sHaltActivity = nullptr; - sOnAppLink = nullptr; + sOnAppLink = nullptr; + sDisableLayers = nullptr; sEnv = nullptr; } @@ -353,4 +358,11 @@ VRBrowser::OnAppLink(const std::string& aJSON) { CheckJNIException(sEnv, __FUNCTION__); } +void +VRBrowser::DisableLayers() { + if (!ValidateMethodID(sEnv, sActivity, sDisableLayers, __FUNCTION__)) { return; } + sEnv->CallVoidMethod(sActivity, sDisableLayers); + CheckJNIException(sEnv, __FUNCTION__); +} + } // namespace crow diff --git a/app/src/main/cpp/VRBrowser.h b/app/src/main/cpp/VRBrowser.h index 2d2dc5f34..55200c95b 100644 --- a/app/src/main/cpp/VRBrowser.h +++ b/app/src/main/cpp/VRBrowser.h @@ -40,6 +40,7 @@ void SetDeviceType(const jint aType); void HaltActivity(const jint aReason); void HandlePoorPerformance(); void OnAppLink(const std::string& aJSON); +void DisableLayers(); } // namespace VRBrowser; } // namespace crow diff --git a/app/src/oculusvr/cpp/DeviceDelegateOculusVR.cpp b/app/src/oculusvr/cpp/DeviceDelegateOculusVR.cpp index 2c1fc02e5..c475f9231 100644 --- a/app/src/oculusvr/cpp/DeviceDelegateOculusVR.cpp +++ b/app/src/oculusvr/cpp/DeviceDelegateOculusVR.cpp @@ -131,7 +131,6 @@ struct DeviceDelegateOculusVR::State { void Initialize() { elbow = ElbowModel::Create(); - layersEnabled = VRBrowser::AreLayersEnabled(); vrb::RenderContextPtr localContext = context.lock(); java.Vm = app->activity->vm; @@ -147,6 +146,14 @@ struct DeviceDelegateOculusVR::State { return; } initialized = true; + std::string version = vrapi_GetVersionString(); + if (version.find("1.1.32.0") != std::string::npos) { + VRB_ERROR("Disable layers due to driver bug. VRAPI Runtime Version: %s", vrapi_GetVersionString()); + layersEnabled = false; + VRBrowser::DisableLayers(); + } else { + layersEnabled = VRBrowser::AreLayersEnabled(); + } SetRenderSize(device::RenderMode::StandAlone); for (int i = 0; i < VRAPI_EYE_COUNT; ++i) { diff --git a/app/src/oculusvr/java/org/mozilla/vrbrowser/PlatformActivity.java b/app/src/oculusvr/java/org/mozilla/vrbrowser/PlatformActivity.java index 8f81dfa57..62dbf47e4 100644 --- a/app/src/oculusvr/java/org/mozilla/vrbrowser/PlatformActivity.java +++ b/app/src/oculusvr/java/org/mozilla/vrbrowser/PlatformActivity.java @@ -12,6 +12,7 @@ import android.view.View; import android.view.WindowManager; +import org.mozilla.vrbrowser.browser.SettingsStore; import org.mozilla.vrbrowser.utils.SystemUtils; public class PlatformActivity extends NativeActivity {