diff --git a/src/common/ios.mm b/src/common/ios.mm index 4d5065aac..a1f8109da 100644 --- a/src/common/ios.mm +++ b/src/common/ios.mm @@ -35,9 +35,16 @@ #include +#if __has_include() +#include +#include +#include +#else #include #include #include +#include +#endif static NSArray *getLovesInDocuments(); static bool deleteFileInDocuments(NSString *filename); @@ -167,14 +174,27 @@ static bool deleteFileInDocuments(NSString *filename) return success; } -static int dropFileEventFilter(void *userdata, SDL_Event *event) +#if SDL_VERSION_ATLEAST(3, 0, 0) +static bool +#else +static int +#endif +dropFileEventFilter(void *userdata, SDL_Event *event) { @autoreleasepool { +#if SDL_VERSION_ATLEAST(3, 0, 0) + if (event->type != SDL_EVENT_DROP_FILE) +#else if (event->type != SDL_DROPFILE) +#endif return 1; +#if SDL_VERSION_ATLEAST(3, 0, 0) + NSString *fname = @(event->drop.data); +#else NSString *fname = @(event->drop.file); +#endif NSFileManager *fmanager = [NSFileManager defaultManager]; if ([fmanager fileExistsAtPath:fname] && [fname.pathExtension isEqual:@"love"]) @@ -195,7 +215,9 @@ static int dropFileEventFilter(void *userdata, SDL_Event *event) vc.gameList = [[NSMutableArray alloc] initWithArray:games copyItems:YES]; [vc.tableView reloadData]; +#if !SDL_VERSION_ATLEAST(3, 0, 0) SDL_free(event->drop.file); +#endif return 0; } } @@ -434,11 +456,19 @@ Rect getSafeArea(SDL_Window *window) Rect rect = {}; SDL_GetWindowSize(window, &rect.w, &rect.h); +#if SDL_VERSION_ATLEAST(3, 0, 0) + SDL_PropertiesID props = SDL_GetWindowProperties(window); + UIWindow *window = (__bridge UIWindow *) SDL_GetPointerProperty(props, SDL_PROP_WINDOW_UIKIT_WINDOW_POINTER, nullptr); + if (window != nil) + { + UIView *view = window.rootViewController.view; +#else SDL_SysWMinfo info = {}; SDL_VERSION(&info.version); if (SDL_GetWindowWMInfo(window, &info)) { UIView *view = info.info.uikit.window.rootViewController.view; +#endif if (@available(iOS 11.0, tvOS 11.0, *)) { UIEdgeInsets insets = view.safeAreaInsets; diff --git a/src/modules/graphics/opengl/Graphics.cpp b/src/modules/graphics/opengl/Graphics.cpp index 501638394..e6215ba8a 100644 --- a/src/modules/graphics/opengl/Graphics.cpp +++ b/src/modules/graphics/opengl/Graphics.cpp @@ -45,7 +45,13 @@ #include #ifdef LOVE_IOS +#if __has_include() +#include +#include +#else #include +#include +#endif #endif namespace love @@ -282,6 +288,14 @@ GLuint Graphics::getSystemBackbufferFBO() const { #ifdef LOVE_IOS // Hack: iOS uses a custom FBO. +#if SDL_VERSION_ATLEAST(3, 0, 0) + SDL_PropertiesID props = SDL_GetWindowProperties(SDL_GL_GetCurrentWindow()); + GLuint resolveframebuffer = (GLuint)SDL_GetNumberProperty(props, SDL_PROP_WINDOW_UIKIT_OPENGL_RESOLVE_FRAMEBUFFER_NUMBER, 0); + if (resolveframebuffer != 0) + return resolveframebuffer; + else + return (GLuint)SDL_GetNumberProperty(props, SDL_PROP_WINDOW_UIKIT_OPENGL_FRAMEBUFFER_NUMBER, 0); +#else SDL_SysWMinfo info = {}; SDL_VERSION(&info.version); SDL_GetWindowWMInfo(SDL_GL_GetCurrentWindow(), &info); @@ -290,6 +304,7 @@ GLuint Graphics::getSystemBackbufferFBO() const return info.info.uikit.resolveFramebuffer; else return info.info.uikit.framebuffer; +#endif #else return 0; #endif @@ -1291,10 +1306,16 @@ void Graphics::present(void *screenshotCallbackData) #ifdef LOVE_IOS // Hack: SDL's color renderbuffer must be bound when swapBuffers is called. +#if SDL_VERSION_ATLEAST(3, 0, 0) + SDL_PropertiesID props = SDL_GetWindowProperties(SDL_GL_GetCurrentWindow()); + GLuint colorbuffer = (GLuint)SDL_GetNumberProperty(props, SDL_PROP_WINDOW_UIKIT_OPENGL_RENDERBUFFER_NUMBER, 0); + glBindRenderbuffer(GL_RENDERBUFFER, colorbuffer); +#else SDL_SysWMinfo info = {}; SDL_VERSION(&info.version); SDL_GetWindowWMInfo(SDL_GL_GetCurrentWindow(), &info); glBindRenderbuffer(GL_RENDERBUFFER, info.info.uikit.colorbuffer); +#endif #endif for (StreamBuffer *buffer : batchedDrawState.vb) diff --git a/src/modules/graphics/opengl/OpenGL.cpp b/src/modules/graphics/opengl/OpenGL.cpp index 8657ebc45..c7a4a4d6d 100644 --- a/src/modules/graphics/opengl/OpenGL.cpp +++ b/src/modules/graphics/opengl/OpenGL.cpp @@ -44,7 +44,13 @@ #endif #ifdef LOVE_IOS +#if __has_include() +#include +#include +#else #include +#include +#endif #endif #ifdef LOVE_ANDROID @@ -966,10 +972,15 @@ GLuint OpenGL::getDefaultFBO() const { #ifdef LOVE_IOS // Hack: iOS uses a custom FBO. +#if SDL_VERSION_ATLEAST(3, 0, 0) + SDL_PropertiesID props = SDL_GetWindowProperties(SDL_GL_GetCurrentWindow()); + return (GLuint)SDL_GetNumberProperty(props, SDL_PROP_WINDOW_UIKIT_OPENGL_FRAMEBUFFER_NUMBER, 0); +#else SDL_SysWMinfo info = {}; SDL_VERSION(&info.version); SDL_GetWindowWMInfo(SDL_GL_GetCurrentWindow(), &info); return info.info.uikit.framebuffer; +#endif #else return 0; #endif diff --git a/src/modules/love/love.cpp b/src/modules/love/love.cpp index 81503e955..b06447c7d 100644 --- a/src/modules/love/love.cpp +++ b/src/modules/love/love.cpp @@ -48,7 +48,11 @@ #endif // LOVE_LEGENDARY_CONSOLE_IO_HACK #ifdef LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK +#if __has_include() +#undef LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK +#else #include +#endif #endif // LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK // Libraries.