1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Fixes on android:

- creating Vulkan context instead of OpenGL
- checking for validity of ENV in wrapper classes
- fix for access to JavaVM from threads
This commit is contained in:
Bastiaan Olij
2021-03-09 21:19:57 +11:00
parent 888051889e
commit b3a43430aa
7 changed files with 87 additions and 2 deletions

View File

@@ -30,17 +30,34 @@
#include "thread_jandroid.h"
#include <android/log.h>
#include "core/os/thread.h"
static JavaVM *java_vm = nullptr;
static thread_local JNIEnv *env = nullptr;
// The logic here need to improve, init_thread/term_tread are designed to work with Thread::callback
// Calling init_thread from setup_android_thread and get_jni_env to setup an env we're keeping and not detaching
// could cause issues on app termination.
//
// We should be making sure that any thread started calls a nice cleanup function when it's done,
// especially now that we use many more threads.
static void init_thread() {
if (env) {
// thread never detached! just keep using...
return;
}
java_vm->AttachCurrentThread(&env, nullptr);
}
static void term_thread() {
java_vm->DetachCurrentThread();
// this is no longer valid, must called init_thread to re-establish
env = nullptr;
}
void init_thread_jandroid(JavaVM *p_jvm, JNIEnv *p_env) {
@@ -50,9 +67,17 @@ void init_thread_jandroid(JavaVM *p_jvm, JNIEnv *p_env) {
}
void setup_android_thread() {
init_thread();
if (!env) {
// !BAS! see remarks above
init_thread();
}
}
JNIEnv *get_jni_env() {
if (!env) {
// !BAS! see remarks above
init_thread();
}
return env;
}