From 071211de8683e0afafa4e78adbcc80173b07acc3 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 30 Jan 2012 20:56:25 -0500 Subject: [PATCH] Fixed magenta texture on iOS with OpenGL ES 2.0 --- src/render/opengles/SDL_render_gles.c | 6 +++++- src/render/opengles2/SDL_render_gles2.c | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/render/opengles/SDL_render_gles.c b/src/render/opengles/SDL_render_gles.c index 70a591b13..dbff63345 100755 --- a/src/render/opengles/SDL_render_gles.c +++ b/src/render/opengles/SDL_render_gles.c @@ -111,6 +111,7 @@ typedef struct #undef SDL_PROC SDL_bool GL_OES_framebuffer_object_supported; GLES_FBOList *framebuffers; + GLuint window_framebuffer; SDL_bool useDrawTexture; SDL_bool GL_OES_draw_texture_supported; @@ -356,6 +357,9 @@ GLES_CreateRenderer(SDL_Window * window, Uint32 flags) if (SDL_GL_ExtensionSupported("GL_OES_framebuffer_object")) { data->GL_OES_framebuffer_object_supported = SDL_TRUE; renderer->info.flags |= SDL_RENDERER_TARGETTEXTURE; + + data->glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &value); + data->window_framebuffer = (GLuint)value; } data->framebuffers = NULL; @@ -586,7 +590,7 @@ GLES_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture) GLES_ActivateRenderer(renderer); if (texture == NULL) { - data->glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); + data->glBindFramebufferOES(GL_FRAMEBUFFER_OES, data->window_framebuffer); return 0; } diff --git a/src/render/opengles2/SDL_render_gles2.c b/src/render/opengles2/SDL_render_gles2.c index 61c6a7fb6..ce1b696f4 100755 --- a/src/render/opengles2/SDL_render_gles2.c +++ b/src/render/opengles2/SDL_render_gles2.c @@ -145,6 +145,7 @@ typedef struct GLES2_DriverContext #include "SDL_gles2funcs.h" #undef SDL_PROC GLES2_FBOList *framebuffers; + GLuint window_framebuffer; int shader_format_count; GLenum *shader_formats; @@ -546,7 +547,7 @@ GLES2_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture) GLenum status; if (texture == NULL) { - data->glBindFramebuffer(GL_FRAMEBUFFER, 0); + data->glBindFramebuffer(GL_FRAMEBUFFER, data->window_framebuffer); } else { texturedata = (GLES2_TextureData *) texture->driverdata; data->glBindFramebuffer(GL_FRAMEBUFFER, texturedata->fbo->FBO); @@ -1394,6 +1395,7 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) GLboolean hasCompiler; #endif Uint32 windowFlags; + GLint window_framebuffer; SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); @@ -1485,6 +1487,8 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) #endif /* ZUNE_HD */ rdata->framebuffers = NULL; + rdata->glGetIntegerv(GL_FRAMEBUFFER_BINDING, &window_framebuffer); + rdata->window_framebuffer = (GLuint)window_framebuffer; /* Populate the function pointers for the module */ renderer->WindowEvent = &GLES2_WindowEvent;