diff --git a/src/video/uikit/SDL_uikitopenglview.m b/src/video/uikit/SDL_uikitopenglview.m index f0237cafb..0c2a6b109 100644 --- a/src/video/uikit/SDL_uikitopenglview.m +++ b/src/video/uikit/SDL_uikitopenglview.m @@ -183,15 +183,11 @@ - (void)updateFrame { - glBindFramebuffer(GL_FRAMEBUFFER, viewFramebuffer); - glBindRenderbuffer(GL_RENDERBUFFER, 0); - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 0); - glDeleteRenderbuffers(1, &viewRenderbuffer); + GLint prevRenderbuffer = 0; + glGetIntegerv(GL_RENDERBUFFER_BINDING, &prevRenderbuffer); - glGenRenderbuffers(1, &viewRenderbuffer); glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer); [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer]; - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, viewRenderbuffer); glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &backingWidth); glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &backingHeight); @@ -201,9 +197,7 @@ glRenderbufferStorage(GL_RENDERBUFFER, depthBufferFormat, backingWidth, backingHeight); } - glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer); - - [self setDebugLabels]; + glBindRenderbuffer(GL_RENDERBUFFER, prevRenderbuffer); } - (void)setDebugLabels @@ -278,8 +272,15 @@ { [super layoutSubviews]; - [EAGLContext setCurrentContext:context]; - [self updateFrame]; + CGSize layersize = self.layer.bounds.size; + int width = (int) (layersize.width * self.layer.contentsScale); + int height = (int) (layersize.height * self.layer.contentsScale); + + /* Update the color and depth buffer storage if the layer size has changed. */ + if (width != backingWidth || height != backingHeight) { + [EAGLContext setCurrentContext:context]; + [self updateFrame]; + } } - (void)destroyFramebuffer