mirror of https://github.com/encounter/SDL.git
iOS: Also do the Dictation crash workaround before executing the animation callback.
This commit is contained in:
parent
88372277b7
commit
6cfa71a10e
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
#include "SDL_uikitvideo.h"
|
#include "SDL_uikitvideo.h"
|
||||||
#include "SDL_uikitevents.h"
|
#include "SDL_uikitevents.h"
|
||||||
|
#include "SDL_uikitopengles.h"
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@ -63,19 +64,8 @@ UIKit_PumpEvents(_THIS)
|
||||||
result = CFRunLoopRunInMode((CFStringRef)UITrackingRunLoopMode, seconds, TRUE);
|
result = CFRunLoopRunInMode((CFStringRef)UITrackingRunLoopMode, seconds, TRUE);
|
||||||
} while(result == kCFRunLoopRunHandledSource);
|
} while(result == kCFRunLoopRunHandledSource);
|
||||||
|
|
||||||
@autoreleasepool {
|
/* See the comment in the function definition. */
|
||||||
/* Some iOS system functionality (such as Dictation on the on-screen
|
UIKit_GL_RestoreCurrentContext();
|
||||||
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 */
|
#endif /* SDL_VIDEO_DRIVER_UIKIT */
|
||||||
|
|
|
@ -33,6 +33,8 @@ extern void UIKit_GL_DeleteContext(_THIS, SDL_GLContext context);
|
||||||
extern void *UIKit_GL_GetProcAddress(_THIS, const char *proc);
|
extern void *UIKit_GL_GetProcAddress(_THIS, const char *proc);
|
||||||
extern int UIKit_GL_LoadLibrary(_THIS, const char *path);
|
extern int UIKit_GL_LoadLibrary(_THIS, const char *path);
|
||||||
|
|
||||||
|
extern void UIKit_GL_RestoreCurrentContext();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
|
|
@ -217,6 +217,24 @@ UIKit_GL_DeleteContext(_THIS, SDL_GLContext context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 */
|
#endif /* SDL_VIDEO_DRIVER_UIKIT */
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "SDL_uikitvideo.h"
|
#include "SDL_uikitvideo.h"
|
||||||
#include "SDL_uikitmodes.h"
|
#include "SDL_uikitmodes.h"
|
||||||
#include "SDL_uikitwindow.h"
|
#include "SDL_uikitwindow.h"
|
||||||
|
#include "SDL_uikitopengles.h"
|
||||||
|
|
||||||
#if SDL_IPHONE_KEYBOARD
|
#if SDL_IPHONE_KEYBOARD
|
||||||
#include "keyinfotable.h"
|
#include "keyinfotable.h"
|
||||||
|
@ -102,6 +103,9 @@
|
||||||
{
|
{
|
||||||
/* Don't run the game loop while a messagebox is up */
|
/* Don't run the game loop while a messagebox is up */
|
||||||
if (!UIKit_ShowingMessageBox()) {
|
if (!UIKit_ShowingMessageBox()) {
|
||||||
|
/* See the comment in the function definition. */
|
||||||
|
UIKit_GL_RestoreCurrentContext();
|
||||||
|
|
||||||
animationCallback(animationCallbackParam);
|
animationCallback(animationCallbackParam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue