From c4035654a996ea17efa27f8ad198ff3154a92833 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Thu, 9 Apr 2015 19:28:00 -0300 Subject: [PATCH] Added framebuffer and colorbuffer members to the uikit portion of the SDL_SysWMinfo struct, removed SDL_iOSGetViewRenderbuffer and SDL_iOSGetViewFramebuffer. --- include/SDL_system.h | 14 ---------- include/SDL_syswm.h | 3 +++ src/dynapi/SDL_dynapi_overrides.h | 2 -- src/dynapi/SDL_dynapi_procs.h | 4 --- src/video/uikit/SDL_uikitopengles.m | 42 ----------------------------- src/video/uikit/SDL_uikitwindow.m | 16 +++++++++++ 6 files changed, 19 insertions(+), 62 deletions(-) diff --git a/include/SDL_system.h b/include/SDL_system.h index 0c2d34a3dbb9f..ee9bb48166700 100644 --- a/include/SDL_system.h +++ b/include/SDL_system.h @@ -79,20 +79,6 @@ extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, #define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); -/** - \brief Returns the OpenGL Renderbuffer Object associated with the window's main view. - - The Renderbuffer must be bound when calling SDL_GL_SwapWindow. - */ -extern DECLSPEC Uint32 SDLCALL SDL_iOSGetViewRenderbuffer(SDL_Window * window); - -/** - \brief Returns the OpenGL Framebuffer Object associated with the window's main view. - - The Framebuffer must be bound when rendering to the screen. - */ -extern DECLSPEC Uint32 SDLCALL SDL_iOSGetViewFramebuffer(SDL_Window * window); - #endif /* __IPHONEOS__ */ diff --git a/include/SDL_syswm.h b/include/SDL_syswm.h index c265333841834..fa1145534ac23 100644 --- a/include/SDL_syswm.h +++ b/include/SDL_syswm.h @@ -98,6 +98,7 @@ typedef struct _NSWindow NSWindow; typedef struct _UIWindow UIWindow; typedef struct _UIViewController UIViewController; #endif +typedef Uint32 GLuint; #endif #if defined(SDL_VIDEO_DRIVER_ANDROID) @@ -228,6 +229,8 @@ struct SDL_SysWMinfo #else UIWindow *window; /* The UIKit window */ #endif + GLuint framebuffer; /* The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */ + GLuint colorbuffer; /* The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */ } uikit; #endif #if defined(SDL_VIDEO_DRIVER_WAYLAND) diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h index 3508280fa525c..dcc6d4677693f 100644 --- a/src/dynapi/SDL_dynapi_overrides.h +++ b/src/dynapi/SDL_dynapi_overrides.h @@ -592,5 +592,3 @@ #define SDL_GetQueuedAudioSize SDL_GetQueuedAudioSize_REAL #define SDL_ClearQueuedAudio SDL_ClearQueuedAudio_REAL #define SDL_GetGrabbedWindow SDL_GetGrabbedWindow_REAL -#define SDL_iOSGetViewRenderbuffer SDL_iOSGetViewRenderbuffer_REAL -#define SDL_iOSGetViewFramebuffer SDL_iOSGetViewFramebuffer_REAL diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h index a66c99760ba9f..6408e3f892d7c 100644 --- a/src/dynapi/SDL_dynapi_procs.h +++ b/src/dynapi/SDL_dynapi_procs.h @@ -624,7 +624,3 @@ SDL_DYNAPI_PROC(int,SDL_QueueAudio,(SDL_AudioDeviceID a, const void *b, Uint32 c SDL_DYNAPI_PROC(Uint32,SDL_GetQueuedAudioSize,(SDL_AudioDeviceID a),(a),return) SDL_DYNAPI_PROC(void,SDL_ClearQueuedAudio,(SDL_AudioDeviceID a),(a),) SDL_DYNAPI_PROC(SDL_Window*,SDL_GetGrabbedWindow,(void),(),return) -#if defined(__IPHONEOS__) && __IPHONEOS__ -SDL_DYNAPI_PROC(Uint32,SDL_iOSGetViewRenderbuffer,(SDL_Window *a),(a),return) -SDL_DYNAPI_PROC(Uint32,SDL_iOSGetViewFramebuffer,(SDL_Window *a),(a),return) -#endif diff --git a/src/video/uikit/SDL_uikitopengles.m b/src/video/uikit/SDL_uikitopengles.m index 66c912293732b..0184cf7581918 100644 --- a/src/video/uikit/SDL_uikitopengles.m +++ b/src/video/uikit/SDL_uikitopengles.m @@ -183,48 +183,6 @@ void UIKit_GL_SwapWindow(_THIS, SDL_Window * window) } } -Uint32 -SDL_iOSGetViewRenderbuffer(SDL_Window * window) -{ - if (!window) { - SDL_SetError("Invalid window"); - return 0; - } - - @autoreleasepool { - SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; - UIView *view = data.viewcontroller.view; - if ([view isKindOfClass:[SDL_uikitopenglview class]]) { - SDL_uikitopenglview *glview = (SDL_uikitopenglview *) view; - return glview.drawableRenderbuffer; - } - } - - SDL_SetError("Window does not have an attached OpenGL view"); - return 0; -} - -Uint32 -SDL_iOSGetViewFramebuffer(SDL_Window * window) -{ - if (!window) { - SDL_SetError("Invalid window"); - return 0; - } - - @autoreleasepool { - SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; - UIView *view = data.viewcontroller.view; - if ([view isKindOfClass:[SDL_uikitopenglview class]]) { - SDL_uikitopenglview *glview = (SDL_uikitopenglview *) view; - return glview.drawableFramebuffer; - } - } - - SDL_SetError("Window does not have an attached OpenGL view"); - return 0; -} - #endif /* SDL_VIDEO_DRIVER_UIKIT */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/uikit/SDL_uikitwindow.m b/src/video/uikit/SDL_uikitwindow.m index df4c700ba25e5..e65732cf60a73 100644 --- a/src/video/uikit/SDL_uikitwindow.m +++ b/src/video/uikit/SDL_uikitwindow.m @@ -38,6 +38,7 @@ #import "SDL_uikitappdelegate.h" #import "SDL_uikitview.h" +#import "SDL_uikitopenglview.h" #include @@ -314,8 +315,23 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; if (info->version.major <= SDL_MAJOR_VERSION) { + int versionnum = SDL_VERSIONNUM(info->version.major, info->version.minor, info->version.patch); + info->subsystem = SDL_SYSWM_UIKIT; info->info.uikit.window = data.uiwindow; + + /* These struct members were added in SDL 2.0.4. */ + if (versionnum >= SDL_VERSIONNUM(2,0,4)) { + if ([data.viewcontroller.view isKindOfClass:[SDL_uikitopenglview class]]) { + SDL_uikitopenglview *glview = (SDL_uikitopenglview *)data.viewcontroller.view; + info->info.uikit.framebuffer = glview.drawableFramebuffer; + info->info.uikit.colorbuffer = glview.drawableRenderbuffer; + } else { + info->info.uikit.framebuffer = 0; + info->info.uikit.colorbuffer = 0; + } + } + return SDL_TRUE; } else { SDL_SetError("Application not compiled with SDL %d.%d\n",