diff options
Diffstat (limited to '3rdparty/SDL2/src/video/uikit/SDL_uikitopengles.m')
-rw-r--r-- | 3rdparty/SDL2/src/video/uikit/SDL_uikitopengles.m | 249 |
1 files changed, 0 insertions, 249 deletions
diff --git a/3rdparty/SDL2/src/video/uikit/SDL_uikitopengles.m b/3rdparty/SDL2/src/video/uikit/SDL_uikitopengles.m deleted file mode 100644 index 461ff9b8065..00000000000 --- a/3rdparty/SDL2/src/video/uikit/SDL_uikitopengles.m +++ /dev/null @@ -1,249 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_VIDEO_DRIVER_UIKIT - -#include "SDL_uikitopengles.h" -#import "SDL_uikitopenglview.h" -#include "SDL_uikitmodes.h" -#include "SDL_uikitwindow.h" -#include "SDL_uikitevents.h" -#include "../SDL_sysvideo.h" -#include "../../events/SDL_keyboard_c.h" -#include "../../events/SDL_mouse_c.h" -#include "../../power/uikit/SDL_syspower.h" -#include "SDL_loadso.h" -#include <dlfcn.h> - -@interface SDLEAGLContext : EAGLContext - -/* The OpenGL ES context owns a view / drawable. */ -@property (nonatomic, strong) SDL_uikitopenglview *sdlView; - -@end - -@implementation SDLEAGLContext - -- (void)dealloc -{ - /* When the context is deallocated, its view should be removed from any - * SDL window that it's attached to. */ - [self.sdlView setSDLWindow:NULL]; -} - -@end - -void * -UIKit_GL_GetProcAddress(_THIS, const char *proc) -{ - /* Look through all SO's for the proc symbol. Here's why: - * -Looking for the path to the OpenGL Library seems not to work in the iOS Simulator. - * -We don't know that the path won't change in the future. */ - return dlsym(RTLD_DEFAULT, proc); -} - -/* - note that SDL_GL_DeleteContext makes it current without passing the window -*/ -int -UIKit_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) -{ - @autoreleasepool { - SDLEAGLContext *eaglcontext = (__bridge SDLEAGLContext *) context; - - if (![EAGLContext setCurrentContext:eaglcontext]) { - return SDL_SetError("Could not make EAGL context current"); - } - - if (eaglcontext) { - [eaglcontext.sdlView setSDLWindow:window]; - } - } - - return 0; -} - -void -UIKit_GL_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h) -{ - @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; - if (w) { - *w = glview.backingWidth; - } - if (h) { - *h = glview.backingHeight; - } - } - } -} - -int -UIKit_GL_LoadLibrary(_THIS, const char *path) -{ - /* We shouldn't pass a path to this function, since we've already loaded the - * library. */ - if (path != NULL) { - return SDL_SetError("iOS GL Load Library just here for compatibility"); - } - return 0; -} - -void UIKit_GL_SwapWindow(_THIS, SDL_Window * window) -{ - @autoreleasepool { - SDLEAGLContext *context = (__bridge SDLEAGLContext *) SDL_GL_GetCurrentContext(); - -#if SDL_POWER_UIKIT - /* Check once a frame to see if we should turn off the battery monitor. */ - SDL_UIKit_UpdateBatteryMonitoring(); -#endif - - [context.sdlView swapBuffers]; - - /* You need to pump events in order for the OS to make changes visible. - * We don't pump events here because we don't want iOS application events - * (low memory, terminate, etc.) to happen inside low level rendering. */ - } -} - -SDL_GLContext -UIKit_GL_CreateContext(_THIS, SDL_Window * window) -{ - @autoreleasepool { - SDLEAGLContext *context = nil; - SDL_uikitopenglview *view; - SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; - CGRect frame = UIKit_ComputeViewFrame(window, data.uiwindow.screen); - EAGLSharegroup *sharegroup = nil; - CGFloat scale = 1.0; - int samples = 0; - int major = _this->gl_config.major_version; - int minor = _this->gl_config.minor_version; - - /* The EAGLRenderingAPI enum values currently map 1:1 to major GLES - * versions. */ - EAGLRenderingAPI api = major; - - /* iOS currently doesn't support GLES >3.0. iOS 6 also only supports up - * to GLES 2.0. */ - if (major > 3 || (major == 3 && (minor > 0 || !UIKit_IsSystemVersionAtLeast(7.0)))) { - SDL_SetError("OpenGL ES %d.%d context could not be created", major, minor); - return NULL; - } - - if (_this->gl_config.multisamplebuffers > 0) { - samples = _this->gl_config.multisamplesamples; - } - - if (_this->gl_config.share_with_current_context) { - EAGLContext *context = (__bridge EAGLContext *) SDL_GL_GetCurrentContext(); - sharegroup = context.sharegroup; - } - - if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) { - /* Set the scale to the natural scale factor of the screen - the - * backing dimensions of the OpenGL view will match the pixel - * dimensions of the screen rather than the dimensions in points. */ -#ifdef __IPHONE_8_0 - if ([data.uiwindow.screen respondsToSelector:@selector(nativeScale)]) { - scale = data.uiwindow.screen.nativeScale; - } else -#endif - { - scale = data.uiwindow.screen.scale; - } - } - - context = [[SDLEAGLContext alloc] initWithAPI:api sharegroup:sharegroup]; - if (!context) { - SDL_SetError("OpenGL ES %d context could not be created", _this->gl_config.major_version); - return NULL; - } - - /* construct our view, passing in SDL's OpenGL configuration data */ - view = [[SDL_uikitopenglview alloc] initWithFrame:frame - scale:scale - retainBacking:_this->gl_config.retained_backing - rBits:_this->gl_config.red_size - gBits:_this->gl_config.green_size - bBits:_this->gl_config.blue_size - aBits:_this->gl_config.alpha_size - depthBits:_this->gl_config.depth_size - stencilBits:_this->gl_config.stencil_size - sRGB:_this->gl_config.framebuffer_srgb_capable - multisamples:samples - context:context]; - - if (!view) { - return NULL; - } - - /* The context owns the view / drawable. */ - context.sdlView = view; - - if (UIKit_GL_MakeCurrent(_this, window, (__bridge SDL_GLContext) context) < 0) { - UIKit_GL_DeleteContext(_this, (SDL_GLContext) CFBridgingRetain(context)); - return NULL; - } - - /* We return a +1'd context. The window's driverdata owns the view (via - * MakeCurrent.) */ - return (SDL_GLContext) CFBridgingRetain(context); - } -} - -void -UIKit_GL_DeleteContext(_THIS, SDL_GLContext context) -{ - @autoreleasepool { - /* The context was retained in SDL_GL_CreateContext, so we release it - * here. The context's view will be detached from its window when the - * context is deallocated. */ - CFRelease(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 */ - -/* vi: set ts=4 sw=4 expandtab: */ |