Implemented clean shutdown

This commit is contained in:
Simon 2020-04-14 23:47:06 +01:00
parent 7ec9b2932e
commit c893d99b6c
7 changed files with 38 additions and 32 deletions

View file

@ -1406,7 +1406,7 @@ bool QzDoom_processMessageQueue() {
}
void showLoadingIcon();
void jni_shutdown();
void * AppThreadFunction(void * parm ) {
gAppThread = (ovrAppThread *) parm;
@ -1479,6 +1479,9 @@ void * AppThreadFunction(void * parm ) {
//We are done, shutdown cleanly
shutdownVR();
//Ask Java to shut down
jni_shutdown();
return NULL;
}
@ -1711,9 +1714,26 @@ Activity lifecycle
================================================================================
*/
jmethodID android_shutdown;
static JavaVM *jVM;
static jobject shutdownCallbackObj=0;
void jni_shutdown()
{
ALOGV("Calling: jni_shutdown");
JNIEnv *env;
jobject tmp;
if (((*jVM)->GetEnv(jVM, (void**) &env, JNI_VERSION_1_4))<0)
{
(*jVM)->AttachCurrentThread(jVM,&env, NULL);
}
return (*env)->CallVoidMethod(env, shutdownCallbackObj, android_shutdown);
}
int JNI_OnLoad(JavaVM* vm, void* reserved)
{
JNIEnv *env;
jVM = vm;
if((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK)
{
ALOGE("Failed JNI_OnLoad");
@ -1796,10 +1816,15 @@ JNIEXPORT jlong JNICALL Java_com_drbeef_questzdoom_GLES3JNILib_onCreate( JNIEnv
}
JNIEXPORT void JNICALL Java_com_drbeef_questzdoom_GLES3JNILib_onStart( JNIEnv * env, jobject obj, jlong handle)
JNIEXPORT void JNICALL Java_com_drbeef_questzdoom_GLES3JNILib_onStart( JNIEnv * env, jobject obj, jlong handle, jobject obj1)
{
ALOGV( " GLES3JNILib::onStart()" );
shutdownCallbackObj = (jobject)(*env)->NewGlobalRef(env, obj1);
jclass callbackClass = (*env)->GetObjectClass(env, shutdownCallbackObj);
android_shutdown = (*env)->GetMethodID(env,callbackClass,"shutdown","()V");
ovrAppThread * appThread = (ovrAppThread *)((size_t)handle);
ovrMessage message;
ovrMessage_Init( &message, MESSAGE_ON_START, MQ_WAIT_PROCESSED );

View file

@ -76,9 +76,7 @@ EXTERN_CVAR(Bool, vr_hud_fixed_roll);
double P_XYMovement(AActor *mo, DVector2 scroll);
extern "C" void VR_GetMove( float *joy_forward, float *joy_side, float *hmd_forward, float *hmd_side, float *up, float *yaw, float *pitch, float *roll );
void I_Quit();
extern int game_running;
void ST_Endoom();
namespace s3d
{
@ -392,8 +390,7 @@ namespace s3d
if (shutdown)
{
game_running = false;
I_Quit();
ST_Endoom();
return;
}

View file

@ -374,9 +374,11 @@ bool FTTYStartupScreen::NetLoop(bool (*timer_callback)(void *), void *userdata)
}
}
extern int game_running;
extern bool wantToRestart;
void ST_Endoom()
{
I_ShutdownJoysticks();
call_terms();
exit(0);
game_running = false;
wantToRestart = true;
}

View file

@ -351,9 +351,6 @@ OptionMenu "OptionsMenu" protected
Submenu "$OPTMNU_NETWORK", "NetworkOptions"
Submenu "$OPTMNU_SOUND", "SoundOptions"
Submenu "$OPTMNU_DISPLAY", "VideoOptions"
Submenu "$OPTMNU_CHANGERENDER", "RendererMenu"
StaticText " "
Submenu "$OS_TITLE", "os_Menu"
StaticText " "
SafeCommand "$OPTMNU_DEFAULTS", "reset2defaults"
SafeCommand "$OPTMNU_RESETTOSAVED", "reset2saved"

Binary file not shown.

View file

@ -48,19 +48,12 @@ import android.support.v4.content.ContextCompat;
private SurfaceHolder mSurfaceHolder;
private long mNativeHandle;
// Main components
protected static GLES3JNIActivity mSingleton;
// Audio
protected static AudioTrack mAudioTrack;
protected static AudioRecord mAudioRecord;
public static void initialize() {
// The static nature of the singleton and Android quirkyness force us to initialize everything here
// Otherwise, when exiting the app and returning to it, these variables *keep* their pre exit values
mSingleton = null;
mAudioTrack = null;
mAudioRecord = null;
public void shutdown() {
System.exit(0);
}
@Override protected void onCreate( Bundle icicle )
@ -69,12 +62,6 @@ import android.support.v4.content.ContextCompat;
Log.v( TAG, "GLES3JNIActivity::onCreate()" );
super.onCreate( icicle );
GLES3JNIActivity.initialize();
// So we can call stuff from static callbacks
mSingleton = this;
mView = new SurfaceView( this );
setContentView( mView );
mView.getHolder().addCallback( this );
@ -245,7 +232,7 @@ import android.support.v4.content.ContextCompat;
Log.v( TAG, "GLES3JNIActivity::onStart()" );
super.onStart();
GLES3JNILib.onStart( mNativeHandle );
GLES3JNILib.onStart( mNativeHandle, this );
}
@Override protected void onResume()
@ -282,8 +269,6 @@ import android.support.v4.content.ContextCompat;
GLES3JNILib.onDestroy( mNativeHandle );
super.onDestroy();
// Reset everything in case the user re opens the app
GLES3JNIActivity.initialize();
mNativeHandle = 0;
}

View file

@ -10,7 +10,7 @@ public class GLES3JNILib
{
// Activity lifecycle
public static native long onCreate( Activity obj, String commandLineParams );
public static native void onStart( long handle );
public static native void onStart( long handle, Object obj );
public static native void onResume( long handle );
public static native void onPause( long handle );
public static native void onStop( long handle );