You've already forked godot
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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user