iOS: Also do the Dictation crash workaround before executing the animation callback.
--- a/src/video/uikit/SDL_uikitevents.m Sat Apr 02 11:54:05 2016 -0300
+++ b/src/video/uikit/SDL_uikitevents.m Sat Apr 02 13:21:01 2016 -0300
@@ -26,6 +26,7 @@
#include "SDL_uikitvideo.h"
#include "SDL_uikitevents.h"
+#include "SDL_uikitopengles.h"
#import <Foundation/Foundation.h>
@@ -63,19 +64,8 @@
result = CFRunLoopRunInMode((CFStringRef)UITrackingRunLoopMode, seconds, TRUE);
} while(result == kCFRunLoopRunHandledSource);
- @autoreleasepool {
- /* Some iOS system functionality (such as Dictation on the on-screen
- keyboard) uses its own OpenGL ES context but doesn't restore the
- previous one when it's done. This is a workaround to make sure the
- expected SDL-created OpenGL ES context is active after the OS is
- finished running its own code for the frame. If this isn't done, the
- app may crash or have other nasty symptoms when Dictation is used.
- */
- EAGLContext *context = (__bridge EAGLContext *) SDL_GL_GetCurrentContext();
- if (context != NULL && [EAGLContext currentContext] != context) {
- [EAGLContext setCurrentContext:context];
- }
- }
+ /* See the comment in the function definition. */
+ UIKit_GL_RestoreCurrentContext();
}
#endif /* SDL_VIDEO_DRIVER_UIKIT */
--- a/src/video/uikit/SDL_uikitopengles.h Sat Apr 02 11:54:05 2016 -0300
+++ b/src/video/uikit/SDL_uikitopengles.h Sat Apr 02 13:21:01 2016 -0300
@@ -33,6 +33,8 @@
extern void *UIKit_GL_GetProcAddress(_THIS, const char *proc);
extern int UIKit_GL_LoadLibrary(_THIS, const char *path);
+extern void UIKit_GL_RestoreCurrentContext();
+
#endif
/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/uikit/SDL_uikitopengles.m Sat Apr 02 11:54:05 2016 -0300
+++ b/src/video/uikit/SDL_uikitopengles.m Sat Apr 02 13:21:01 2016 -0300
@@ -217,6 +217,24 @@
}
}
+void
+UIKit_GL_RestoreCurrentContext()
+{
+ @autoreleasepool {
+ /* Some iOS system functionality (such as Dictation on the on-screen
+ keyboard) uses its own OpenGL ES context but doesn't restore the
+ previous one when it's done. This is a workaround to make sure the
+ expected SDL-created OpenGL ES context is active after the OS is
+ finished running its own code for the frame. If this isn't done, the
+ app may crash or have other nasty symptoms when Dictation is used.
+ */
+ EAGLContext *context = (__bridge EAGLContext *) SDL_GL_GetCurrentContext();
+ if (context != NULL && [EAGLContext currentContext] != context) {
+ [EAGLContext setCurrentContext:context];
+ }
+ }
+}
+
#endif /* SDL_VIDEO_DRIVER_UIKIT */
/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/uikit/SDL_uikitviewcontroller.m Sat Apr 02 11:54:05 2016 -0300
+++ b/src/video/uikit/SDL_uikitviewcontroller.m Sat Apr 02 13:21:01 2016 -0300
@@ -33,6 +33,7 @@
#include "SDL_uikitvideo.h"
#include "SDL_uikitmodes.h"
#include "SDL_uikitwindow.h"
+#include "SDL_uikitopengles.h"
#if SDL_IPHONE_KEYBOARD
#include "keyinfotable.h"
@@ -102,6 +103,9 @@
{
/* Don't run the game loop while a messagebox is up */
if (!UIKit_ShowingMessageBox()) {
+ /* See the comment in the function definition. */
+ UIKit_GL_RestoreCurrentContext();
+
animationCallback(animationCallbackParam);
}
}