static int GLES2_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture) { GLES2_DriverContext *data = (GLES2_DriverContext *) renderer->driverdata; GLES2_TextureData *texturedata = NULL; GLenum status; if (texture == NULL) { data->glBindFramebuffer(GL_FRAMEBUFFER, 0); } else { texturedata = (GLES2_TextureData *) texture->driverdata; data->glBindFramebuffer(GL_FRAMEBUFFER, texturedata->fbo->FBO); /* TODO: check if texture pixel format allows this operation */ data->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texturedata->texture_type, texturedata->texture, 0); /* Check FBO status */ status = data->glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) { SDL_SetError("glFramebufferTexture2D() failed"); return -1; } } if (data->current_program) { GLES2_SetOrthographicProjection(renderer); } return 0; }
static int GLES2_UpdateViewport(SDL_Renderer * renderer) { GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; if (SDL_CurrentContext != rdata->context) { /* We'll update the viewport after we rebind the context */ return 0; } rdata->glViewport(renderer->viewport.x, renderer->viewport.y, renderer->viewport.w, renderer->viewport.h); if (rdata->current_program) { GLES2_SetOrthographicProjection(renderer); } return 0; }