Navigation Menu

Skip to content

Commit

Permalink
iOS: Also do the Dictation crash workaround before executing the anim…
Browse files Browse the repository at this point in the history
…ation callback.
  • Loading branch information
slime73 committed Apr 2, 2016
1 parent 8837227 commit 6cfa71a
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 13 deletions.
16 changes: 3 additions & 13 deletions src/video/uikit/SDL_uikitevents.m
Expand Up @@ -26,6 +26,7 @@

#include "SDL_uikitvideo.h"
#include "SDL_uikitevents.h"
#include "SDL_uikitopengles.h"

#import <Foundation/Foundation.h>

Expand Down Expand Up @@ -63,19 +64,8 @@ touch events to get processed (which is important to get certain
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 */
Expand Down
2 changes: 2 additions & 0 deletions src/video/uikit/SDL_uikitopengles.h
Expand Up @@ -33,6 +33,8 @@ extern void UIKit_GL_DeleteContext(_THIS, SDL_GLContext context);
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: */
18 changes: 18 additions & 0 deletions src/video/uikit/SDL_uikitopengles.m
Expand Up @@ -217,6 +217,24 @@ void UIKit_GL_SwapWindow(_THIS, SDL_Window * window)
}
}

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: */
4 changes: 4 additions & 0 deletions src/video/uikit/SDL_uikitviewcontroller.m
Expand Up @@ -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"
Expand Down Expand Up @@ -102,6 +103,9 @@ - (void)doLoop:(CADisplayLink*)sender
{
/* 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);
}
}
Expand Down

0 comments on commit 6cfa71a

Please sign in to comment.