From d2c3be68dcda2c290a44956457b455735fd02804 Mon Sep 17 00:00:00 2001 From: "Randall E. Barker" Date: Thu, 6 Feb 2020 08:47:47 -0800 Subject: [PATCH] Ensure RunnableQueue is reattached when new render thread starts (#2743) Fixes #2739 --- app/src/main/cpp/Skybox.cpp | 1 + app/src/main/cpp/native-lib.cpp | 2 +- app/src/main/cpp/vrb | 2 +- app/src/picovr/cpp/native-lib.cpp | 3 ++- app/src/wavevr/cpp/native-lib.cpp | 8 ++++++++ 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/cpp/Skybox.cpp b/app/src/main/cpp/Skybox.cpp index 7e7684c40..4418850a6 100644 --- a/app/src/main/cpp/Skybox.cpp +++ b/app/src/main/cpp/Skybox.cpp @@ -113,6 +113,7 @@ struct Skybox::State { }; VertexArrayPtr array = VertexArray::Create(aContext); + array->SetUVLength(3); const float kLength = 140.0f; for (int i = 0; i < cubeVertices.size(); i += 3) { array->AppendVertex(Vector(-kLength * cubeVertices[i], -kLength * cubeVertices[i + 1], diff --git a/app/src/main/cpp/native-lib.cpp b/app/src/main/cpp/native-lib.cpp index bbeaf5fbc..dca0681fc 100644 --- a/app/src/main/cpp/native-lib.cpp +++ b/app/src/main/cpp/native-lib.cpp @@ -199,7 +199,7 @@ android_main(android_app *aAppState) { // Attach JNI thread JNIEnv *jniEnv; (*aAppState->activity->vm).AttachCurrentThread(&jniEnv, nullptr); - sAppContext->mQueue->InitializeJava(jniEnv); + sAppContext->mQueue->AttachToThread(); // Create Browser context crow::VRBrowser::InitializeJava(jniEnv, aAppState->activity->clazz); diff --git a/app/src/main/cpp/vrb b/app/src/main/cpp/vrb index 2b0ab88fb..3f19c90cb 160000 --- a/app/src/main/cpp/vrb +++ b/app/src/main/cpp/vrb @@ -1 +1 @@ -Subproject commit 2b0ab88fb28ca3b44a5cc5b2a97e7de0b56018b8 +Subproject commit 3f19c90cb3fa3aa2739d7612fbb6dd06eff26bfb diff --git a/app/src/picovr/cpp/native-lib.cpp b/app/src/picovr/cpp/native-lib.cpp index 01d9160a2..3c889f333 100644 --- a/app/src/picovr/cpp/native-lib.cpp +++ b/app/src/picovr/cpp/native-lib.cpp @@ -35,6 +35,7 @@ JNI_METHOD(void, nativeOnCreate) JNI_METHOD(void, nativeInitialize) (JNIEnv* aEnv, jobject aActivity, jint width, jint height, jobject aAssetManager, jint type, jint focusInex) { gDestroyed = false; + sQueue->AttachToThread(); if (!sDevice) { sDevice = crow::DeviceDelegatePicoVR::Create(BrowserWorld::Instance().GetRenderContext()); } @@ -55,7 +56,7 @@ JNI_METHOD(void, nativeShutdown) JNI_METHOD(void, nativeDestroy) (JNIEnv*, jobject) { gDestroyed = true; - sQueue->ProcessRunnables(); + sQueue->Clear(); BrowserWorld::Instance().ShutdownJava(); BrowserWorld::Instance().RegisterDeviceDelegate(nullptr); sDevice = nullptr; diff --git a/app/src/wavevr/cpp/native-lib.cpp b/app/src/wavevr/cpp/native-lib.cpp index 5ce1f7e31..49dcdd3f4 100644 --- a/app/src/wavevr/cpp/native-lib.cpp +++ b/app/src/wavevr/cpp/native-lib.cpp @@ -43,6 +43,7 @@ JNI_METHOD(void, activityResumed) } int main(int argc, char *argv[]) { + sQueue->AttachToThread(); VRB_LOG("Call WVR_Init"); WVR_InitError eError = WVR_Init(WVR_AppType_VRContent); if (eError != WVR_InitError_None) { @@ -87,7 +88,14 @@ int main(int argc, char *argv[]) { VRB_GL_CHECK(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); BrowserWorld::Instance().Draw(); } + BrowserWorld::Instance().RegisterDeviceDelegate(nullptr); + sDevice = nullptr; BrowserWorld::Instance().ShutdownGL(); + BrowserWorld::Instance().ShutdownJava(); + sQueue->Clear(); + sJavaInitialized = false; + BrowserWorld::Destroy(); + WVR_Quit(); return 0; }