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.

This commit is contained in:
Alex Szpakowski 2014-08-08 15:14:09 -03:00
parent 2dac6bf57e
commit deceab256e
4 changed files with 57 additions and 0 deletions

View File

@ -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__ */

View File

@ -210,6 +210,40 @@ UIKit_GL_DeleteContext(_THIS, SDL_GLContext context)
}
}
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: */

View File

@ -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;

View File

@ -162,6 +162,16 @@
return self;
}
- (GLuint)drawableRenderbuffer
{
return viewRenderbuffer;
}
- (GLuint)drawableFramebuffer
{
return viewFramebuffer;
}
- (void)updateFrame
{
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);