Fixed magenta texture on iOS with OpenGL ES 2.0

This commit is contained in:
Sam Lantinga 2012-01-30 20:56:25 -05:00
parent ee38b15029
commit f917e29ad7
2 changed files with 10 additions and 2 deletions

View file

@ -111,6 +111,7 @@ typedef struct
#undef SDL_PROC #undef SDL_PROC
SDL_bool GL_OES_framebuffer_object_supported; SDL_bool GL_OES_framebuffer_object_supported;
GLES_FBOList *framebuffers; GLES_FBOList *framebuffers;
GLuint window_framebuffer;
SDL_bool useDrawTexture; SDL_bool useDrawTexture;
SDL_bool GL_OES_draw_texture_supported; 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")) { if (SDL_GL_ExtensionSupported("GL_OES_framebuffer_object")) {
data->GL_OES_framebuffer_object_supported = SDL_TRUE; data->GL_OES_framebuffer_object_supported = SDL_TRUE;
renderer->info.flags |= SDL_RENDERER_TARGETTEXTURE; renderer->info.flags |= SDL_RENDERER_TARGETTEXTURE;
data->glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &value);
data->window_framebuffer = (GLuint)value;
} }
data->framebuffers = NULL; data->framebuffers = NULL;
@ -586,7 +590,7 @@ GLES_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
GLES_ActivateRenderer(renderer); GLES_ActivateRenderer(renderer);
if (texture == NULL) { if (texture == NULL) {
data->glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); data->glBindFramebufferOES(GL_FRAMEBUFFER_OES, data->window_framebuffer);
return 0; return 0;
} }

View file

@ -145,6 +145,7 @@ typedef struct GLES2_DriverContext
#include "SDL_gles2funcs.h" #include "SDL_gles2funcs.h"
#undef SDL_PROC #undef SDL_PROC
GLES2_FBOList *framebuffers; GLES2_FBOList *framebuffers;
GLuint window_framebuffer;
int shader_format_count; int shader_format_count;
GLenum *shader_formats; GLenum *shader_formats;
@ -546,7 +547,7 @@ GLES2_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
GLenum status; GLenum status;
if (texture == NULL) { if (texture == NULL) {
data->glBindFramebuffer(GL_FRAMEBUFFER, 0); data->glBindFramebuffer(GL_FRAMEBUFFER, data->window_framebuffer);
} else { } else {
texturedata = (GLES2_TextureData *) texture->driverdata; texturedata = (GLES2_TextureData *) texture->driverdata;
data->glBindFramebuffer(GL_FRAMEBUFFER, texturedata->fbo->FBO); data->glBindFramebuffer(GL_FRAMEBUFFER, texturedata->fbo->FBO);
@ -1394,6 +1395,7 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags)
GLboolean hasCompiler; GLboolean hasCompiler;
#endif #endif
Uint32 windowFlags; Uint32 windowFlags;
GLint window_framebuffer;
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
@ -1485,6 +1487,8 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags)
#endif /* ZUNE_HD */ #endif /* ZUNE_HD */
rdata->framebuffers = NULL; rdata->framebuffers = NULL;
rdata->glGetIntegerv(GL_FRAMEBUFFER_BINDING, &window_framebuffer);
rdata->window_framebuffer = (GLuint)window_framebuffer;
/* Populate the function pointers for the module */ /* Populate the function pointers for the module */
renderer->WindowEvent = &GLES2_WindowEvent; renderer->WindowEvent = &GLES2_WindowEvent;