From 00fc9cdcb6573dab7e76b615669c9718bd07e0b1 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Thu, 1 Dec 2016 13:08:34 -0800 Subject: [PATCH] Improve behavior for default framebuffer on iOS --- project/src/backend/sdl/SDLRenderer.cpp | 4 ++++ project/src/graphics/opengl/OpenGLBindings.cpp | 15 ++++++++++++++- project/src/graphics/opengl/OpenGLBindings.h | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/project/src/backend/sdl/SDLRenderer.cpp b/project/src/backend/sdl/SDLRenderer.cpp index d045753de..89da79574 100644 --- a/project/src/backend/sdl/SDLRenderer.cpp +++ b/project/src/backend/sdl/SDLRenderer.cpp @@ -69,6 +69,10 @@ namespace lime { valid = true; #endif + #ifdef IPHONEOS + glGetIntegerv (GL_FRAMEBUFFER_BINDING_OES, &OpenGLBindings::defaultFramebuffer); + #endif + } if (!valid) { diff --git a/project/src/graphics/opengl/OpenGLBindings.cpp b/project/src/graphics/opengl/OpenGLBindings.cpp index 060df1d1f..d9352a814 100644 --- a/project/src/graphics/opengl/OpenGLBindings.cpp +++ b/project/src/graphics/opengl/OpenGLBindings.cpp @@ -28,6 +28,7 @@ namespace lime { bool OpenGLBindings::initialized = false; void *OpenGLBindings::handle = 0; + int OpenGLBindings::defaultFramebuffer = 0; void lime_gl_delete_buffer (value handle); void lime_gl_delete_framebuffer (value handle); @@ -216,7 +217,19 @@ namespace lime { void lime_gl_bind_framebuffer (int target, value framebuffer) { - glBindFramebuffer (target, val_is_null (framebuffer) ? 0 : reinterpret_cast (val_data (framebuffer))); + GLuint id; + + if (val_is_null (framebuffer)) { + + id = OpenGLBindings::defaultFramebuffer; + + } else { + + id = reinterpret_cast (val_data (framebuffer)); + + } + + glBindFramebuffer (target, id); } diff --git a/project/src/graphics/opengl/OpenGLBindings.h b/project/src/graphics/opengl/OpenGLBindings.h index 6e7328454..fb9306438 100644 --- a/project/src/graphics/opengl/OpenGLBindings.h +++ b/project/src/graphics/opengl/OpenGLBindings.h @@ -11,6 +11,7 @@ namespace lime { static bool Init (); + static int defaultFramebuffer; static void* handle;