Skip to content

Commit

Permalink
iOS: fix compile errors when SDL3 is used
Browse files Browse the repository at this point in the history
  • Loading branch information
slime73 committed Oct 8, 2024
1 parent 28393cd commit 8227b7b
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 1 deletion.
32 changes: 31 additions & 1 deletion src/common/ios.mm
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,16 @@

#include <vector>

#if __has_include(<SDL3/SDL_events.h>)
#include <SDL3/SDL_events.h>
#include <SDL3/SDL_video.h>
#include <SDL3/SDL_version.h>
#else
#include <SDL_events.h>
#include <SDL_video.h>
#include <SDL_syswm.h>
#include <SDL_version.h>
#endif

static NSArray *getLovesInDocuments();
static bool deleteFileInDocuments(NSString *filename);
Expand Down Expand Up @@ -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"])
Expand All @@ -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;
}
}
Expand Down Expand Up @@ -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;
Expand Down
21 changes: 21 additions & 0 deletions src/modules/graphics/opengl/Graphics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,13 @@
#include <cstdio>

#ifdef LOVE_IOS
#if __has_include(<SDL3/SDL_video.h>)
#include <SDL3/SDL_video.h>
#include <SDL3/SDL_version.h>
#else
#include <SDL_syswm.h>
#include <SDL_version.h>
#endif
#endif

namespace love
Expand Down Expand Up @@ -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);
Expand All @@ -290,6 +304,7 @@ GLuint Graphics::getSystemBackbufferFBO() const
return info.info.uikit.resolveFramebuffer;
else
return info.info.uikit.framebuffer;
#endif
#else
return 0;
#endif
Expand Down Expand Up @@ -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)
Expand Down
11 changes: 11 additions & 0 deletions src/modules/graphics/opengl/OpenGL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,13 @@
#endif

#ifdef LOVE_IOS
#if __has_include(<SDL3/SDL_video.h>)
#include <SDL3/SDL_video.h>
#include <SDL3/SDL_version.h>
#else
#include <SDL_syswm.h>
#include <SDL_version.h>
#endif
#endif

#ifdef LOVE_ANDROID
Expand Down Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions src/modules/love/love.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,11 @@
#endif // LOVE_LEGENDARY_CONSOLE_IO_HACK

#ifdef LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK
#if __has_include(<SDL3/SDL_version.h>)
#undef LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK
#else
#include <SDL_hints.h>
#endif
#endif // LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK

// Libraries.
Expand Down

0 comments on commit 8227b7b

Please sign in to comment.