From deceab256e88f486639c578a88e67fa38c1add92 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Fri, 8 Aug 2014 15:14:09 -0300 Subject: [PATCH] Added iOS-specific functions to get the window view's current OpenGL Renderbuffer and Framebuffer objects, so they can be more easily rebound when necessary. --- include/SDL_system.h | 10 ++++++++ src/video/uikit/SDL_uikitopengles.m | 34 +++++++++++++++++++++++++++ src/video/uikit/SDL_uikitopenglview.h | 3 +++ src/video/uikit/SDL_uikitopenglview.m | 10 ++++++++ 4 files changed, 57 insertions(+) diff --git a/include/SDL_system.h b/include/SDL_system.h index 78d5b0d0a99d0..8184e597c2f76 100644 --- a/include/SDL_system.h +++ b/include/SDL_system.h @@ -70,6 +70,16 @@ extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *a extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); +/* 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_iPhoneGetViewRenderbuffer(SDL_Window * window); + +/* 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_iPhoneGetViewFramebuffer(SDL_Window * window); + #endif /* __IPHONEOS__ */ diff --git a/src/video/uikit/SDL_uikitopengles.m b/src/video/uikit/SDL_uikitopengles.m index 7d828093d5cbc..378099d8ea541 100644 --- a/src/video/uikit/SDL_uikitopengles.m +++ b/src/video/uikit/SDL_uikitopengles.m @@ -210,6 +210,40 @@ void UIKit_GL_SwapWindow(_THIS, SDL_Window * window) } } +Uint32 SDL_iPhoneGetViewRenderbuffer(SDL_Window * window) +{ + if (!window) { + SDL_SetError("Invalid window"); + return 0; + } + + @autoreleasepool { + SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; + if (data.view != nil) { + return data.view.drawableRenderbuffer; + } else { + return 0; + } + } +} + +Uint32 SDL_iPhoneGetViewFramebuffer(SDL_Window * window) +{ + if (!window) { + SDL_SetError("Invalid window"); + return 0; + } + + @autoreleasepool { + SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; + if (data.view != nil) { + return data.view.drawableFramebuffer; + } else { + return 0; + } + } +} + #endif /* SDL_VIDEO_DRIVER_UIKIT */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/uikit/SDL_uikitopenglview.h b/src/video/uikit/SDL_uikitopenglview.h index 9bb8f0c7f972e..b232c53fae59a 100644 --- a/src/video/uikit/SDL_uikitopenglview.h +++ b/src/video/uikit/SDL_uikitopenglview.h @@ -50,6 +50,9 @@ @property (nonatomic, readonly) int backingWidth; @property (nonatomic, readonly) int backingHeight; +@property (nonatomic, readonly) GLuint drawableRenderbuffer; +@property (nonatomic, readonly) GLuint drawableFramebuffer; + - (void)swapBuffers; - (void)setCurrentContext; diff --git a/src/video/uikit/SDL_uikitopenglview.m b/src/video/uikit/SDL_uikitopenglview.m index da724dce76df4..4b93ab6249d36 100644 --- a/src/video/uikit/SDL_uikitopenglview.m +++ b/src/video/uikit/SDL_uikitopenglview.m @@ -162,6 +162,16 @@ - (id)initWithFrame:(CGRect)frame return self; } +- (GLuint)drawableRenderbuffer +{ + return viewRenderbuffer; +} + +- (GLuint)drawableFramebuffer +{ + return viewFramebuffer; +} + - (void)updateFrame { glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);