Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
The iOS OpenGL ES context's color Renderbuffer Object is no longer co…
…mpletely destroyed and recreated in layoutSubviews. Its storage is now only reallocated when the actual size of the layer changes. The framebuffer object and renderbuffer object binding states are no longer clobbered by the storage reallocation code in layoutSubviews.
  • Loading branch information
slime73 committed Nov 21, 2014
1 parent 38c6e9d commit 6d85f52
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions src/video/uikit/SDL_uikitopenglview.m
Expand Up @@ -183,15 +183,11 @@ - (GLuint)drawableFramebuffer

- (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);
Expand All @@ -201,9 +197,7 @@ - (void)updateFrame
glRenderbufferStorage(GL_RENDERBUFFER, depthBufferFormat, backingWidth, backingHeight);
}

glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);

[self setDebugLabels];
glBindRenderbuffer(GL_RENDERBUFFER, prevRenderbuffer);
}

- (void)setDebugLabels
Expand Down Expand Up @@ -278,8 +272,15 @@ - (void)layoutSubviews
{
[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
Expand Down

0 comments on commit 6d85f52

Please sign in to comment.