diff --git a/desmume/src/frontend/cocoa/cocoa_GPU.mm b/desmume/src/frontend/cocoa/cocoa_GPU.mm index 1894e882c..5bb5bf091 100644 --- a/desmume/src/frontend/cocoa/cocoa_GPU.mm +++ b/desmume/src/frontend/cocoa/cocoa_GPU.mm @@ -306,6 +306,11 @@ public: gpuEvent->FramebufferUnlock(); gpuEvent->Render3DUnlock(); + + if (_needRestoreRender3DLock) + { + _needRestoreRender3DLock = NO; + } } - (NSSize) gpuDimensions @@ -374,6 +379,11 @@ public: gpuEvent->FramebufferUnlock(); gpuEvent->Render3DUnlock(); + + if (_needRestoreRender3DLock) + { + _needRestoreRender3DLock = NO; + } } - (NSUInteger) gpuColorFormat diff --git a/desmume/src/frontend/cocoa/cocoa_core.mm b/desmume/src/frontend/cocoa/cocoa_core.mm index 999555080..713d9de43 100644 --- a/desmume/src/frontend/cocoa/cocoa_core.mm +++ b/desmume/src/frontend/cocoa/cocoa_core.mm @@ -685,7 +685,6 @@ volatile bool execute = true; pthread_cond_signal(&threadParam.condThreadExecute); pthread_mutex_unlock(&threadParam.mutexThreadExecute); - [[self cdsGPU] respondToPauseState:(coreState == ExecutionBehavior_Pause)]; [[self cdsController] setHardwareMicPause:(coreState != ExecutionBehavior_Run)]; // This method affects UI updates, but can also be called from a thread that is different from @@ -1178,6 +1177,8 @@ static void* RunCoreThread(void *arg) execControl->ApplySettingsOnExecutionLoopStart(); behavior = execControl->GetExecutionBehaviorApplied(); + [[cdsCore cdsGPU] respondToPauseState:(behavior == ExecutionBehavior_Pause)]; + while (!(behavior != ExecutionBehavior_Pause && execute)) { pthread_cond_wait(¶m->condThreadExecute, ¶m->mutexThreadExecute); @@ -1187,6 +1188,8 @@ static void* RunCoreThread(void *arg) behavior = execControl->GetExecutionBehaviorApplied(); } + [[cdsCore cdsGPU] respondToPauseState:(behavior == ExecutionBehavior_Pause)]; + if ( (lastBehavior == ExecutionBehavior_Run) && (behavior != ExecutionBehavior_Run) ) { lastExecutionWaitBias = executionWaitBias;